Adatszerkezetek -- Típusok Pap Gáborné -- Szlávi Péter ELTE Informatika Szakmódszertani Csoport papne@ludens.elte.hu, szlavi@ludens.elte.hu http://izzo.inf.elte.hu/
Adatszerkezetek -- Típusok Tartalom 0. Bevezetés 1. Mi a típus 2. A típus algebrai specifikációjáról 3. A modul 4. Záró gondolatok 5. Irodalom 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 0. Bevezetés Amiről szó lesz: hogyan tanítjuk… ELTE, informatika tanári szak, Programozásmódszertan tárgy, 2. félév Központi fogalom: a típus Előzmények: szerény absztrakciós készség 1. félév: algoritmikus absztrakció elemei Célok: absztrakciós készségnövelés moduláris programozás objektum-elvű programozás Ad Központi fogalom: A típus egy nélkülözhetetlen eszköze a programépítésnek. Csak jó eszközzel lehet jó terméket gyártani. Tehát fontos jól, megbízhatóan elkészíteni eszt az eszközt. Ad 1. félév: Egy „absztrakt” algoritmikus nyelv és egy „konkrét” programozási nyelv (Pascal). Strukturált programozás elve(i) és módszertana (programépítés lépései). Programozási tételek, programtranszformációk fogalma, és építkezés általuk. (Elő-utófeltételes) feladat és programspecifikáció fogalma, és kapcsolatuk a programépítés egyes lépéseivel. 2019.04.16. Adatszerkezetek -- Típusok
Megengedett értékek halmaza 1. Mi a típus A típus egy „adatuniverzum”, amelyet meghatároz: az értékhalmaza + az asszociált műveletei (+ megvalósítása) Megengedett értékek halmaza operáció Ad adatuniverzum – hasonlatok: Egy „üres keret”, amely „betölthető” odaillő adategyedekkel; vagy egy szabályrendszer, amely leírja a hozzáilleszkedő adatokat. 2019.04.16. Adatszerkezetek -- Típusok
Megengedett értékek halmaza 1. Mi a típus Amit a típusról tudni kell: operátor-szignatúra – „szintaktika” operátor-működés – szemantika Megengedett értékek halmaza operáció operáció operáció 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 1. Mi a típus Szintaxis-definiálás: absztrakt – függvényként konkrét – „használati felület” (export modul) Op:DR Pl.: Push:VxEV Nyelvfüggő. Pl.: (Pascal-szerűen) Procedure Push(Var v:TVerem; e:TElem) 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 1. Mi a típus Szemantika-definiálás: kapcsolat – algebrai specifikáció egyedi leképezés – (implicit) algoritmikus specifi-káció (export modul) megvalósítás – explicit algoritmikus specifikáció (reprezentációs-implementációs modul) Megjegyzések: 1. Mindegyik ugyanarról „szól”, de más absztrak-ciós szinten. 2. Célszerűen egymásra épülően definiálni a típus „biztonságos” definiálása érdekében. Hasznos analógia: feladat/program-specifikáció típus-specifikáció algoritmikus program típusmegvalósítás = modul. 2019.04.16. Adatszerkezetek -- Típusok
2. A típus algebrai specifikációjáról Szintaktikai minta: Szintaktikai „minta” Magyarázat Axiómák: objektum: Típus(paraméterek) = értelmező megjegyzés … 1o az axióma megnevezése (esetleg informális szövege) a formalizált axióma 2o …… Az operációk kapcso-latát leíró axiómák, és a bennük fölhasznált ob-jektumok „deklarációi”. Esetleg kibővítve fontos bizonyítható, bizonyí-tandó következmény-állításokkal. Típus TípusKonstrukció(paraméterek): Asszociált műveletek: Operáció(értelm.tart.):Ért.készl. A definiálandó típus-konstrukció fejsora. Operációinak szigna-túrája (értelmezési tar-tománya, értékkészlete) Ad Típuskostrukció: Paraméterezetten típusok „családja” A „családtagok” hasonlatossága, közös jellegzetességei egyszer tisztázandók. Ad Asszociált műveletek: A típus korábban emlegetett értékhalmazát a 0-változós konstans operációk alkotják, valamint a belőlük a konstrukciós műveletekkel transzformálható további elemek alkotják. Tehát az értékhalmaz konstruktív, az előbbi értelemben. Ad Axiómák: * Állítások (és bizonyításuk) is idekerülnek. 2019.04.16. Adatszerkezetek -- Típusok
2. A típus algebrai specifikációjáról Példa: Típus TNap: Asszociált műveletek: Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat,Vasárnap, Min,Max:TNap Számosság:Egész Létrehoz:TNap Következő(TNap):TNap {NemDef} Előző(TNap):TNap {NemDef} Sorszám(TNap):Egész TNap(Egész):TNap {NemDef} <(TNap,TNap):Logikai =(TNap,TNap):Logikai Típus TNap: Asszociált műveletek: Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat,Vasárnap, Min,Max:TNap Számosság:Egész Létrehoz:TNap Következő(TNap):TNap {NemDef} Előző(TNap):TNap {NemDef} Sorszám(TNap):Egész TNap(Egész):TNap {NemDef} <(TNap,TNap):Logikai =(TNap,TNap):Logikai Általában a típusokhoz rendelt operációk: Min, Max, < – minden rendezett típushoz hozzásrendeljük Számosság – minden véges típushoz hozzásrendeljük ‘=‘ – minden típushoz hozzárendeljük Sorszám, Típus – általános konverziós függvények Ad Konstans operóciók: Ritka pillanat, amikor a típus értékhalmazát explicite adjuk meg, elemeinek felsorolásával. Axiómák: a:TNap n:Egész Axiómák: a:TNap n:Egész 2019.04.16. Adatszerkezetek -- Típusok
2. A típus algebrai specifikációjáról Példa: (folytatás) 0o Konstans-axióma Számosság=7 Min=Hétfő Max=Vasárnap 1o Létrehozás-axióma a=Létrehoz a=Hétfő 2o Előző-Következő axióma Előző(a) Következő(Előző(a))=a Következő(a) Előző(Következő(a))=a 3o Előző-Következő hiba-axióma Előző(Hétfő)=NemDef Következő(Vasárnap)=NemDef 4o Sorszám-axióma Sorszám(Hétfő)=0 Sorszám(Vasárnap)=6 5o Sorszám-TNap axióma n[0..Számosság) Sorszám(TNap(n))=n TNap(Sorszám(a))=a 0o Konstans axióma Számosság=7 Min=Hétfő Max=Vasárnap 1o Létrehozás axióma a=Létrehoz a=Hétfő 2o Előző-Következő axióma Előző(a) Következő(Előző(a))=a Következő(a) Előző(Következő(a))=a 3o Előző-Következő hiba-axióma Előző(Hétfő)=NemDef Következő(Vasárnap)=NemDef 4o Sorszám axióma Sorszám(Hétfő)=0 Sorszám(Vasárnap)=6 5o Sorszám-TNap axióma n[0..Számosság) Sorszám(TNap(n))=n TNap(Sorszám(a))=a Ad példa: a műveletek szignatúrájának információtartalma. (Pl. a Létrehoz értelmezési tartomány nélküli függvény, amely a „semmiből” kreálja meg az adott típusú adatot.) a NemDef egy típusfüggetlen konstans (tiltott művelet végrehajtásához). (implicit error-axióma). 2019.04.16. Adatszerkezetek -- Típusok
2. A típus algebrai specifikációjáról Példa: (folytatás) 6o TNap hiba-axióma n[0..Számosság) TNap(n)=NemDef 7o Következő-axióma Következő(Hétfő)=Kedd Következő(Kedd)=Szerda … 8o Rendezési axióma a<b Sorszám(a)<Sorszám(b) … 9o Azonosság-axióma a=b Sorszám(a)=Sorszám(b) … 10o Következő-Sorszám axióma Következő(a) Sorszám(Következő(a))=Sorszám(a)+1 1. Állítás: Sorszám(Kedd)=1 … Bizonyítás: … 2. Állítás: (Min<a Min=a) (a<Max a=Max) Bizonyítás: … 6o TNap hiba-axióma n[0..Számosság) TNap(n)=NemDef 7o Következő-rendezési axióma Következő(Hétfő)=Kedd Következő(Kedd)=Szerda … 8o Rendezési axióma a<b Sorszám(a)<Sorszám(b) … 9o Azonosság-axióma a=b Sorszám(a)=Sorszám(b) … 10o Következő-Sorszám axióma Következő(a) Sorszám(Következő(a))=Sorszám(a)+1 1. Állítás: Sorszám(Kedd)=1 … Bizonyítás: … 2. Állítás: (Min<a Min=a) (a<Max a=Max) Ad példa: a NemDef egy típusfüggetlen konstans (tiltott művelet végrehajtásához). (implicit error-axióma). a 8o axiómában visszavezetjük a <TNap rendezést a <Egész rendezésre. A 9o-ben pedig a =TNap rendezést a =Egész azonosságra. Másik példa 2019.04.16. Adatszerkezetek -- Típusok
2. A típus algebrai specifikációjáról Megjegyzés: Az algebrai leírás „legfőbb” pedagógiai haszna, hogy jól elemezhetővé válik általa a típus: műveleteinek elégségessége, teljessége, ellent-mondásmentessége, s esetleges minimalitása. 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 3. A modul Túl a (típus-) specifikáción: útban a megvalósítás felé: „Felületes” tudnivalók – export modul Részletezés – reprezentációs-implementációs modul A modulok tulajdonságai Szintaktikai mintaadás (hogyan használható?) Szemantikamegadás (mit csinál?) Szemantikamegvalósítások (hogyan működik?) 2019.04.16. Adatszerkezetek -- Típusok
3. A modul Export modul – szintaktika: exportálandó fogalmak „értelmesen” csoportosított felsorolása Export modul – szintaktika: ExportModul TípusNév(InputParaméterek): Típus Tip1,Tip2,... Konstans Kons1,Kons2,... Függvény Fv1(FormParam): FvTip1 Ef: … előfeltétel … Uf: … utófeltétel … … Eljárás Elj1(FormParam) Ef: … előfeltétel … Uf: … utófeltétel … … Modul vége. az operációk „fejsorai” és működésük leírása Az InputParaméterek lehetnek típust jellemző konstansok, de –típuskonstrukció esetén– típusok is. (Szokás e paramétereket ’generic parameter’-nek nevezni.) A modulfej egyben a felhasználás „mintájául” is szolgál. 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 3. A modul Megjegyzések: InputParaméterek: típust jellemző konstansok, vagy típusok. (’generic parameter’) A „fő típuson” kívüli egyéb típusok exportálására ritkán van szükség. Ez esetben is csak azonosítókat kell felsorolni, a definíciók nem része az export modulnak! A modulfej a felhasználás „mintájául” is szolgál. Pl.: ExportModul Verem(Típus TElem) … Változó zsák:Verem(Szöveg) 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 3. A modul Fontos alapelvek: Az elő-utófeltételekben ne hivatkozzunk más operációkra (elkerülendő a -rekurzió)! Ne kössük meg kezünket se a reprezentáció, se az implementáció tekintetében! Szükséges (bár sokszor szokatlan) bővítések: Egyenlőség-vizsgálat Értékadás I/O Hibaflag-kezelés Létrehozás Lerombolás 2019.04.16. Adatszerkezetek -- Típusok
Példa a felhasználás szintaxisára: 3. A modul Példa: ExportModul TNap: [kiindulási alap az algebrai leírás] Konstans Hétfő,Kedd,Szerda,Csütörtök,Péntek,Szombat, Vasárnap:TNap Operátor Min:TNap Másnéven Min’TNap Ef: – Uf: Min=Hétfő Operátor Max:TNap Másnéven Max’TNap Ef: – Uf: Max=Vasárnap Az ún. típusattribútum függvények speciális szintaxisú operátorok. Erre utal a ‘Másnéven’ kulcs-szó, ahol kiderül a használat szintaxisa is. Példa a felhasználás szintaxisára: Ciklus n:=Min’TNap-tól Max’TNap-ig 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 3. A modul Példa: (folytatás) Operátor Számosság:Egész Másnéven Számosság’TNap Ef: – Uf: Számosság=7 Függvény Következő(Változó x:TNap):TNap Ef: xVasárnap Uf: Következő(Hétfő)=Kedd … Függvény Előző(Változó x:TNap):TNap … Függvény Sorszám(Konstans x:TNap):Egész … Függvény TNap(Konstans x:Egész):TNap … Ad Kiemelt ‘Változó’ kulcs-szó: A TNap típus megváltozhat az által is, ha csak hibásan hajtható végre a művelet: változik a hibaflag értéke. 2019.04.16. Adatszerkezetek -- Típusok
Kivételes elvtelenség! 3. A modul Példa: (folytatás) Operátor Be(Változó x:TNap) Másnéven Be:x Ef: Input{’hétfő’,’kedd’,’szerda’…} Uf: Input=’hétfő’ x=Hétfő Operátor Ki(Konstans x:TNap) Másnéven Ki:x Ef: – Uf: x=Hétfő Output=’hétfő’ Infix Operátor Kisebb(Konstans x,y:TNap):Logikai Másnéven x<y Ef: – Uf: Sorszám(x)<Sorszám(y) Ad Be/Ki operátorok: Két probléma: Kűlvilággal való kapcsolattartás leírása. Megoldás: Input/Output kulcs-szóval jelölt puffer (Szöveg-típusú objektum). Szöveg–TNap típuskonverzió. Kivételes elvtelenség! 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 3. A modul Példa: (folytatás) Infix Operátor Azonos(Konstans x,y:TNap):Logikai Másnéven x=y Ef: – Uf: Sorszám(x)=Sorszám(y) Függvény Hibás?(Változó x:TNap):Logikai [teszteli, hogy volt-e hibásan elvégzett művelet (pl. amelynek az előfeltétele nem teljesült) az adott TNap típusú adatra; majd inicializálódik a hibaflag] Modul vége. Ad Másik példa: A példából körvonalazódik egy nyelv, a „sorozatnyelv”, amely jól alkalmazható a „saját hatáskörben” történő leíráshoz. Másik példa 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 3. A modul (Reprezentációs-implementációs) Modul – szintaktika: Modul TípusNév(InputParaméterek): Reprezentáció … [a típusábrázoláshoz szükséges adatleíró „kellékek”] Implementáció … [itt szerepelnek az export-modulban „megjósolt” tevékenységek operációinak implementálása …] Inicializálás … [egy ilyen típusú adat létrehozása az itt leírt utasításokkal történik] Modul vége. Megjegyzés: elő-utófeltétel párok „értelmesen” igazítva a repre-zentációhoz 2019.04.16. Adatszerkezetek -- Típusok
3. A modul Példa: Modul TNap: [kiindulási alap az export modul] Reprezentáció Változó felsKód:Egész hiba:Logikai Konstans Hétfő:(0,Hamis) Kedd:(1,Hamis) … Vasárnap:(6,Hamis) L. Axiomatikus leírás 4o axiómáját! L. Axiomatikus leírás 1. állítását. L. Axiomatikus leírás 4o axiómáját! 2019.04.16. Adatszerkezetek -- Típusok
Az elő-utófeltétel változatlan: kihagyható. 3. A modul Példa: (folytatás) Az elő-utófeltétel változatlan: kihagyható. Implementáció Operátor Min:TNap Másnéven Min’TNap Min.felsKód:=Hétfő.felskód Operátor vége. … Függvény Következő(Változó x:TNap):TNap Ef: felsKódVasárnap.felskód Uf: felsKód=Hétfő.felskód Következő(x).felsKód=Kedd.felskód … Ha felsKód=Vasárnap.felskód akkor hiba:=Igaz különben Következő.felsKód:=felsKód+1 Függvény vége. L. Axiómatikus leírás 10o axiómát. 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 3. A modul Példa: (folytatás) … Függvény Hibás?(Változó x:TNap):Logikai Hibás?:=hiba; hiba:=Hamis Függvény vége. Inicializálás hiba:=Hamis; felsKód:=Hétfő.felskód Modul vége. 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 3. A modul A tervezés után a kódolás következik. Ezt a lépést a programozási nyelvek a különféle módon támogatják. Lingua franca: Turbo Pascal nyelv. Probléma: a modul számára kínálkozó unit fogalom paraméterezhetetlen volta. Kikerülhető ez a hiányosság az include lehetőség felhasználásával, vagy az objektum-osztály fogalmának bevezetésével. 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 4. Záró gondolatok Ezen elvi alapokon nyugszanak az alábbi adatszer-kezetek oktatása (is): Lista Tömb Verem Sor Táblázat File-ok Rekurzió Gráfok Ad Rekurzió: Hasznos előzetes tapasztalat szerezhető ez által a funkcionális nyelvekhez. A 3., ill. 4. félévben… 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 4. Záró gondolatok A programozás folyamatának szemlélete szerint Szoros kapcsolatok vannak az egyes lépések között. Így növelhető a program biztonsága. Sokszor formálisan is bizonyítható a továbblépés jósága. De ha nem, akkor is igényt épít ki a precízségre. Jótékony mellékhatás: az absztrakciós képesség növekedése. 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 5. Irodalom [SzZs1] Szlávi Péter, Zsakó László: Programozási bevezető. ELTE TTK Informatikai Tanszékcsoport, 1995 [Sz1] Szlávi Péter : Programozási tételek szerepe a gyakorlati programozásban. <http://izzo. inf.elte.hu/szlavi/ProgModsz/SpAlKo.pdf>, 1996 [SzZs2] Szlávi Péter, Zsakó László: Programozási tételek. ELTE TTK Informatikai Tanszékcsoport, 1996 [Sz2] Szlávi Péter: Programtranszformációk. <http://izzo.inf.elte.hu/szlavi/ProgModsz/Progtran.pdf>, 2001 [HSzZs] Harangozó É.-Szlávi P.-Zsakó L.: Joining Programming Theorems, a Practical Approach to Program Building. Annales Universitatis Scientiarum Budapestinensis. Sectio Computatorica 17, 155-172 , 1998 [KV] Kozma László, Varga László: Adattípusok osztálya. ELTE TTK Informatikai Tanszékcsoport, 2001 2019.04.16. Adatszerkezetek -- Típusok
Adatszerkezetek -- Típusok 5. Irodalom [Sz3] Szlávi Péter: Programok, programspecifikációk. <http://izzo.inf.elte.hu/szlavi/ProgModsz/progspec.doc> Informatika a Felsőoktatásban '99, Debrecen, 1999. augusztus 27-29. [MM] A. McMonnies, S. McSporran: Developing Object-Oriented Data Structures Using C++. McGraw-Hill, 1995 [SW] D. Stubs, N. Webre: Data Structures with Abstract Data Types and Pascal. Brooks/Cole Publishing Co., 1985 [W] Wayne Amsbury: Data Structures. Wadsworth Publishing Co., 1985 [PSzZs] Pap Gáborné, Szlávi Péter, Zsakó László: Adattípusok. ELTE TTK Informatikai Tanszékcsoport, 1998 [SzZs3] Szlávi Péter, Zsakó László: Gráfok, gráfalgoritmusok. ELTE TTK Informatikai Tanszékcsoport, 2000 [SzZs4] Szlávi Péter, Zsakó László: Adatfeldolgozás. ELTE TTK Informatikai Tanszékcsoport, 1996 2019.04.16. Adatszerkezetek -- Típusok