Realizacja konkretnego typu danych Abstrakcyjne typy danych Programowanie i struktury danych Wykªad 2 Stanisªaw Goldstein Wydziaª Matematyki i Informatyki U February 24, 2014 Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Spis tre±ci 1 Realizacja konkretnego typu danych Denicje Przykªad KTD 2 Abstrakcyjne typy danych Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Przykªad KTD Denicje Struktura danych to konkretny sposób reprezentacji (organizacji) warto±ci (danych) tego typu. Mówimy, »e struktura reprezentuje (lub implementuje) dane tego typu. Konkretny typ danych to typ danych, dla którego w sposób jawny podana jest struktura danych realizuj¡ca jego warto±ci. Operacje typu to procedury i funkcje posiadaj¡ce argumenty z jego zbioru warto±ci lub te» funkcje o warto±ciach w tym zbiorze, jak równie» staªe (odnosz¡ce si¦ do) tego typu. Operacje podstawowe typu (metody typu) to te operacje typu, które go deniuj¡. Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Przykªad KTD Realizacja konkretnego typu danych Konkretny typ danych realizowany jest w pakiecie (jego specykacji): −− w y g l a d p a k i e t u package KTD i s type is record typ d l a KTD ( k o n k r e t n e g o typu danych ) d e k l a r a c j a KTD −− −− struktura danych , d e f i n i c j a KTD ... end r e c o r d function procedure blad : ; ... −− metody KTD ... exception ; −− wyjatki , stale , −− end typy zmienne , pomocnicze itp . KTD ; Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Przykªad KTD Implementacja metod konkretnego typu danych Implementacja metod KTD realizowana jest w ciele pakieu: package body function is KTD ... is −− implementacja ... begin ... end return ... −− instrukcje −− deklaracje ...; ; procedure ... is ... begin end end metod deklaracje −− ... −− instrukcje ...; KTD ; Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Przykªad KTD Przykªad konkretnego typu danych Typy danych dobieramy do wykonywanego zadania. Mo»e to by¢ na przykªad typ opisuj¡cy osob¦ (Typ_Osoba), z takimi metodami jak data urodzenia, imi¦, nazwisko, pªe¢ itp. Typ osoby jest realizowany jako typ konkretny w pakiecie KTD_Osoba w pliku KTD_Osoba.ads. Zauwa»my, »e znana jest budowa warto±ci typu typ_osoba (s¡ to rekordy z czterema polami). Pakiet KTD_Osoba zawiera te» pewne (konkretne) typy pomocnicze (typ_plec, typ_data) oraz uzywa pewnych typów standardowych (string) i typów z biblioteki standardowej (unbounded_string). Operacjami typu typ_osoba s¡ data_urodzenia, plec, imie, nazwisko, liczba_dzieci, dodaj_dzieci, zmien_nazwisko oraz twórz_osobe (plus pewne atrybuty). Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Przykªad KTD Wykorzystanie konkretnego typu danych Aby wykorzysta¢ typ danych zdeniowany w pakiecie, nale»y do programu aplikacyjnego (który b¦dziemy nazywali programem klienta, doª¡czy¢ ten pakiet. Robimy to za pomoc¡ klauzuli with, np. with KTD_Osoba. U»ywamy metod pakietu, takich jak tworz_osobe, za pomoc¡ notacji kropkowej: KTD_Osoba.tworz_osobe("92112403046", "Ewa", "Kowalska"); Je±li doª¡czymy do naszego programu po klauzuli with równie» klauzul¦ use, to b¦dziemy mogli u»y¢ operacji tworz_osobe bezpo±rednio: tworz_osobe("92112403046", Stanisªaw Goldstein "Ewa", "Kowalska"); Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Przykªad KTD Sªabo±ci konkretnych typów danych Konkretne typy danych s¡ ªatwiejsze do napisania (zaprogramowania) i zrozumienia ni» abstrakcyjne typy danych. Maj¡ te» wyra¹ne sªabo±ci. Najwa»niejsz¡ jest peªna dost¦pno±¢ klienta do struktury danych typu. Innymi sªowy, ka»dy, kto doª¡czy do swego programu pakiet KTD_Osoba, mo»e bez trudu popsu¢ osob¦, na przykªad, (przy zaªo»eniu, »e osoba jest typu typ_osoba) za pomoc¡ instrukcji: osoba. pesel := "00000"; Zauwa»my, »e tego niebezpiecze«stwa nie ma, gdy klient u»ywa tylko funkcji tworz_osobe, bo wtedy w kodzie tej procedury mozna sprawdzic, czy pesel jest dobrze sformatowany, i w razie czego wywoªa¢ wyj¡tek zly_pesel. Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Abstrakcja danych to typ danych scharakteryzowany caªkowicie przez swoje (publiczne) operacje (czyli poprzez swój interfejs). Natura elementów zbioru jest przy tym niewa»na. Abstrakcyjny typ danych ATD to jedna lub wi¦cej powi¡zanych ze sob¡ abstrakcji danych. Jedna z tych abstrakcji jest gªówn¡ abstrakcj¡ danych, i od niej bierze swoj¡ nazwe abstrakcyjny typ danych. Inne abstrakcje danych maj¡ charakter pomocniczy i sªu»¡ do rozszerzenia funkcjonalno±ci ATD. Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje c.d. Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Na ogóª b¦dziemy u»ywali terminu abstrakcyjny typ danych jako synonimu abstrakcji danych. Tylko w bardziej skomplikowanych przypadkach b¦d¡ nam potrzebne typy, na które skªada¢ si¦ b¦dzie wi¦cej ni» jedna abstrakcja danych. Tak wi¦c, na ogóª przyjmujemy denicj¦ uproszczon¡: Abstrakcyjny typ danych ATD to typ danych scharakteryzowany caªkowicie przez swoje (publiczne) operacje (czyli poprzez swój interfejs). Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje c.d. Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Powy»sze denicje opisywaªy koncepcj¦ abstrakcyjnego typu danych. Na poziomie matematycznym mo»na poda¢ ±cisª¡ denicj¦ ATD w terminach logiki matematycznej (zob. np. Introduction to mathematical logic, Michaª Walicki, Example 7.14 i 7.15). W terminach maszyny interesuj¡ nas konkretne realizacje ATD. Na poziomie programistycznym ATD s¡ realizowane przez konkretne konstrukcje u»ywanego j¦zyka programowania (np. class albo namespace w C++, module w Moduli 3 itp.). Publiczny interfejs typu podany jest w publicznej cz¦±ci specykacji pakietu. Struktura danych typu podana jest (wraz z prywatnym interfejsem typu) w cz¦±ci prywatnej pakietu. Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Realizacja abstrakcyjnego typu danych Abstrakcyjny typ danych realizowany jest w publicznej i prywatnej cz¦±ci specykacji pakietu : −− w y g l a d p a k i e t u d l a ATD ( a b s t r a k c y j n e g o t y p u d a n y c h ) package ATD i s −− i n t e r f e j s type typ i s p r i v a t e ; −− d e k l a r a c j a ATD function . . . −− metody ATD procedure . . . blad : exception ; −− w y j a t k i , s t a l e , z m i e n n e , −− t y p y p o m o c n i c z e i t p . private −− s t r u k t u r a d a n y c h type typ i s record ... end end r e c o r d ; ATD ; Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Realizacja konkretnego typu danych Abstrakcyjne typy danych Implementacja metod abstrakcyjnego typu danych Implementacja metod ATD wygl¡da tak samo jak inplementacja metod konkretnego typu danych, i umieszczona jest w ciele pakietu: package body function ATD ... is is −− implementacja ... begin ... return end . . . ; procedure −− instrukcje −− deklaracje ...; ... is ... begin end end metod deklaracje −− ... −− instrukcje ...; ATD ; Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Realizacja ATD programowanie obiektowe Cz¦sto ATD taki jak Osoba jest tylko pocz¡tkiem hierarchii typów, takich jak Ucze«, Student i Nauczyciel. Z kolei Ucze« mo»e by¢ rodzicem takich typów jak Ucze«_Podstawówki, Ucze«_Gimnazjum i Ucze«_Liceum. Mówimy wtedy, »e typy Ucze«, Student i Nauczyciel pochodz¡ bezpo±rednio od typu Osoba, za± typy Ucze«_Podstawówki, Ucze«_Gimnazjum i Ucze«_Liceum po±rednio od typu Osoba. Typ Osoba nazywamy wówczas równie» przodkiem pozostaªych wymienionych typów, a jego dzieci, wnuki itd., jego potomkami. Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Realizacja ATD programowanie obiektowe Dzieci typu dziedzicz¡ po nim struktur¦ danych, ale mo»na t¦ struktur¦ jeszcze wzbogaci¢ przez dodanie do niej nowych pól. Dzieci typu dziedzicz¡ te» po nim podstawowe operacje (metody). Mo»na te operacje zostawi¢ bez zmian, ale mo»na te» je zast¡pi¢ (override). W razie potrzeby mo»na dla dziecka zdeniowa¢ nowe metody. Programistycznie wprowadza si¦ ATD (lub KTD) rozpoczynaj¡cy hierarchi¦ typów za pomoc¡ sªowa kluczowego tagged przed sªowem private lub record. Je±li typ jest w hierarchii obiektowej, to mo»na u»ywa¢ notacji kropkowej nie tylko dla pól, ale te» dla metod tego typu. W ciele pakietu mo»emy pisa¢ osoba. pesel , natomiast w programie aplikacyjnym (klienta) osoba.data_urodzenia (zamiast data_urodzenia(osoba). Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Realizacja ATD programowanie obiektowe Tak wygl¡da pakiet wprowadzaj¡cy taki typ: −− w y g l a d p a k i e t u d l a ATD ( a b s t r a k c y j n e g o t y p u d a n y c h ) package ATD_Obj i s −− i n t e r f e j s type typ i s tagged p r i v a t e ; −− d e k l a r a c j a ATD , −− p o c z a t e k h i e r a r c h i i function . . . −− metody ATD procedure . . . blad : exception ; −− w y j a t k i , s t a l e , z m i e n n e , −− t y p y p o m o c n i c z e i t p . private −− s t r u k t u r a d a n y c h type typ i s tagged record ... end end r e c o r d ; ATD_Obj ; Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Przykªad ATD Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD W pliku ATD_Osoba.ads znajduje si¦ realizacja (interfejs i struktura danych) dla typu Typ_Osoba. W pliku ATD_OO_Osoba.ads znajduje si¦ realizacja (interfejs i struktura danych) dla typu obiektowego Typ_Osoba, stoj¡cego na czele hierarchii osób. W pliku ATD_OO_Osoba-Stud.ads znajduje si¦ realizacja typu pochodnego Typ_Student, pochodz¡cego do typu Typ_Osoba. Typ pochodny mógª by¢ zrealizowany w tym samym pakiecie ATD_Osoba, ale wygodniej, je±li go zdeniujemy w pakiecie dziecku ATD_Osoba.Stud. W ten sposób hierarchia pakietów pokazuje od razu hierarchi¦ typów. Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2 Realizacja konkretnego typu danych Abstrakcyjne typy danych Przykªady ATD Denicje Realizacja ATD ATD w programowaniu obiektowym Przykªady ATD Typ pochodny wprowadza si¦ u»ywaj¡c sªowa zastrze»onego new i nazwy typu rodzica (lub potomka), po którym nast¦uje sªowo zastrze»one with, np. type Typ_Student is new Typ_osoba with private; w cz¦±ci publicznej, oraz type Typ_Student srednia : end r e c o r d i s new Typ_osoba with record float ; ; w cz¦±ci prywatnej. Typ_Student ma pola pesel, imie, nazwisko, liczba_dzieci i srednia oraz metody data_urodzenia, plec, imie, nazwisko, liczba_dzieci, dodaj_dzieci, zmien_nazwisko, zmien_srednia, tworz oraz srednia. Stanisªaw Goldstein Programowanie i struktury danych Wykªad 2