PROGRAMOZÁSMÓDSZERTAN 2. ELADÁS 2005 (VÁZLAT)
|
|
- Réka Székelyné
- 6 évvel ezelőtt
- Látták:
Átírás
1 PROGRAMOZÁSMÓDSZERTAN 2. ELADÁS 2005 (VÁZLAT) 1. A MODUL MINT A TÍPUSMEGVALÓSÍTÁS KERETE 1.1 Mi a típus? Amit már tudunk statikus kellékek Értékhalmaz Mveletgarnitúra Miket kell megadni ahhoz, hogy mondhassuk: a típust teljesen ismerjük? A statikus kellékeken, ismereteken túl: Szignatúra milyen dolgokkal manipulál a mvelet (értelmezési tartomány), s mit állít el (értékkészlet)? A mveletek (együtt)mködése hogyan függnek össze a mveletek transzformációi (axiómák)? Mit értünk a típus megvalósítása alatt? Annak definiálását, hogy milyen leképezést valósítanak meg az egyes mveletek (szemantika-definíció), és hogyan lehet megszólítani ket (szintaktika-definíció): 1. Definiálhatjuk csak a kapcsolatukat, egymásra hatásukat, axiómák megadásával. (Algebrai specifikáció) 2. Definiálhatjuk az egyes mveletek egyedi leképezésének megadásával. Ez az export modul feladata, amely tartalmazza a szignatúrákat és esetleg az el-utófeltételeket. (Algoritmikus specifikáció) 3. Rögzíthetjük az egyes mveleteket egyedi megvalósításukkal, amelyben már figyelembe vesszük a típus már rögzített ábrázolását. Ez a reprezentációs-implementációs modul feladata. A fenti 2-3.-at egyaránt vonatkoztathatjuk algoritmusra és konkrét programozási nyelvre. A következ ( 1.3. A modul ) fejezetben mi az algoritmikus nyelvünket bvítjük ki úgy, hogy kezelhet legyen benne e kérdéskör. Mivel nem állunk meg a puszta elmélet síkján tisztázzuk azt is ( 2. A modulfogalom és a Pascal nyelv fejezetben), hogy az általunk használt lingua franca, a Pascal programozási nyelv, milyen lehetséget ad mindehhez A típus algebrai specifikációjáról Röviden utalunk a nyelv azon kiegészítésére, amelyben tisztázni fogjuk globális elvárásainkat az adott típussal szemben. Ezt a legabsztraktabb elképzelést formálisan egy algebrai alapú nyelven írjuk le, az alábbi keretben: 1
2 Szintaktikai minta Típus TípusKonstrukció(paraméterek): Asszociált mveletek: Operáció(értelmezési tartomány): Értékkészlet Magyarázat A definiálandó típuskonstrukció alkalmazási sablona (feje). Operációinak szignatúrája (értelmezési tartománya, értékkészlete) Axiómák: Jelölések: Az operációk kapcsolatát leíró axiómák, és a bennük fölhasznált objektu- objektum: Típus(paraméterek) = értelmez megjegyzés mok deklarációi. 1 o az axióma informális szövege... a formalizált axióma Axióma-állítások esetleg kib)vítve fontos következményállításokkal. 2 o Mint a példából is kiderül alkalmazunk néhány konvenciót, amelyet most az id rövidsége miatt nem taglalunk. (A részletekhez lásd a Típus-specifikációkban.) Visszatér példa legyen a hét napjainak típusa! Nézzük ennek egy lehetséges algebrai leírását! Megjegyzem: a példa nem tipikus bizonyos értelemben, mivel a napok típusa egy konkrét típus, így nem tudunk élni a fenti típus-specifikálási nyelvezet paraméterezési szolgáltatásaival. Példa: Típus TNap: Asszociált mveletek: Hétf,Kedd,Szerda,Csütörtök, Péntek,Szombat,Vasárnap, Min,Max:TNap Számosság:Egész 1 Létrehoz:TNap Lerombol(TNap) Következ(TNap):TNap {NemDef} Elz(TNap):TNap {NemDef} Sorszám(TNap):Egész TNap(Egész):TNap {NemDef} <(TNap,TNap):Logikai Axiómák: a:tnap n:egész 0 o A minimális érték a Hétf, a maximális a Vasárnap, a típus számossága 7. 1 A konstansokat 0-változós függvényeknek tekintjük. 2
3 Számosság=7 Min=Hétf) Max=Vasárnap 1 o Létrehozás utáni értéke Hétf. a=létrehoz a=hétf) 2 o Lerombolás után nincs értelme a m:veletek (a Létrehoz kivételével) alkalmazásának. Következ)(Lerombol(a))=NemDef 3 o Nem létezik Hétft megelz, s Vasárnapot követ. El)z)(Hétf))=NemDef Következ)(Vasárnap)=NemDef 4 o A Következ és Elz m:veletek egymás inverzei. El)z)(a) Következ)(El)z)(a))=a Következ)(a) El)z)(Következ)(a))=a 5 o A Sorszám és TNap m:veletek egymás inverzei. n[0..számosság) Sorszám(TNap(n))=n TNap(Sorszám(a))=a n[0..számosság) TNap(n)=NemDef 6 o A fenti felsorolás sorrendjében növekven rendezettek. Következ)(Hétf))=Kedd Következ)(Kedd)=Szerda 7 o A Hétf sorszáma 0, a Vasárnapé 6. Sorszám(Hétf))=0 Sorszám(Vasárnap)=6 Állítás: Sorszám(a)[0..Számosság); és a Sorszám(a)=a fenti felsorolásbeli pozíciója + 1. Bizonyítás: Nyilvánvaló. 8 o A felsorolásban elbb szerepl kisebb, mint bármely késbbi. a<b Sorszám(a)<Sorszám(b) 2 Megjegyzések: Figyeljük meg a következket! A Létrehoz értelmezési tartomány nélküli függvény, amely a semmibl kreálja meg az adott típusú adatot; a Lerombol pedig értékkészlet nélküli, amivel épp a többi, normális függvény ezután történ alkalmazhatatlanságát fejeztük ki. Ezt nyomatékosítjuk a 2 o axiómával is. Lehetséges, hogy a Létrehoz és Lerombol mveletekre a késbbiek során explicite nem lesz szükségünk. Ez a helyzet az ún. statikus adatoknál, amelyre az a jellemz, hogy a deklaráció által automatikusan jön létre, s így a programozónak nincs gondja vele. (Érdemes meggondolni, mikor kerül sor e két mvelet végrehajtására a blokkstruktúrájú nyelvek pl. a Pascal esetén.) 2 <:TNapxTNap?Logikai rendezés visszavezetése <:EgészxEgész?Logikai rendezésre. 3
4 A NemDef egy típusfüggetlen konstans, ami akkor képzdik, amikor valamilyen tiltott mvelet végrehajtására kerülne sor. Ha egyszer NemDef érték jött ki, akkor arra alkalmazva bármely operációt, az eredmény NemDef marad (implicit error-axióma). Nyilvánvaló, hogy a 2-8 o axiómák feltételéül meg kellett volna fogalmaznunk, hogy az ott szerepl objektum létezik (objektumok léteznek), azaz létrehoztuk korábban. Ezt implicite föltételeztük. A 6 o axióma párjaként megfogalmazható Elz-rendezési axiómát következményállításként illeszthetjük a rendszerbe. (Most nem tesszük meg.) 1.3. A modul Elsként a programozói felületet leíró, ún. export modul szintaxisát adjuk meg: ExportModul TípusNév(InputParaméterek): [most következnek az exportálandó fogalmak értelmes csoportosításban:] Típus [ritkán van ilyenre szükség] Tip1,Tip2,... [csak azonosítók felsorolása!] Konstans [ritkán van ilyenre szükség] Kons1,Kons2,...[a TípusNév típus néhány kiemelend konstansa] [az alábbi részben soroljuk föl a típushoz tartozó tevékenységek fejsorait és mködésüket leíró el-utófeltételeket] Függvény Fv1(FormParam): FvTip1 Ef: Uf: Függvény Fv2(FormParam): FvTip2 Ef: Uf: Eljárás Elj1(FormParam) Ef: Uf: Eljárás Elj2(FormParam) Ef: Uf: Operátor Op1(FormParam): OpTip1 Ef: Uf: Operátor Op2(FormParam): OpTip2 Ef: Uf: Modul vége. Megjegyzések: A f fogalom, a TípusNév, külön megadás híján is látszódó fogalom lesz. 4
5 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.) Az el0-utófeltételek idnként elhagyhatók. (Pl. ha ezeket csak az ábrázolás ismeretében lehet megfogalmazni, ami e pillanatban még nem ismert.) A modulfej egyben a felhasználás mintájául is szolgál (l. az alábbi példát). Példa: ExportModul Tömb(Típus TIndex: Típus TElem): Modul vége. A fenti definíció után a felhasználás szintaxisa: Típus Vektor=Tömb(1..9:Egész) Az egyes exportált fogalmak csoportosításra semmilyen megkötés nincs: sem sorrendjére, sem arra, hogy hány darabba különítjük el ket. (Tehát lehet több konstans, típus vagy más csoport is.) Kerülni kell a változók exportálását. Ui. veszélyes, ha a rátámaszkodó programnak lehetsége van a reprezentált adatokkal közvetlen kapcsolatba kerülni. Ha ilyen igény merülne föl, akkor definiálni kell külön erre a célra tevékenységeket (eljárásokat, függvényeket, operátorokat). Ki fogjuk egészíteni az algebrai specifikáció mveletkészletét továbbiakkal is: egyenl0ségvizsgálattal, értékadással, beolvasás és kiírás mveletekkel, valamint a hibás elvégzés tényét rögzít hiba-flag-et kezel0 függvénnyel. (Ezek nélkül ugyanis felhasználhatatlan eszköz maradna a legtöbb típus, vagy mindenegyes esetben a programozónak külön kellene jól-rosszul ezen mveletekkel kiegészítenie.) Mindezt annak ellenére tesszük, hogy sok esetben a programozási nyelvek nem adnak mindegyikre (pl. a típusos be/ki-re) módot. Egy-két típusnál szokatlan lehet valamely létrehozó, ill. leromboló mvelet használatának explicit felkínálása, mivel a programozási nyelvek legtöbb implementációja automatikusan gondoskodik a létrehozásról. (Pl. Tömb, Táblázat, Statikus gráf.) A leírás teljességére való törekvés, illetve az esetleges hagyományostól eltér ábrázolás lehetvé tétele mégis indokolttá tehetik ezt. Nézzük visszatér példánk egy lehetséges export modulját! 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 5
6 Uf: Min=Hétf Operátor Max:TNap Másnéven Max TNap Uf: Max=Vasárnap Operátor Számosság:Egész Másnéven Számosság TNap Uf: Számosság=7 Függvény Következ(Változó x:tnap):tnap Ef: x Vasárnap [v.ö. a 3. axiómával] Uf: Következ(Hétf)=Kedd [v.ö. a 6. axiómával] Függvény Elz(Változó x:tnap):tnap Ef: x Hétf [v.ö. a 3. axiómával] Uf: Elz(Kedd)=Hétf [v.ö. a 6.&4. axiómával] Függvény Sorszám(Konstans x:tnap):egész Uf: Sorszám(Hétf)=0 [v.ö. a 7. axiómával] Függvény TNap(Változó x:egész):tnap Ef: x[0..6] Uf: TNap(0)=Hétf Infix Operátor Egyenl(Konstans x,y:tnap):logikai Másnéven x=y [ezt a függvényt nem specifikáljuk, mert az alapokat firtatja, és elkerülhetetlenül circulum viciosus-ba ütköznénk] Infix Operátor LegyenEgyenl(Változó x:tnap Konstans y:tnap) Másnéven x:=y [ezt az eljárást nem specifikáljuk, mert az alapokat firtatja, és elkerülhetetlenül circulum viciosus-ba ütköznénk] Infix Operátor Kisebb(Konstans x,y:tnap):logikai Másnéven x<y Uf: Kisebb(Hétf,y) y Hétf 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 Uf: x=hétf Output= hétf Függvény Hibás?(Változó x:tnap):logikai [teszteli, hogy volt-e hibásan elvégzett mvelet (pl. amelynek az elfeltétele nem teljesült) az adott TNap típusú (x) adatra; Megjegyzés [SzP1]: Lehetne így is: Függvény Következ(Konstans x:tnap): TNap És ha hiba történt, akkor e tényt a TNap típusú eredmény-adat árulja el, az hiba-flag-je Igaz. Ez azonban sok gondot vet föl. Pl. egy kifejezés eredményeként születik egy hibás TNap-konstants?!? 6
7 majd inicializálódik a hiba-flag] Modul vége. Megjegyzések: A Létrehoz és Lerombol mveleteket kihagytuk az algoritmikus specifikációból. Ezzel eltértünk az algebrai specifikációtól. Ok: statikusan kívánjuk megvalósítani e felsorolástípust, építünk a blokk-struktúrájú nyelvek adatlétrehozó, -leromboló mechanizmusainak létére. (Gondoljon az eljárás-/függvény-paraméterekre és a lokális adatok kezelésére!) A Létrehoz-axióma persze még fel kell bukkanjon a megvalósításban a szükséges kezdérték megadása miatt. A Min, Max és Számosság konstansokat (prefix) 0-változós operátorként definiáltuk, s nem konstansként, mert alkalmazásuk speciális szintaxisú (típusparaméter). Vegyük észre, hogy ezek a konstansok minden rendezett, illetleg véges típus esetén értelmesek. Így a használó program szintjén való megkülönböztetés érdekében olyan szintaxist kell hozzájuk rendelni, amely lehetvé teszi a típushoz kapcsolást. Ilyen probléma nem vetdik föl a többi (Hétf, Kedd stb.), natív konstanssal kapcsolatban. (Ez a magyarázata a Min Típus, Max Típus, illetve a Számosság Típus különleges szintaxisának.) Példa: Változó ma:tnap napdb:egész Ciklus ma=min TNap-tól Max TNap-ig Ciklus vége napdb:=számosság TNap Látható, hogy akkurátusan törekedtünk bármi áron is!, hogy az utófeltételekben ne nyúljunk vissza más mvelethez, csak saját hatáskörben definiáltuk az elvárásokat. Ha ezt az elvet nem tartottuk volna tiszteletben, akkor egyszeren meg lehetett volna fogalmazni a := és = operátorok utófeltételét. Például: Egyenl.Uf: x=y Sorszám(x)=Sorszám(y). Ekkor azonban könnyen eladódhatna az a helyzet, hogy egymásra kölcsönösen hivatkozva specifikáljuk ket, ami egy logikailag értelmezhetetlen specifikációt eredményezne. Az értékadás és az értékazonosság operációkról feltesszük, hogy bitrl-bitre történ másolást, illetleg azonosságvizsgálatot jelent, ezért nem tartjuk fontosnak feltételekkel körülbástyázni. Másrészt, ha ezt formálisan is le akarnánk írni, vissza kellene nyúl- 7
8 ni (esetleg bit-szint) reprezentációig, amit effajta specifikációnál elkerülendnek tekintünk. Az idnként felbukkanó folytatás jelzése formálisan megengedhetetlen, azonban itt csupán egy példáról van szó, így megelégedtünk a kitalálható folytatás jelzésével. Fölvethet kérdés: mennyire ugyanarról szól a kétféle specifikáció. Valóban ez külön vizsgálandó, st bizonyítandó probléma. A Be: és Ki: operátorok mködésénél két problémát kell tudni formalizálni: 1. a külvilággal való kapcsolatét (amely karakteres alapú), 2. SzövegNTNap transzformációét. Az 1. általános megoldására bevezettünk két függvényt. Az Input megadja azt a szöveget, amelyet a beolvasó utasítás talál az input-pufferben; az Output szimbolizálja az output-puffer állapotát (azt a szöveget, amely kiíródik a végrehajtás során, pl. a képernyre). Így a 2. probléma már kezelhetvé vált, hisz az adat és transzformáltja is egy-egy memóriabeli objektumban csücsül. Fel kell figyelnünk a szöveges és a belsállapotú konstansok merev megkülönböztetésére ( hétf O Hétf)! Operátornak azt az alprogramot nevezzük, amely az eljárástól vagy függvénytl eltér szintaxissal építhet be a programba (azaz hívható). Lehet Infix, ekkor a két operandus közé illeszkedik, lehet Prefix, ekkor megel0zi az egyetlen paraméterét, ill. Postfix esetben követi. S lehet egyéni szintaxisa, ekkor a Másnéven kulcs-szónál adhatjuk meg ezt. A leggyakoribb eset a Prefix, ezért ezt a minsítt elhagyhatjuk. Egyik-másik operátornál meglep a paraméter hozzáférési joga. A várható konstans helyett változó lett azért, mert a végrehajtás során hiba következhet be, amely által az állapota kényszeren és szándékunk ellenére megváltozik. (Következ), El)z) Hibás?. Nagyjából azoknál, amelyeknél nem üres az elfeltétel, tehát van esélye a hibás használatnak. Pontosan azoknál, amelyeknek bármi köze is van a hiba-flag-hez.) Folytassuk a megvalósítást betetéz fogalommal, a reprezentációs-implementációs modullal, röviden a modullal! Ennek feladata, hogy amit eddig elterveztünk, azt kidolgozza: azaz tisztázza, hogy 1. miként ábrázolható a típusbeli érték a memóriában, vagy bárhol (reprezentáció) és 2. hogyan valósíthatók meg az egyes mveletek, figyelembe véve a választott ábrázolást (implementáció). A modul-szintaxis a következ: Modul TípusNév(InputParaméterek): Reprezentáció [a típusábrázoláshoz szökséges adatleíró kellékek : konstansok, saját típusok, a változó-deklarációs rész már magának a típusnak a mezit határozza meg] 8
9 Implementáció [itt szerepelnek az export-modulban megjósolt tevékenységek mködésének részletezése] Függvény Fv1(FormParam): FvTip1 Ef: Uf: Függvény Fv2(FormParam): FvTip2 Ef: Uf: Eljárás Elj1(FormParam) Ef: Uf: Eljárás Elj2(FormParam) Ef: Uf: Operátor Op1(FormParam): OpTip1 Ef: Uf: Operátor Op2(FormParam): OpTip2 Ef: Uf: 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ések: Az egyes mveletek egyedi specifikációját jelent el-utófeltétel párok, amennyiben megegyeznek az exportmodulbelivel, nyilván elhagyhatók. Természetesen értelmesen igazítva a reprezentációhoz, újabb biztonsági támpontul szolgálhat a fejlesztéshez. (Ekkor persze újabb feladatként járul az eddigiek mellé, hogy ezek következését az eldjükbl be kell látni: operáció Exportmodul.Ef operáció Modul.Ef operáció Exportmodul.Uf operáció Modul.Uf.) A visszatér példánk egy lehetséges moduljának töredékét tervezzük meg az alábbiakban. A reprezentációs döntésünk, hogy legyen minden TNap adatnak legyen egy hiba-flag-je. Példa: Modul TNap: [kiindulási alap az export modul] Reprezentáció Változó felskód:egész hiba:logikai 9
10 Konstans Hétf:TNap(0,Hamis) Kedd:TNap(1,Hamis) Vasárnap:TNap(6,Hamis) Implementáció Operátor Min:TNap Másnéven Min TNap Uf: Min=Hétf Min:=Hétf Operátor vége. Operátor Max:TNap Másnéven Min TNap Uf: Max=Vasárnap Max:=Vasárnap Operátor vége. Operátor Számosság:Egész Másnéven Számosság TNap Uf: Számosság=7 Számosság:=7 Operátor vége. Függvény Következ(Változó x:tnap):tnap Ef: x Vasárnap Uf: x=hétf Következ(x)=Kedd 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. Függvény Elz(Változó x:tnap):tnap Ef: felskód Hétf Uf: felskód=kedd Elz(x).felsKód=Hétf Függvény vége. Függvény Sorszám(Konstans x:tnap):egész Uf: x.felskód=hétf.felskód Sorszám(x)=0 Függvény vége. Függvény TNap(Változó x:egész):tnap Ef: x[0..6] Uf: TNap(0).felsKód=Hétf.felsKód Függvény vége. Infix Operátor Egyenl(Konstans x,y:tnap):logikai Másnéven x=y Megjegyzés [SzP2]: Típuskonstrukciós függvény 10
11 [ezt a függvényt nem specifikáljuk, mert az alapokat firtatja, és elkerülhetetlenül circulum viciosus-ba ütköznénk] Operátor vége. Infix Operátor LegyenEgyenl(Változó x:tnap Konstans y:tnap) Másnéven x:=y [ezt a függvényt nem specifikáljuk, mert az alapokat firtatja, és elkerülhetetlenül circulum viciosus-ba ütköznénk] Operátor vége. Infix Operátor Kisebb(Konstans x,y:tnap):logikai Másnéven x<y Uf: x.felskód=hétf.felskód Kisebb(x,y) y.felskód Hétf.felsKód Operátor vége. 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 vége. Operátor Ki(Konstans x:tnap): Másnéven Ki:x Uf: x=hétf Output= hétf Operátor vége. 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 Modul vége. Megjegyzés: Figyeljünk föl rá, hogy az utófeltételben sok esetben nem rögzítjük a hiba-flag értékét! Ez szándékos: ha hibás volt a mvelet eltt, maradjon is az (implicit error-axióma), ha hibás ereményre vezet, akkor persze állítódjon át garantáltan Igaz-ra. Vegyük észre: az inicializálásban éppen az 1 o axióma szerint jártunk el. A többieknél is, csak azoknál nem ennyire látványosan. Idnként attól a konvenciónktól eltérünk, hogy a típus reprezentációjában szerepl komponensekre (felskód, hiba) nem a rekordnál szokásos mezhivatkozásos jelöléssel tesszük meg (x.felskód helyett csupán felskód), az a magyarázata, hogy 11
12 az adott operációnál nem lenne egyértelm+, hogy melyik ilyen típusú adat valamely komponensérl van éppen szó. Pl. a Következ) operációban szóba kerül két TNap típusú objektum is: a kiindulásul szolgáló x paraméter és az eredményt jelent. 2. A MODULFOGALOM ÉS A PASCAL NYELV Amire mód van: algoritmikus specifikáció és a megvalósítás; amire nincs: az algebrai specifikáció. Többféle Pascal-nyelvi lehetséget lehet a típusgyártás szolgálatába állítani: Unit önálló fordítási egység, amely lehetne a típus zárt, lefordított kerete. Zárt és lefordított paraméterezni már nem lehet, többször fordítani viszont nem kell. Include-állomány forrásprogram-töredék, amelyben a megvalósított típus dolgai találhatók, de bizonyos részek nem definiáltak benne, pl. a paraméterei, így részt vesz minden fordításban annak ellenére, hogy benne esetleg nincs változás; Objektum olyan rekord-szer képzdmény, amely egységbe zárja a típus két kellékét: az értékhalmazt és a mveleteit; mindezt úgy teszi, hogy akár része lehet a fejlesztend programnak, akár kiemelhet unit-ba vagy include-állományba (azok minden elnyével és hátrányával). Az nyilvánvaló, hogy a Pascal-ban nincs operátordefiniálási lehetség, helyette vagy function-t vagy procedure-t kell használni; csak egyszer+ értéket szolgáltató függvényeket lehet definiálni (használni), ezért ilyenek gyanánt alkalmasan átalakított procedure-kat kell difiniálni. Az átalakítás persze igencsak mechanikus, ahogy az alábbi példa mutatja: Algoritmikus Pascal 2.1. Unit Operátor Min:TNap Másnéven Min TNap Min:=Hétf Operátor vége. Procedure Min(Var minki:tnap); minki:=hetfo A unit szintaxisa igazodik a Pascal nyelvhez, így túl sok magyarázatra nincs szükség. Annyit elljáróban: a unit egyesíti az exportmodul (Interface-rész) és a modul (Implementation-, inicializáló rész) fogalmat. Unit TipusNev;{InputParaméterek} Interface {a kívülrl láttatandó fogalmak: unit-ok, konstansok, típusok, változók; eljárások és függvények fejsorai} 12
13 Implementation {az elrejthet reprezentációs dolgok: unit-ok, konstansok, változók, típusok, saját eljárások és függvények; az exportált eljárások és függvények törzsükkel együtt} {a típus adatainak inicializálását végz utasítások} End. Megjegyzések: A program végrehajtása azzal kezd0dik, hogy az összes hozzászerkesztett unit ( és End.-je közé tett) inicializáló utasításai egyszer s mindenkorra végrehajtódnak. Azaz nincs mód arra, hogy ha több adott (valamely unit-ban megvalósított) típusú adat van a programban, akkor azok mindegyike külön-külön inicializálódjék. Mivel nincs mód paraméterezésre, ezért ellenáll mindenféle általánosításnak. A fenti kommentben lev InputParaméterek csak a fejlesztnek szolgálnak információt arról, hogy mik azok a fogalmak, amelyek, ha lehetséges volna, paraméterként funkcionálhatnának. A unit neve és a befoglaló file neve azonos kell, legyen! Felhasználása: a hívó program Uses utasítása sorolja föl a felhasznált összes unitot. Ha ugyanaz az azonosító több hivatkozott modulban is elfordul (vagy magában a hivatkozó programban), akkor fölvethet a kérdés: melyikre mi módon lehet hivatkozni. A válasz: min0sített azonosító alkalmazása, azaz a unitnév + pont + azonosító. Például: írható saját ClrScr-eljárás, amelyben építhetünk a Crt unit hasonló nev eljárására: Uses,Crt,; Procedure ClrScr(Const cím:string); Crt.ClrScr; Writeln(cím:40+(Length(cím) Div 2)); ClrScr( Ügyes kis program ); 13
14 Az alábbi példa bemutatja, hogyan lehet a TNap típust unit-tal megvalósítani. A Pascal nyelv fentebb említett kellemetlen vonásai miatt a TNap-érték függvényeket procedure-ákkal kell helyettesíteni. Példa: Unit TNapUnit;{InputParaméterek} Interface Type TNapK=(Hetfo,Kedd,Szerda,Csutortok, Pentek,Szombat,Vasarnap); TNap=Record felskod:tnapk; hiba:boolean Procedure Min(Var minki:tnap); { Uf: minki=tnap(hetfo,hamis)} Function Szamossag:Word; { Uf: Szamossag=7} Procedure Kovetkezo(Var x:tnap; Var kovetkezoki:tnap); {Ef: x.felskod<>vasarnap Uf: x.felskod=hetfo KovetkezoKi.felsKod=Kedd ES} {erre nincs szükség, ezt tudja a Pascal (:=): Procedure LegyenEgyenl(Var x:tnap Const y:tnap); } Function Egyenlo(Const x,y:tnap):boolean; {Ef: Uf: } Function Kisebb(Const x,y:tnap):boolean; {Ef: Uf: } Procedure Be(Var x:tnap); {Ef: Input ELEME { HÉTFP, KEDD, SZERDA } Uf: Input= HÉTFP x=hetfo ES } Procedure Ki(Const x:tnap); { Uf: x.felskod=hetfo Output= HÉTFP ES } Function HibasE(Var x:tnap):boolean; Implementation Type TNapS=Array [1..7] of String[9]; Const NapS:TNapS=( HÉTFP, KEDD, SZERDA, CSÜTÖRTÖK, PÉNTEK, SZOMBAT, VASÁRNAP ); 14
15 Procedure Min(Var minki:tnap); { Uf: minki=tnap(hetfo,hamis)} minki.felskod:=hetfo; minki.hiba:=false Function Szamossag:Word; { Uf: Szamossag=7} Szamossag:=7 Procedure Kovetkezo(Var x:tnap; Var kovetkezoki:tnap); {Ef: x.felskod<>vasarnap Uf: x.felskod=hetfo KovetkezoKi.felsKod=Kedd ES} With x do {Ef-ellenrzés:} If felskod<>vasarnap then hiba:=true; Exit {m:velet-törzs:} KovetkezoKi.felsKod:=Succ(felsKod) Function HibasE(Var x:tnap):boolean; HibasE:=x.hiba; x.hiba:=false End. Megjegyzések: Sajnálatos módon a sajátos Pascal logika miatt olyanok is belekerülnek az Interface részbe, amelyeket ténylegesen nem szeretnénk exportálni. (TNapK, TNap bels struktúrája ) A TNap típus felhasználását a következ példa mutatja. Példa: Program AProgram; Uses,TNapUnit,.; Var tegnap,ma,holnap:tnap; 15
16 Repeat Write( Milyen nap van ma?: ); Be(ma); Until not HibasE(ma); Writeln( Holnap: ); Kovetkezo(ma,holnap); Ki(holnap); End. Egy más elv megoldást is találhatunk, ami azonban nem a modulból, hanem az exportmodulból indul ki. Ötlete a következ: a napok absztrakt felsorolását egészítsük ki egy további, pl. NemDef-fel elkeresztelt értékkel. Az elbbi TNapK és TNap kettse helyett ábrázoljuk így: Típus TNapK=(Hétf, Kedd, Szerda, Csütörtök, Péntek, Szombat, Vasárnap, NemDef) Változó érték:tnapk Ekkor egyszer értéktípusúak lesznek az eleddig rekord-típusú értéket szolgáltató függvények. Pl.: Függvény Következ(Változó x:tnap):tnap Ef: x Vasárnap Uf: x=hétf Következ(x)=Kedd Ha érték=vasárnap akkor x:=nemdef különben Következ:=Következ(érték) Függvény vége. Így a Pascal-megfeleltetés úgyszólván problémamentes: Unit TNapUnit;{InputParaméterek} Interface Type TNapK=(Hetfo,Kedd,Szerda,Csutortok, Pentek,Szombat,Vasarnap, NemDef); {a TNap=Record ertek:tnapk End helyett:} TNap=TNapK; Function Kovetkezo(Var x:tnap):tnap; Implementation Function Kovetkezo(Var x:tnap):tnap; {Ef: x<>vasarnap Uf: x=hetfo Kovetkezo(x)=Kedd ES } If x=vasarnap then x:=nemdef else Kovetkezo:=Succ(x) Megjegyzés [SzP3]: Ez a TNapK nem pedig az éppen definiálandó TNap Következ mvelete. 16
17 2.2. Kódtöredék automatikus beillesztése A unitok nyilvánvaló hátrányát igyekszik kiküszöbölni az állomány automatikus beillesztés lehetsége. A lényeg: a Pascal fordítóprogramot rávesszük, hogy a kódtöredéket tartalmazó file-t a befoglaló program adott pontján illessze be. Ennek módja: {$i töredék-filenév} direktíva az adott helyen. Példa: Legyen az alábbi töredék a TNap.inc nev file-ban: {TNap InputParaméterek ha lennének. Most nincs. } Type TNapK=(Hetfo,Kedd,Szerda,Csutortok, Pentek,Szombat,Vasarnap); TNap=Record felskod:tnapk; hiba:boolean TNapS=Array [1..7] of String[9]; Const NapS:TNapS=( HÉTFP, KEDD, SZERDA, CSÜTÖRTÖK, PÉNTEK, SZOMBAT, VASÁRNAP ); Procedure Kovetkezo(Var x:tnap; Var kovetkezoki:tnap); {Ef: x.felskod<>vasarnap Uf: x.felskod=hetfo KovetkezoKi.felsKod=Kedd ES} With x do {Ef-ellenrzés:} If felskod<>vasarnap then hiba:=true; Exit {m:velet-törzs:} KovetkezoKi.felsKod:=Succ(felsKod) A felhasználás: Program AProgram; Uses ; {$i TNap.inc a TNap típus beillesztése} Var tegnap,ma,holnap:tnap; 17
18 End. Megjegyzés: A fenti példából sajnos nem látszik a leglényegesebb különbség: a kvázi paraméterezhetség. A késbbiek során azonban számos példa lesz a unit paraméter-problémájára Objektum-osztály Objektum, helyesebben objektum-osztály fogalma számunkra azzal az elnnyel jár, hogy a programon belül megvalósíthatjuk a megfelel típusfogalmat, azaz az értékhalmaz és mvelethalmaz egységét, egységbezárását (encapsulation). 3 A szintaxisáról elegend ennyit tudni: Type TipusNev=Object {mez-deklarációk, amit itt az objektum attribútumainak vagy tulajdonságainak hívnak} {a típus mveleteinek, metódusainak fejsorai következnek:} Constructor EljC(); {elhagyható} Destructor EljD(); {elhagyható} Procedure Elj1(); Function Fv1():TFv1; {a típus mveleteinek kifejtése:} Constructor TipusNev.EljC(); Destructor TipusNev.EljD(); Procedure TipusNev.Elj1(); 3 Persze elismerjük, hogy ennél jóval több újdonságot rejt az objektumok fogalma, számunkra most ennyi pontosan elegend. 18
19 Function TipusNev.Fv1():TFv1; Var a,b,c:tipusnev; a.eljc(); {az a objektum konstruktorának hívása a létrehozás kedvéért} a.elj1(); {az a objektum Elj1 mveletének hívása } Megjegyzések: Az objektum-osztály (értsd: objektum-típus) definíciójában felhasználható minden korábban definiált típus, így akár paraméterezhet0 is. Semmi akadálya annak, hogy az osztály definícióját külön include-állományba kiemeljük, s ezzel biztosítsuk a könny újrafelhasználást (reuseability). Példa: Legyen a töredék az alábbi, ONap.inc nev file-ban: {Osztály ONap 4 } InputParaméterek ha lennének. Most nincs ilyen. Type TNapK=(Hetfo,Kedd,Szerda,Csutortok, Pentek,Szombat,Vasarnap); TNapS=Array [1..7] of String[9]; Const NapS:TNapS=( HÉTFP, KEDD, SZERDA, CSÜTÖRTÖK, PÉNTEK, SZOMBAT, VASÁRNAP ); Type ONap=Object felskod:tnapk; hiba:boolean; Procedure Min(Var minki:onap); Procedure Max(Var maxki:onap); Function Szamossag:Word; Procedure Kovetkezo(Var x:onapkovetkezoki:onap); Procedure Elozo(Var x:onap)elozoki:onap); Function Sorszam(Const x:onap):word; 4 Az O a T helyett utalás, hogy Objektum-Osztály -ról van szó. Csak helyi konvenció! 19
20 Procedure ONap(Var x:word):onap; Procedure Be(Var x:word); Procedure Ki(Const x:word); Function HibasE(Var x:onap):boolean; Procedure ONap.Min(Var minki:onap); { Uf: minki=onap(hetfo,hamis)} minki.felskod:=hetfo; minki.hiba:=false Function ONap.Szamossag:Word; { Uf: Szamossag=7} Szamossag:=7 Procedure ONap.Kovetkezo(Var kovetkezoki:onap); {Ef: felskod<>vasarnap Uf: felskod=hetfo KovetkezoKi.felsKod=Kedd ES} {Ef-ellenrzés:} If felskod<>vasarnap then hiba:=true; Exit {m:velet-törzs:} kovetkezoki.felskod:=succ(felskod) A felhasználás: Program AProgram; Uses ; {$i ONap.inc az ONap osztály beillesztése} Var tegnap,ma,holnap:onap; Repeat Write( Milyen nap van ma?: ); ma.be; Until not ma.hibase; Writeln( Holnap: ); ma.kovetkezo(holnap); holnap.ki; End. 20
21 TARTALOM ProgramozásMódszertan 2. eladás 2005 (vázlat) A modul mint a típusmegvalósítás kerete Mi a típus?...1 Amit már tudunk statikus kellékek...1 Miket kell megadni ahhoz, hogy mondhassuk: a típust teljesen ismerjük?...1 Mit értünk a típus megvalósítása alatt? A típus algebrai specifikációjáról A modul A modulfogalom és a Pascal nyelv Unit Kódtöredék automatikus beillesztése Objektum-osztály...18 Tartalom
Programozási tételek általánosítása 2. Szlávi Péter 2015
Programozási tételek általánosítása 2. Szlávi Péter szlavip@elte.hu 2015 Tartalom 1. Az általánosítás lehetőségei a) Sorozatok A Tömb-típuskonstrukcó b) Sorozatok A tömb indexmentesítése c) A Tulajdonság-függvények
Algoritmizálás és adatmodellezés tanítása 1. előadás
Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az
Algoritmizálás + kódolás C++ nyelven és Pascalban
Algoritmizálás + kódolás nyelven és ban Motiváció A Programozási alapismeretek tárgyban az algoritmizáláshoz struktogramot, a kódoláshoz nyelvet használunk, a Közismereti informatikában (a közoktatásban
Adatszerkezetek I. 1. előadás
Adatszerkezetek I. 1. előadás Adatok jellemzői ismétlés 1. Azonosító Az a jelsorozat, amellyel hivatkozhatunk a tartalmára, amely által módosíthatjuk tartalmát. 2. Hozzáférési jog Adatokat módosítani,
A feladat címe, rövid emlékeztetje
A feladat címe, rövid emlékeztetje A szerz neve és drótposta-címe Tartalom I. Felhasználói dokumentáció... 3 1. A feladat... 3 2. Futási környezet... 3 2.1. Hardver... 3 2.2. Operációs rendszer... 3 3.
NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM
NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM 0. A feladat... 2 1. Az Egész számok ábrázolásai... 2 2. A műveletek szignatúrája... 3 3. A keretprogram... 4 4. Technikai tanácsok... 7 5. Elegancianövelő lehetőségek
Programozási nyelvek a közoktatásban alapfogalmak II. előadás
Programozási nyelvek a közoktatásban alapfogalmak II. előadás Szintaxis, szemantika BNF szintaxisgráf absztrakt értelmező axiomatikus (elő- és utófeltétel) Pap Gáborné. Szlávi Péter, Zsakó László: Programozási
Programozási nyelvek (ADA)
Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 1. előadás Hasznos weboldal http://kto.web.elte.hu Program felépítése Programegységek (program unit) eljárások (procedure)
A feladat. A főprogram
A feladat A magyar kártya típusának megvalósítása. Tisztázandók: 1. Milyen műveletek értelmesek a típussal kapcsolatosan? 2. Hogyan ábrázolható a típus? 3. Miként valósíthatók meg a műveletek figyelembe
ADATSZERKEZETEK TANTÁRGY, 1. FÉLÉV 2. ELŐADÁS 2009 (VÁZLAT)
ADATSZERKEZETEK TANTÁRGY, 1. FÉLÉV 2. ELŐADÁS 2009 (VÁZLAT) 1. MODULTESZT Azt vizsgáljuk, miként lehetne meggyőződni egy típus megvalósításának helyességéről. Erre ugyan van mód formális, matematikai eszközökkel,
S0-02 Típusmodellek (Programozás elmélet)
S0-02 Típusmodellek (Programozás elmélet) Tartalom 1. Absztrakt adattípus 2. Adattípus specifikációja 3. Adattípus osztály 4. Paraméterátadás 5. Reprezentációs függvény 6. Öröklődés és polimorfizmus 7.
Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r
Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. március 3. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja Miért
Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék
Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma
A C programozási nyelv I. Bevezetés
A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,
A C programozási nyelv I. Bevezetés
A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,
OOP. Alapelvek Elek Tibor
OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós
Algoritmizálás és adatmodellezés tanítása 4. előadás
Algoritmizálás és adatmodellezés tanítása 4. előadás Típusok osztályozása Összetettség (strukturáltság) szempontjából: skalár (más szóval elemi vagy strukturálatlan) összetett (más szóval strukturált)
Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása
Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző
FUNKCIONÁLIS PROGRAMOZÁS
FUNKCIONÁLIS PROGRAMOZÁS A funkcionális programozás néhány jellemzője Funkcionális programozás 1-2 Funkcionális, más néven applikatív programozás Funkcionális = függvényalapú, függvényközpontú Applikatív
C++ programozási nyelv Konstruktorok-destruktorok
C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
Feltételezés: A file strukturálisan helyes, tanszékenként nem üres, de az adott listázási feladatban kikötött számút nem haladja meg.
Program Osszegfokozatok;KERET Feladat: Az alábbi szerkezet file beolvasása és kilistázása úgy, hogy közben a megfelel$ "struktúraváltásokkor" ki kell egészíteni az ún. összegfokozat rekorddal. Összegfokozat
Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)
Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok
Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)
Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből
Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r
Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. október 11. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja
C++ programozási nyelv
C++ programozási nyelv Gyakorlat - 13. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. december A C++ programozási nyelv Soós Sándor 1/10 Tartalomjegyzék Objektumok
Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája
Adatszerkezetek Összetett adattípus Meghatározói: A felvehető értékek halmaza Az értékhalmaz struktúrája Az ábrázolás módja Műveletei Adatszerkezet fogalma Direkt szorzat Minden eleme a T i halmazokból
Java II. I A Java programozási nyelv alapelemei
Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak
Java II. I A Java programozási nyelv alapelemei
Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve
Lista típuskonstrukció
Lista típuskonstrukció Szlávi PéterP ELTE Informatika Szakmódszertani Csoport szlavi@ludens.elte.hu http://izzo.inf.elte.hu/~szlavi Copyright, 1999 Szlávi Péter Tartalomjegyzék 1 A lista algebrai specifikációja
és az instanceof operátor
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1
Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1 Készítette: Gipsz Jakab Neptun-azonosító: ABC123 E-mail: gipszjakab@seholse.hu Kurzuskód: IT-13AAT1EG 1 A fenti
C programozás. 6 óra Függvények, függvényszerű makrók, globális és
C programozás 6 óra Függvények, függvényszerű makrók, globális és lokális változók 1.Azonosítók A program bizonyos összetevőire névvel (azonosító) hivatkozunk Első karakter: _ vagy betű (csak ez lehet,
A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok
A szemantikus elemzés helye Forrásprogram Forrás-kezelő (source handler) Lexikális elemző (scanner) A szemantikus elemzés feladatai Fordítóprogramok előadás (A, C, T szakirány) Szintaktikus elemző (parser)
Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)
Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben) Felhasználói dokumentáció Feladat: Adjuk meg két N elemű vektor skalárszorzatát! Skalárszorzat : X, Y : N i 1 x i * y i Környezet: IBM
ALAPFOGALMAK 1. A reláció az program programfüggvénye, ha. Azt mondjuk, hogy az feladat szigorúbb, mint az feladat, ha
ALAPFOGALMAK 1 Á l l a p o t t é r Legyen I egy véges halmaz és legyenek A i, i I tetszőleges véges vagy megszámlálható, nem üres halmazok Ekkor az A= A i halmazt állapottérnek, az A i halmazokat pedig
Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez
Pásztor Attila Algoritmizálás és programozás tankönyv az emeltszintű érettségihez 3. ADATTÍPUSOK...26 3.1. AZ ADATOK LEGFONTOSABB JELLEMZŐI:...26 3.2. ELEMI ADATTÍPUSOK...27 3.3. ÖSSZETETT ADATTÍPUSOK...28
Kifejezések. Kozsik Tamás. December 11, 2016
Kifejezések Kozsik Tamás December 11, 2016 Kifejezés versus utasítás C/C++: kifejezés plusz pontosvessző: utasítás kiértékeli a kifejezést jellemzően: mellékhatása is van például: értékadás Ada: n = 5;
GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok
GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és Függvénysablonok Gyakorlatorientált szoftverfejlesztés C++ nyelven Visual Studio Community fejlesztőkörnyezetben
Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010
Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010 Előadás tematika 1. Pascal ismétlés, kiegészítések 2. Objektum orientált programozás (OOP) 3. Delphi környezet 4. Komponensek bemutatása
Programozás alapjai. 7. előadás
7. előadás Wagner György Általános Informatikai Tanszék Jótanács (1) Tipikus hiba a feladat elkészítésekor: Jótanács (2) Szintén tipikus hiba: a file-ból való törléskor, illetve a file-nak új elemmel való
5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E
5. SOR A sor adatszerkezet is ismerős a mindennapokból, például a várakozási sornak számos előfordulásával van dolgunk, akár emberekről akár tárgyakról (pl. munkadarabokról) legyen szó. A sor adattípus
A programozás alapjai 1 Rekurzió
A programozás alapjai Rekurzió. előadás Híradástechnikai Tanszék - preorder (gyökér bal gyerek jobb gyerek) mentés - visszaállítás - inorder (bal gyerek gyökér jobb gyerek) rendezés 4 5 6 4 6 7 5 7 - posztorder
Már megismert fogalmak áttekintése
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak
A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin
1 A PROGRAMOZÁS ALAPJAI 3 Készítette: Vénné Meskó Katalin Információk 2 Elérhetőség meskokatalin@tfkkefohu Fogadóóra: szerda 10:45-11:30 Számonkérés Időpontok Dec 19 9:00, Jan 05 9:00, Jan 18 9:00 egy
1. Egyszerű (primitív) típusok. 2. Referencia típusok
II. A Java nyelv eszközei 1. Milyen eszközöket nyújt a Java a programozóknak Korábban már említettük, hogy a Java a C nyelvből alakult ki, ezért a C, C++ nyelvben járatos programozóknak nem fog nehézséget
Az Összegfokozatos listázás téma 2. gyakorlata
Feladat: Az Összegfokozatos listázás téma 2. gyakorlata Az alábbi szerkezetű file beolvasása és kilistázása 1. lapozottan "józanésszel", 2. úgy, hogy a típusfinomítással komolyabban élünk (azaz ne használjuk
Adatszerkezetek és algoritmusok
2009. november 13. Ismétlés El z órai anyagok áttekintése Ismétlés Specikáció Típusok, kifejezések, m veletek, adatok ábrázolása, típusabsztakció Vezérlési szerkezetek Függvények, paraméterátadás, rekurziók
... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.
Párhuzamos programok Legyen S parbegin S 1... S n parend; program. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak. Folyamat
Bevezetés a programozásba Előadás: A const
Bevezetés a programozásba 2 6. Előadás: A const ISMÉTLÉS Interface - Implementation struct Particle { int x,y; unsigned char r,g,b; void rajzol(); }; }; void Particle::rajzol() { gout
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"
Programozás II. 2. Dr. Iványi Péter
Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c
A C programozási nyelv II. Utasítások. A függvény.
A C programozási nyelv II. Utasítások. A függvény. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv II (Utasítások, fuggvények) CBEV2 / 1 Kifejezés utasítás Kifejezés utasítás, blokk
Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum
Bevezetés a programozásba 2 1. Előadás: Tagfüggvények, osztály, objektum Ismétlés int main() { string s; s; s= bla ; cout
Elsőrendű logika szintaktikája és szemantikája. Logika (3. gyakorlat) 0-adrendű szemantika 2009/10 II. félév 1 / 1
Elsőrendű logika szintaktikája és szemantikája Logika és számításelmélet, 3. gyakorlat 2009/10 II. félév Logika (3. gyakorlat) 0-adrendű szemantika 2009/10 II. félév 1 / 1 Az elsőrendű logika Elemek egy
Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r
Programozás I. Széchenyi István Egyetem, Gy r 2014. november 16. Áttekintés kel kapcsolatos fogalmak deklaráció Több, kompatibilis változat is elképzelhet. Meg kell el znie a fv. hívását. Mindenképp rögzíti
Programozás alapjai. 10. előadás
10. előadás Wagner György Általános Informatikai Tanszék Pointerek, dinamikus memóriakezelés A PC-s Pascal (is) az IBM PC memóriáját 4 fő részre osztja: kódszegmens adatszegmens stackszegmens heap Alapja:
Bánsághi Anna 2014 Bánsághi Anna 1 of 33
IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33 TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív
Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1
Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1 Készítette: Gipsz Jakab Neptun-azonosító: ABC123 E-mail: gipszjakab@seholse.hu Kurzuskód: IT-13AAT1EG Gyakorlatvezető
Logika es sz am ıt aselm elet I. r esz Logika Negyedik el oad as 1/26
1/26 Logika és számításelmélet I. rész Logika Negyedik előadás Tartalom 2/26 Az elsőrendű logika szemantikája Formulák és formulahalmazok szemantikus tulajdonságai Elsőrendű logikai nyelv interpretációja
Programozási alapismeretek 3. előadás
Programozási alapismeretek 3. előadás Tartalom Ciklusok specifikáció+ algoritmika +kódolás Egy bevezető példa a tömbhöz A tömb Elágazás helyett tömb Konstans tömbök 2/42 Ciklusok Feladat: Határozzuk meg
Java programozási nyelv 4. rész Osztályok II.
Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék
2. Visszalépéses stratégia
2. Visszalépéses stratégia A visszalépéses keres rendszer olyan KR, amely globális munkaterülete: út a startcsúcsból az aktuális csúcsba (ezen kívül a még ki nem próbált élek nyilvántartása) keresés szabályai:
Programozás C és C++ -ban
Programozás C és C++ -ban 2. További különbségek a C és C++ között 2.1 Igaz és hamis A C++ programozási nyelv a C-hez hasonlóan definiál néhány alap adattípust: char int float double Ugyanakkor egy új
Kifejezések. Kozsik Tamás. December 11, 2016
Kifejezések Kozsik Tamás December 11, 2016 Kifejezések Lexika Szintaktika Szemantika Lexika azonosítók (változó-, metódus-, típus- és csomagnevek) literálok operátorok, pl. + zárójelek: (), [], {},
PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar
PROGRAMOZÁS tantárgy Gregorics Tibor egyetemi docens ELTE Informatikai Kar Követelmények A,C,E szakirány B szakirány Előfeltétel Prog. alapismeret Prog. alapismeret Diszkrét matematika I. Óraszám 2 ea
Kiterjesztések sek szemantikája
Kiterjesztések sek szemantikája Példa D Integer = {..., -1,0,1,... }; D Boolean = { true, false } D T1... T n T = D T 1... D Tn D T Az összes függvf ggvény halmaza, amelyek a D T1,..., D Tn halmazokból
Bevezetés a programozásba. 9. Előadás: Rekordok
Bevezetés a programozásba 9. Előadás: Rekordok ISMÉTLÉS Függvényhívás #include #include #include #include using using namespace namespace std; std; double double terulet(double
Algoritmusok helyességének bizonyítása. A Floyd-módszer
Algoritmusok helyességének bizonyítása A Floyd-módszer Algoritmusok végrehajtása Egy A algoritmus esetében a változókat három változótípusról beszélhetünk, melyeket az X, Y és Z vektorokba csoportosítjuk
Java III. I I. Osztálydefiníció (Bevezetés)
Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban
Programozás II. 4. Dr. Iványi Péter
Programozás II. 4. Dr. Iványi Péter 1 inline függvények Bizonyos függvények annyira rövidek, hogy nem biztos hogy a fordító függvényhívást fordít, hanem inkább az adott sorba beilleszti a kódot. #include
Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter
Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot
Hardver leíró nyelvek (HDL)
Hardver leíró nyelvek (HDL) Benesóczky Zoltán 2004 A jegyzetet a szerzıi jog védi. Azt a BME hallgatói használhatják, nyomtathatják tanulás céljából. Minden egyéb felhasználáshoz a szerzı belegyezése szükséges.
Java programozási nyelv
Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék
Gregorics Tibor Tanácsok modularizált programok készítéséhez 1
Gregorics Tibor Tanácsok modularizált programok készítéséhez 1 Modularizált programon azt értjük, amely több, jól körülhatárolható részfeladat megoldásaiból épül fel. Egy-egy részfeladat gyakran szabványos
Interfészek. PPT 2007/2008 tavasz.
Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált
Programozási alapismeretek 1. előadás
Programozási alapismeretek 1. előadás Tartalom A problémamegoldás lépései programkészítés folyamata A specifikáció Az algoritmus Algoritmikus nyelvek struktogram A kódolás a fejlesztői környezet 2/33 A
sallang avagy Fordítótervezés dióhéjban Sallai Gyula
sallang avagy Fordítótervezés dióhéjban Sallai Gyula Az előadás egy kis példaprogramon keresztül mutatja be fordítók belső lelki világát De mit is jelent, az hogy fordítóprogram? Mit csinál egy fordító?
Csima Judit október 24.
Adatbáziskezelés Funkcionális függőségek Csima Judit BME, VIK, Számítástudományi és Információelméleti Tanszék 2018. október 24. Csima Judit Adatbáziskezelés Funkcionális függőségek 1 / 1 Relációs sémák
9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.
Programozási tételek Programozási feladatok megoldásakor a top-down (strukturált) programtervezés esetén három vezérlési szerkezetet használunk: - szekvencia - elágazás - ciklus Eddig megismertük az alábbi
tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is
A tétel (record) tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is A tétel elemei mezők. Például tétel: személy elemei: név, lakcím, születési
Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:
Java V. szint lyszintű ű tagok A final minősítő Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 05. Java V.: szintű tagok JAVA5 / 1 Példányváltozó Az eddig megismert adattagokból
Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás
Kódgenerálás Memóriagazdálkodás Kódgenerálás program prológus és epilógus értékadások fordítása kifejezések fordítása vezérlési szerkezetek fordítása Kódoptimalizálás L ATG E > TE' E' > + @StPushAX T @StPopBX
A C programozási nyelv IV. Deklaráció és definíció
A C programozási nyelv IV. Deklaráció és definíció Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv IV. (Deklaráció és definíció) CBEV4 / 1 Definíció és deklaráció Definíció: meghatározza
Programozás alapjai. 5. előadás
5. előadás Wagner György Általános Informatikai Tanszék Cserélve kiválasztásos rendezés (1) A minimum-maximum keresés elvére épül. Ismétlés: minimum keresés A halmazból egy tetszőleges elemet kinevezünk
Java III. I I. Osztálydefiníció (Bevezetés)
Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban
Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe
Mechatronika és mikroszámítógépek 2017/2018 I. félév Bevezetés a C nyelvbe A C programozási nyelv A C egy általános célú programozási nyelv, melyet Dennis Ritchie fejlesztett ki Ken Thompson segítségével
Alprogramok, paraméterátadás
ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék October 24, 2016 Programozási nyelvek Alprogramok Függvények, eljárások Metódusok Korutinok stb. Alprogramok Alprogram: olyan nyelvi
OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1
OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Különféle élőlények egy túlélési versenyen vesznek részt. A lények egy pályán haladnak végig, ahol váltakozó terep viszonyok vannak.
kész OraHalmazProgram.exe programot a OraHalmaz_Keret.zip kicsomagolása után!
Feladat A kurzusra járókról tudjuk, hogy kinek mikor van elfoglaltsága. Válaszoljunk az alábbi kérdésekre: 1. Mikorra szervezhető konzultáció, azaz mikor van mindannyiuknak szabadideje? 2. Mely napokon
KOVÁCS BÉLA, MATEMATIKA I.
KOVÁCS BÉLA, MATEmATIkA I. 4 IV. FÜGGVÉNYEk 1. LEkÉPEZÉSEk, függvények Definíció Legyen és két halmaz. Egy függvény -ből -ba egy olyan szabály, amely minden elemhez pontosan egy elemet rendel hozzá. Az
Az első fájlos program
Az első fájlos program Tartalom Az első fájlos program... 1 1. Első lépés... 2 1.1. A feladat... 2 1.2. Specifikáció... 2 1.3. Algoritmus... 3 1.4. Kód... 4 2. Második lépés... 7 2.1. A feladat... 7 2.2.
Objektumok inicializálása
Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú
Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok
Bevezetés a programozásba II 5. Előadás: Másoló konstruktor, túlterhelés, operátorok Emlékeztető struct Vektor { int meret, *mut; Vektor(int meret); int szamlal(int mit); }; int Vektor::szamlal(int mit)
Osztálytervezés és implementációs ajánlások
Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv
Osztálytervezés és implementációs ajánlások
Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv
2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1
2. Rekurzió Egy objektum definícióját rekurzívnak nevezünk, ha a definíció tartalmazza a definiálandó objektumot. Egy P eljárást (vagy függvényt) rekurzívnak nevezünk, ha P utasításrészében előfordul magának
Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása
Pázmány Péter Katolikus Egyetem Információs Technológiai Kar Bevezetés a programozásba I 10. gyakorlat C++: alprogramok deklarációja és paraméterátadása 2011.11.22. Giachetta Roberto groberto@inf.elte.hu
Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)
Programozás alapjai C nyelv 8. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.07. -1- Mutatók és címek (ism.) Minden változó és függvény
Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;
Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely