Programowanie i struktury danych Wykład 2

advertisement
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
Download