Wstęp do programowania 2

Transkrypt

Wstęp do programowania 2
Wstęp do programowania 2
wykład 4
jednostki rodzajowe
Agata Półrola
Wydział Matematyki UŁ
2005/2006
http://www.math.uni.lodz.pl/~polrola
Problem:
 Czasami pisząc program właściwie
powtarzamy kilkakrotnie pewne funkcje
i procedury – różnią się one np. tylko
typem danych czy ich
zakresem..................
 zob.
plik redundancja.adb
Rozwiązanie: rodzajowość
 Istnieją dwa typy jednostek
rodzajowych:
 podprogramy
rodzajowe
 pakiety rodzajowe
 Jednostka rodzajowa jest rodzajem
„szablonu” podprogramu czy pakietu,
w którym pewne elementy można
„wypełnić”
 Konkretyzacja powoduje „wypełnienie”
tych elementów
 Miejsca (elementy) „do wypełnienia”
nazywamy formalnymi parametrami
rodzajowymi. Są to identyfikatory
zastępujące:
 wartość
określonego typu
 zmienną określonego podtypu
 podprogram o określonych parametrach
 typ określonego rodzaju
 pakiet dostarczający określonych funkcji
Postać jednostki rodzajowej
 Jednostka rodzajowa składa się z deklaracji
rodzajowej i ciała.
 Deklaracja rodzajowa ma postać:
generic
deklaracje rodzajowych parametrów
formalnych;
deklaracja jednostki rodzajowej;
gdzie deklaracja jedn. rodzajowej może być
deklaracją pakietu, procedury bądź funkcji
 Ciało jednostki rodzajowej jest zwykłym
pakietem, procedurą bądź funkcją,
odwołującą się do parametrów rodzajowych.
 Jednostka rodzajowa może wystąpić
w różnych kontekstach:
w
części deklaracyjnej programu (najpierw
deklaracja rodzajowa, potem ciało
jednostki rodzajowej)
 w pakiecie (deklaracja rodzajowa
w specyfikacji pakietu, ciało jednostki
rodzajowej w ciele pakietu)
Przykład funkcji rodzajowej
--- deklaracja rodzajowa
generic
type jakis_typ is private;
procedure zamien (a,b: in out jakis_typ);
--- ciało jednostki rodzajowej
procedure zamien(a,b: in out jakis_typ) is
temp:jakis_typ;
begin
temp := a;
a:=b;
b:=temp;
end zamien;
Konkretyzacja
 Konkretyzacja jednostki rodzajowej
może mieć postać:
procedure nazwa_procedury is new
procedura_rodzajowa(lst_aktualnych_par_rodz);
function nazwa_funkcji is new
funkcja_rodzajowa(lst_aktualnych_par_rodz);
package nazwa_pakietu is new
pakiet_rodzajowa(lst_aktualnych_par_rodz);
Przykłady konkretyzacji
procedure zamien_char is new
zamien(character);
procedure zamien_int is new
zamien(integer);
procedure zamien_flt is new
zamien(float);
 zob.
plik redundancja1.adb
Niektóre typy rodzajowe:
 rodzajowy typ całkowity
type nazwa_typu is range <>;
 rodzajowy typ zmiennoprzecinkowy
type nazwa_typu is digits <>;
 rodzajowy typ stałoprzecinkowy
type nazwa_typu is delta <>;
 rodzajowy typ dyskretny
type nazwa_typu is (<>);
 rodzajowy typ prywatny
type nazwa_typu is private;
 rodzajowy ograniczony typ prywatny
type nazwa_typu is limited private;