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;