Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaGabi Pásztor Megváltozta több, mint 6 éve
1
Láncolt adatszerkezetek megvalósítása a programozásoktatásban
InfoSavaria 2010 2010. április Láncolt adatszerkezetek megvalósítása a programozásoktatásban „Lánc, lánc, eszterlánc” Mottó: Lánc, lánc, eszterlánc, Eszterlánci cérna Kisleányok bús körében Kergetőzöm én ma. Nincs semmi aranyom, Jobbra-balra löknek, Körbe-körbe, egyre körbe, Láncán kis kezöknek. Merre menjek, szóljatok? Hátra vagy előre. Az erdőbe megbotoltam Egy nagy, csunya köbe. … Kosztolányi Dezső: Lánc, lánc, eszterlánc... A mottóválasztásához: szójáték: szó/fogalom-kapcsolódás szójáték: gyermekekhez / oktatáshoz kapcsolódás Az előadás „tálalásához”: Változatok „három hangra”. 3 változat a lánc(olás)ról, egy téma 3 nézőpont, 3 hang = 3 előadó. Szlávi az előhang, Papné a „klasszikus” hang, Horváth a „tárgyilagos” (tárgyközéppontos=OO) hang. Horváth Győző – Pap Gáborné – Szlávi Péter – Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
2
A várható megpróbáltatások
InfoSavaria 2010 2010. április A várható megpróbáltatások Előhang – fogalmak, célok, eszközök, a módszer Út az „elmélettől” a „gyakorlat” felé Megvalósítás „klasszikus” nyelvi környezetben Megvalósítás tárgyközéppontú nyelvi környezetben Utóhang – visszatekintés, következte- tések 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
3
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer Láncolás a programozási folyamatban Programozás: adat-/tevékenység-döntések Specifikációból+finomításokból erednek Adatok nagyrészt sokaságok Hatékonysági kérdések : Hogy lehetne csak annyi helyet használni, amennyire az adott futásnál éppen szükség van? Hogyan lehetne a helyfoglalást dinamikussá tenni? Hogy lehetne az adatszerkezetek össz elemigényét összehangolni, s így minimalizálni? Dinamizmus nyelvi lehetőségei Dinamikus tömb helyett inkább: láncolás ; cím és tartalom elválasztása 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
4
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer Dinamikus tömb és nyelvi lehetőségek: Var ra:Array of Real; N,i:Integer; … //N értéket kap SetLength(ra,N); For i:=0 to N-1 do Begin ra[i]:=…; … End; … FreePascal. int N; … //N értéket kap double dv[N]; for (int i=0; i<N; ++i) { dv[i]=…; … } … vector <double> dv;//dv üres dv.push_back(1.2);//dv 1-elemű … //további elem hozzátétele for (int i=0; i<dv.size(); ++i) { dv[i]…; … } … C++ – „klasszikusan”. C++ – tárgyközéppontúan (objektum-orientáltan). 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
5
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer Láncolás a programozásoktatásban Programozásoktatás Adatokkal kapcsolatos fogalmak megértése hozzáférési jog, típus… „Nevezetes homályok”: Mikor, hogyan jönnek létre a deklarált adatok, meddig léteznek? Mi az adat memóriacíme és mi a tartalma? Mi a típus és az adott típusú adat viszonya? Mi történik egy tömb indexelésekor, és mi egy rekord (struktúra) mezőjére hivatkozáskor? Hogy történik a paraméterek átadása egy eljárás/függvény hívásakor? 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
6
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer Homályoszlatás: a láncolás fogalmával; cím, tartalom szétválasztása Láncolás=cím 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
7
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A mutató típus és a láncolás A láncolást az alábbi memóriamodellre vezetjük vissza. ExportModul Memória: Típus TMemóriaCím [most még elegendő a fogalom létéről tudni, definiálás nélkül] Konstans Sehova:TMemóriaCím [most még elegendő a típusát tudni, érték nélkül] Eljárás Lefoglal(Változó mut:TMemóriaCím, Konstans db:Egész) [a memóriában db bájtnyi egybefüggő helyet foglal le, a kezdőcímet mut-ba adja vissza, ha nem sikerült, akkor Sehova-t] Eljárás Felszabadít(Változó mut:TMemóriaCím, Konstans db:Egész) [a mut-nál kezdődő db bájtnyi egybefüggő memóriát szabadít fel, mut-ba Sehova-t tesz] Eljárás Értékmásolás(Konstans db:Egész, mut1,mut2:TMemóriaCím) [a mut1 címre másol db bájtnyit a mut2 címtől kezdődően] Eljárás MemDump [Nyomkövetést támogató szolgáltatás: a memória tartalmát megjeleníti] Modul vége. A memóriamodell exportmodulja. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
8
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer Ezzel már le tudjuk írni a vektor vagy a mátrix, sőt a mutató típust is. A modellt meg kell valósítani. Ezt kétféleképpen is megtehetjük: „valódi címekkel” a memóriában, azaz a láncolás egy memóriacím által jön létre (ekkor építünk a programozási nyelvi környezet memóriamenedzselő támogatására); indexekkel, amelyek egy kellő méretű (statikusan létrehozott) tömbbe mutatnak. Ez egyszerűsödik a „naivitása” (=egy típusúsága) miatt. L. az export modult, és a megvalósítást. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
9
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A mátrix (megvalósító moduljának egy részlete): az „alap” memória-modellre építünk: nincs paraméter! Modul Tömb(Típus TIndex1, TIndex2, TElem): Másként Tömb(TIndex1,TIndex2:TElem) [ez a deklarációs minta] Reprezentáció Import: Memória Változó kcím:TMemóriaCím Implementáció Eljárás Létrehoz(Változó m:Tömb): Lefoglal(kcím, Számosság’TIndex1*Számosság’TIndex2*Méret’TElem) [most nem vizsgáljuk, hogy a helyfoglalás sikeres volt-e, idekívánkozik a TElem-hez tartozó kezdőértékkel feltöltés] Eljárás vége. Operátor ElemÉrték(Konstans m:Tömb, i1:TIndex1, i2:TIndex2):TElem Másként m(i1,i2) [ez az értékhivatkozási minta] Értékmásolás(Méret’TElem, ElemÉrték, ElemCím(m,i1,i2)) Operátor vége. … [„lokális” függvények:] Függvény ElemCím(Konstans m:Tömb, i1:TIndex1, i2:TIndex2):TMemóriaCím ElemCím:=kcím+RelatívCím(i1,i2) Függvény vége. Függvény RelatívCím(Konstans i1:TIndex1, i2:TIndex2):Egész RelatívCím:=(Sorszám(i1)*Méret’TIndex1+Sorszám(i2))*Méret’TElem Függvény vége. Modul vége. a mutató által kijelölt TElem-ű mátrix kezdőcíme !!! Cikkben 4. ábra: ElemCím fv értéktípusa: T… ElemÉrték az operátor kimenőérték- változójának a címe 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
10
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A mutató (típust megvalósító moduljának egy részlete): az „alap” memória-modellre építünk: nincs paraméter! Modul Mutató(Típus TElem): Másként TElem’Mutató [ez a deklarációs minta] Reprezentáció Import: Memória Változó kcím:TMemóriaCím Implementáció Eljárás Létrehoz(Változó m:Mutató): Lefoglal(kcím, Méret’TElem) Eljárás vége. Operátor ElemÉrték(Konstans m:Mutató):TElem Másként TElem(m) [ez az értékhivatkozási minta] Értékmásolás(Méret’TElem, ElemÉrték, m) Operátor vége. Operátor ElemÉrtékadás(Konstans m:Mutató, e:TElem): Másként TElem(m):=e [ez az értékadási minta] Értékmásolás(Méret’TElem, m, e) Operátor vége. Inicializálás kcím:=Sehova Modul vége. a mutató által kijelölt TElem kezdőcíme ElemÉrték az operátor kimenőérték- változójának a címe 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
11
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A memóriamodell 1. („valódi” címes) változata: . bájt Méret’TElem Cím(a) Változó a:TElem memória 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
12
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A memóriamodell 2. (tömbös) változata: . Méret’TElem Cím(a)=Index(a) … belső láncolás Változó a:TElem tömb(…:TElem) 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
13
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A memóriamodell 2. (tömbös) változat exportmodulja: most még elegendő a fogalom létéről tudni, definiálás nélkül ExportModul Memória(Típus TElem): Típus TMemóriaCím Konstans Sehova:TMemóriaCím Eljárás Lefoglal(Változó mut:TMemóriaCím) [a memóriában TElem-nyi egybefüggő helyet foglal le, a kezdőcímet mut-ba adja vissza, ha nem sikerült, akkor Sehova-t] Eljárás Felszabadít(Változó mut:TMemóriaCím) [a mut-nál kezdődő TElem-nyi egybefüggő memóriát szabadít fel, mut-ba Sehova-t tesz] Eljárás Értékmásolás(Konstans mut1,mut2:TMemóriaCím) [a mut1 címre másol TElem-nyit a mut2 címtől kezdődően] Eljárás MemDump [Nyomkövetést támogató szolgáltatás:a memória tartalmát megjeleníti] Modul vége. most még elegendő a típusát tudni, érték nélkül 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
14
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A memóriamodell 2. (tömbös) változat moduljának egy részlete: a memória méretét rögzítő „belső” paraméter Modul Memória(Típus TElem): [Ef: Méret’TElemMéret’TMemóriaCím] Reprezentáció Konstans MaxMem:Egész(???) Típus TMemóriaCím=0..MaxMem [Ì Egész] Konstans Sehova:TMemóriaCím(0) Változó Mem=Tömb(TMemóriaCím:TElem) [a memória maga; 0. elemet nem használjuk] Implementáció … 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
15
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A memóriamodell 2. (tömbös) változat moduljának egy részlete: a belső láncoláson túli rész típusa; csak a hossz számít a memória belső ábrázolása, Mem-mel azonos címen Implementáció Típus TMaradék=Tömb(1..Méret’TElem-Méret’TMemóriaCím:Byte) TlElem=Rekord(érték:TMaradék, köv:TMemóriaCím) Változó bMem:Tömb(TMemóriaCím:TlElem)=Mem szabad,i:TMemóriaCím Eljárás Lefoglal(Változó mut:TMemóriaCím) [a memóriában TElem-nyi egybefüggő helyet foglal le, a kezdő címet mut-ba adja vissza, ha nem sikerült, akkor Sehova-t] Ha szabadSehova akkor mut:=szabad; szabad:=bMem(mut).kov különben mut:=Sehova Elágazás vége Eljárás vége. Eljárás Felszabadít(Változó mut:TMemóriaCím) [a mut-nál kezdődő TElem-nyi egybefüggő memóriát szabadít fel, mut-ba Sehova-t tesz] Ha mutSehova akkor bMem(mut).kov:=szabad; szabad:=mut; mut:=Sehova Elágazás vége Eljárás vége. … a szabad elemek listájá-nak a feje 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
16
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A memóriamodell 2. (tömbös) változat moduljának egy részlete: … Inicializálás Ciklus i=1-től MaxMem-1-ig bMem(i).köv:=i+1 Ciklus vége bMem(MaxMem).köv:=Sehova; szabad:=1 Modul vége. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
17
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer Nyelvi vonatkozások Kétféle hozzáállással is megvalósítjuk azt az alapot, amelyre építhető az adatok láncolt ábrázolása. „klasszikus” nyelvi lehetőségekre korlátozódva (FreePascal-os szókincs és fp fordító) tárgyközéppontú (objektum-orientált) nyelvek osztálydefiníciós lehetőségeit kihasználva (C++, gcc fordítóval) 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
18
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A megközelítés módja „Téma”: a sor típuskonstrukció A sor láncolt ábrázolású megvalósítása 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
19
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A sor típuskonstrukció definiálása: ExportModul Sor(Típus TElem): Eljárás Üres(Változó s:Sor) Függvény Üres?(Konstans s:Sor): Logikai Függvény Tele?(Konstans s:Sor): Logikai Függvény Első(Változó s:Sor): TElem Eljárás Sorba(Változó s:Sor, Konstans e:TElem) Eljárás Sorból(Változó s:Sor, e:TElem) Függvény SorHossz(Konstans s:Sor): Egész Függvény Hibás?(Változó s:Sor): Logikai Modul vége. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
20
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A sor típuskonstrukció láncolt megvalósítása: Modul Sor(Típus TElem): Reprezentáció Típus SorElem=Rekord(érték: TElem köv: SorElem'Mutató) Változó eleje,vége: SorElem'Mutató hossz: Egész hiba: Logikai Implementáció Eljárás Üres(Változó s:Sor): eleje:=Sehova; vége:=Sehova; hossz:=0; hiba:=Hamis Eljárás vége. … Eljárás Sorba(Változó s:Sor, Konstans e:TElem): Változó új:SorElem'Mutató Létrehoz(új) Ha újSehova akkor SorElem(új):=SorElem(e,Sehova) Ha végeSehova akkor SorElem(vége).köv:=új különben eleje:=új vége:=új hossz: különben hiba:=Igaz Elágazás vége Eljárás vége. Modul vége. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
21
Előhang – fogalmak, célok, eszközök, a módszer
InfoSavaria 2010 2010. április Előhang – fogalmak, célok, eszközök, a módszer A sor típuskonstrukció láncolt megvalósítása: Modul Sor(Típus TElem): Reprezentáció Típus SorElem=Rekord(érték: TElem köv: SorElem'Mutató) Változó eleje,vége: SorElem'Mutató hossz: Egész hiba: Logikai … Modul vége. érték köv Sehova eleje vége hossz hiba 2010. április „Lánc, lánc, eszterlánc” ... 21 Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
22
Út az „elmélettől” a „gyakorlat” felé
InfoSavaria 2010 2010. április Út az „elmélettől” a „gyakorlat” felé A típuskonstrukció paramétere (általában): a sorozat elemtípusa. Láncolt ábrázolás esetén a logikai és fizikai sorrend eltérő. A logikai sorrend megvalósítása: rákövetkezési mutató. A memóriamodell szempontjából együtt kezelendő az elem és a rákövetkezési mutató, de önállóan is manipulálandók. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
23
Út az „elmélettől” a „gyakorlat” felé
InfoSavaria 2010 2010. április Út az „elmélettől” a „gyakorlat” felé Így módosul a Memóriamodell: ExportModul Memória(Típus TElem): Típus TMutató=TLáncElem'Mutató TLáncElem=Rekord(érték:TElem, mut:TMutató) Konstans Sehova:TLáncElem'Mutató Eljárás Lefoglal(Változó mut:TMutató) [a memóriában TLáncElem-nyi egybefüggő helyet foglal le, a kezdőcímet mut-ban adja vissza, …] Eljárás Felszabadít(Változó mut:TMutató) [a mut címen kezdődő TLáncElem-nyi egybefüggő memóriát szabadít fel, …] Függvény Láncelem(Konstans mut:TMutató):TLáncElem [a mut címen kezdődő TLáncElem értékét adja vissza] Eljárás Láncelemmódosít(Konstans mut:TMutató, Konstans e:TLáncElem) [a mut címen kezdődő TLáncElem értékét módosítja e-re] Eljárás Láncelemértékmódosít(Konstans mut:TMutató, Konstans e:TElem) [a mut címen kezdődő TLáncElem érték mezőjét módosítja e-re] Eljárás Láncelemmutmódosít(Konstans mut:TMutató, Konstans p:TMutató) [a mut címen kezdődő TLáncElem mut mezőjét módosítja p-re] Modul vége. most még elegendő a típusát tudni, érték nélkül Többlet, „kényelmi szolgáltatások” 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
24
Út az „elmélettől” a „gyakorlat” felé
InfoSavaria 2010 2010. április Út az „elmélettől” a „gyakorlat” felé A Sor megvalósítási moduljának néhány részlete: Ábrázolás: érték mut Sehova eleje vége hossz hiba Modul Sor(Típus TElem): Reprezentáció Import: Memória(TElem) Változó eleje,vége:TMutató hossz:Egész hiba:Logikai … 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
25
Út az „elmélettől” a „gyakorlat” felé
InfoSavaria 2010 2010. április Út az „elmélettől” a „gyakorlat” felé Implementálás: érték mut Sehova eleje vége hossz hiba … Implementáció Eljárás Üres(Változó s:Sor): eleje:=Sehova; vége:=Sehova; hossz:=0; hiba:=Hamis Eljárás vége. Függvény Üres?(Konstans s:Sor):Logikai Üres?:=(hossz=0) Függvény vége. Függvény Tele?(Változó s:Sor):Logikai … Függvény vége. Függvény Első(Változó s:Sor):TElem … Függvény vége. Eljárás Sorba(Változó s:Sor, Konstans e:TElem): Változó új:TMutató le:Tláncelem; se:TElem Lefoglal(új) Ha újSehova akkor le:=TLáncElem(e,Sehova); Láncelemmódosít(új,le) Ha végeSehova akkor Láncelemmutmódosít(vége,új) különben eleje:=új vége:=új; hossz:=hossz különben hiba:=Igaz Elágazás vége Eljárás vége. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
26
Út az „elmélettől” a „gyakorlat” felé
InfoSavaria 2010 2010. április Út az „elmélettől” a „gyakorlat” felé Implementálás (folytatás): érték mut Sehova eleje vége hossz hiba … Eljárás Sorból(Változó s:Sor, e:TElem) Változó p:TMutató le:TLáncelem Ha Üres?(s) akkor hiba:=Igaz különben le:=Láncelem(eleje) e:=le.érték; p:=le.mut Felszabadit(eleje) Ha p=Sehova akkor vége:=Sehova eleje:=p; hossz:=hossz Elágazás vége Eljárás vége. Függvény SorHossz(Konstans s:Sor):Egész SorHossz:=hossz Függvény vége. Függvény Hibás?(Változó s:Sor):Logikai … Függvény vége. Inicializálás eleje:=Sehova; vége:=Sehova; hossz:=0; hiba:=Hamis Modul vége. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
27
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben Tipikus nyelv: Pascal; alkalmazott változat: FreePascal Korlát: a modul (=unit) nem paraméterezhető Típusonként önálló modul „alapmodul”: TElem a memóriamodell (mutatóval egyesített) modulja(i): „valódi memóriacímeken” alapuló – „dinamikus” TElem típusú tömbön nyugvó – „statikus” a típuskonstrukció modulja: Sor 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
28
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben Az „alapmodul”: TElem Mindig a feladatban szereplő típusra cserélendő, akár elemi, akár összetett típus lehet Unit uelem; Interface Type TElem=Integer; … Implementation … Begin End. Bővíthető típus-specifikus műveletekkel (függvényekkel, operátorokkal…) Bővíthető típus-specifikus műveletekkel (függvényekkel, operátorokkal…) 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
29
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A „dinamikus” modell modulja: Unit dinlanc; Interface Uses uelem; Type Mutato = ^TLancElem; TLancElem = Record ertek: TElem; mut: Mutato; End; Const sehova = nil; Procedure Lefoglal(Var p: Mutato); Procedure Felszabadit(Var p: Mutato); Function LancElem(Const p: Mutato): TLancElem; Procedure LancElemModosit(Const p: Mutato; Const le: TLancElem); Procedure LancElemErtekModosit(Const p: Mutato; Const e: TElem); Procedure LancElemMutModosit(Const p: Mutato; Const m: Mutato); … Exportált fogalmak Reprezentáció 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
30
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A „dinamikus” modell modulja (folytatás): Implementáció … Implementation Procedure Lefoglal(Var p: Mutato); Begin new(p); End; Procedure Felszabadit(Var p: Mutato); Begin dispose(p); p:=sehova; End; Function LancElem(Const p: Mutato): TLancElem; Begin LancElem:=p^; End; Procedure LancElemModosit(Const p: Mutato; Const le: TLancElem); Begin p^:=le; End; Procedure LancElemErtekModosit(Const p: Mutato; Const e: TElem); Begin p^.ertek:=e; End; Procedure LancElemMutModosit(Const p: Mutato; Const m: Mutato); Begin p^.mut:=m; End; Inicializálás: üres. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
31
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A „statikus” modell modulja: Unit statlanc; Interface Uses uelem; Const MaxMem = 100; Type Mutato = 0..MaxMem; TLancElem = Record ertek: TElem; mut: Mutato; End; TMem = Array [1..MaxMem] of TLancElem; Const sehova = 0; Var szfej: Mutato; mem: TMem; i: integer; Procedure Lefoglal(Var p: Mutato); Procedure Felszabadit(Var p: Mutato); Function LancElem(Const p: Mutato): TLancElem; Procedure LancElemModosit(Const p: Mutato; Const le: TLancElem); Procedure LancElemErtekModosit(Const p: Mutato; Const e: TElem); Procedure LancElemMutModosit(Const p: Mutato; Const m: Mutato); … Exportált fogalmak Reprezentáció 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
32
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A „statikus” modell modulja (folytatás): Implementáció … Implementation Procedure Lefoglal(Var p: Mutato); Begin p:=szfej; If p<>sehova then szfej:=mem[szfej].mut; End; Procedure Felszabadit(Var p: Mutato); Begin mem[p].mut:=szfej; szfej:=p; p:=sehova; End; Function LancElem(Const p: Mutato): TLancElem; Begin LancElem:=mem[p]; End; Procedure LancElemModosit(Const p: Mutato; Const le: TLancElem); Begin mem[p]:=le; End; Procedure LancElemErtekModosit(Const p: Mutato; Const e: TElem); Begin mem[p].ertek:=e; End; Procedure LancElemMutModosit(Const p: Mutato; Const m: Mutato); Begin mem[p].mut:=m; End; 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
33
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A „statikus” modell modulja (folytatás): Inicializálás. … Begin szfej:=1; For i:=1 to MaxMem-1 do mem[i].mut:=i+1; End; mem[MaxMem].mut:=sehova; End. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
34
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A Sor (statikusan) láncolt ábrázolású modulja: Unit uslsor; Interface Uses statlanc, uelem; Type TSor=Record Eleje {ahonnan kivehetek}: Mutato; Vege {ahova tehetek elemet}: Mutato; Hossz: Integer; Hiba: Boolean; End; Procedure Ures(Var S:TSor); Function Ures_e(Const S:TSor): Boolean; Function Tele_e(Const S:TSor): Boolean; Function Elso(Var S:TSor): TElem; Procedure Sorba(Var S:TSor; Const E: TElem); Procedure Sorbol(Var S:TSor; Var e: TElem); Function SorHossz(Const S:TSor): Integer; Function Hibas_e(Var S:TSor): Boolean; … Exportált fogalmak Reprezentáció 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
35
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A Sor láncolt ábrázolású modulja (folytatás): Implementáció … Implementation Procedure Ures(Var S:TSor); Begin S.Eleje:=sehova; S.Vege:=sehova; S.Hossz:=0; S.Hiba:=False; End; Function Ures_e(Const S:TSor): Boolean; Ures_e:=(S.Eleje=sehova); Function Tele_e(Const S:TSor): Boolean; Var p: Mutato; Lefoglal(p); If p = sehova then Tele_e:=true else Begin Tele_e:=false; Felszabadit(p); End; Function Elso(Var S:TSor): TElem; If Ures_e(S) then S.Hiba:=True else Elso:=LancElem(s.eleje).ertek; 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
36
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A Sor láncolt ábrázolású modulja (folytatás): … Procedure Sorba(Var S:TSor; Const E: TElem); Var p: Mutato; le: TLancElem; Begin If Tele_e(S) then S.Hiba:=True else Begin Lefoglal(p); le.ertek:=e; le.mut:=sehova; LancElemModosit(p,le); If Ures_e(s) then s.eleje:=p else LancElemMutModosit(s.vege, p); s.vege:=p; s.hossz:=s.hossz+1; End; Procedure Sorbol(Var S:TSor; Var e: TElem); Var sv: Mutato; If Ures_e(S) then S.Hiba:=True e:=LancElem(s.eleje).ertek; sv:=LancElem(s.eleje).mut; Felszabadit(s.eleje); If sv=sehova then s.vege:=sehova; s.eleje:=sv; s.hossz:=s.hossz-1; End; … 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
37
Megvalósítás „klasszikus” nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás „klasszikus” nyelvi környezetben A Sor láncolt ábrázolású modulja (folytatás): … Function SorHossz(Const S:TSor): Integer; Begin SorHossz:=S.Hossz; End; Function Hibas_e(Var S:TSor): Boolean; Hibas_e:=S.Hiba; S.Hiba:=False; End. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
38
Megvalósítás tárgyközéppontú nyelvi környezetben
InfoSavaria 2010 2010. április Megvalósítás tárgyközéppontú nyelvi környezetben 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
39
Utóhang – visszatekintés, következtetések
InfoSavaria 2010 2010. április Utóhang – visszatekintés, következtetések Visszatekintés Az „elmélet” moduljai: Típuskonstrukció (pl. Sor) Mutató (pl. TElem-re) Memória cím (bármié) Tömbindex (TElem-é) Memóriamodell Valódi memória (bájt- alapú) Tömb (TElem-alapú) A „gyakorlatok” moduljai: Típuskonstrukció (pl. Sor) Mutató (pl. TElem-re) + Memóriamodell Memória cím (bármié) + Valódi memória (bájt- alapú) Tömbindex (TElem-é) + Tömb (TElem-alapú) 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
40
Utóhang – visszatekintés, következtetések
InfoSavaria 2010 2010. április Utóhang – visszatekintés, következtetések Tanulságok: A mutató „típus” markánsan szétválasztja az adat tartalma és címe fogalmakat; ez által használata tisztázólag hathat az ada-tokkal kapcsolatos mechanizmusokra vonat-kozólag. Célszerű bevezetni az algoritmikus nyelv moduláris kiegészítését, amely az adat-absztrakció szempontjából lényeges típusok bevezetését teszik lehetővé; amely az osztályfogalom őse. 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
41
Utóhang – visszatekintés, következtetések
InfoSavaria 2010 2010. április Utóhang – visszatekintés, következtetések Utolsó szó jogán két vallomás Az „elmélet” és „gyakorlat” eltérése a „több hangnak” köszönhető… nem szükségszerű! Számos részletkérdéssel adósak maradtunk. Ezeket olvashatja az Igen Tisztelt Érdeklődő Hallgatóság az alábbi irodalmakban: „Lánc, lánc, eszterlánc”– … Pap, Gné–Szlávi, P.–Zsakó, L.: „Módszeres programozás: Adattípusok”, ELTE IK, 1998 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
42
„Lánc, lánc, eszterlánc” ...
InfoSavaria 2010 2010. április Itt a vége, fuss el véle! Köszönjük a megtisztelő figyelmüket! Horváth Győző – Pap Gáborné – Szlávi Péter – 2010. április „Lánc, lánc, eszterlánc” ... Horváth, Papné, Szlávi: Láns, lánc eszterlánc…
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.