Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.

Hasonló előadás


Az előadások a következő témára: "1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy."— Előadás másolata:

1 1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz

2 2 A jó programozási nyelv:  Könnyen elsajátítható alapelvek  Áttekinthető leírás  Könnyen módosítható kód  Nehéz hibát elkövetni benne  Könnyen dokumentálható

3 3 1.gen.: Gépi kódú programozási nyelv  Egyetlen „jó” jellemzővel sem bír  A kód számok sorozata  Egy „szám” egy utasítás  Relatíve sok utasítás  Nincs változónév  Nincs eljárásnév  Nincs ciklus  Memóriacímekre hivatkozás számkóddal

4 4 Példa: Mem.cím Gépi kódú utasítás Assembly utasítás

5 5 Egyéb problémák:  A számkódokat a memóriába kell juttatni  Ha másik memóriaterületre tesszük, az gondot okozhat  A gépi kód processzorfüggő

6 6 Előnye:  Maximális futási sebesség  Elvileg minimális memóriamennyiség- felhasználás  A mikroprocesszor és az egyéb hardware elemek képességeinek maximális kihasználhatósága „Amit nem lehet megírni gépi kódban, azt nem lehet megírni!”

7 7 2. gen.: Assembly programozási nyelv  Néhány „jó” jellemzővel bír  Az utasításokat betűkombinációk jelölik (mnemonikok)  Pl: „MOV” == „move” == „mozgatás”  Egy ilyen mnemonik egy gépi kódú utasításnak felel meg  Sokkal könnyebb megjegyezni a nyelvet

8 8  Sokkal nehezebb hibázni  Az elgépelés észrevehető („MUV” utasítás nincs:)  A program ezen formája olvashatóbb  Könnyebben módosítható  Könnyebben megérhető

9 9 Példa: Mem.cím Gépi kódú utasítás Assembly utasítás

10 10 Új fogalmak:  Forráskód (source code): a program szöveges formájú leírása  Tárgykód (object code): a program gépi kódra fordított formája  Fordítóprogram (compiler): amely a transzformációt elvégzi

11 11 Új fogalmak:  Fordítás (compiling): a folyamat, melynek során a fordító program a forráskódból előállítja a tárgykódot  De-compiler: a tárgykódból visszaállítja a forráskódot (veszteséges)

12 12 Elkezdődött a fordítóprogram intelligenciájának fejlődése!

13 13 Változó fogalmának primitív változata :  Memóriacímnek azonosító adományozása  A forráskódban ezen azonosítók használhatók  Növeli az olvashatóságot  Csak egy helyen kellett módosítani a forráskódot ha a memóriaterület címe változott X_SUGAR5420 Y_SUGAR5422 add ax,[X_SUGAR]

14 14 Ami hiányzik:  Nincs típusfogalom  Az azonosító inkább „konstans” szerepét töltötte be  A memóriacímek meghatározása a programozó feladata  A memóriaterületek átlapolhatóak voltak, illetve „lyukak” lehettek közöttük

15 15 Fejlődés:  Az azonosítóhoz primitív „típusnév” csatlakozik  Ez egyetlen szerepet töltött be: meghatározta a memóriaigényt  Így lehetőség nyílt az azonosítókhoz tartozó memóriacímek automatikus kiosztásához, egy kezdőcímhez (base address) viszonyítva folytatólagosan WORDX_SUGAR WORD Y_SUGAR add ax,[X_SUGAR]

16 16 Még mindig hiányzik:  A változó helyes kezelésének ellenőrzése  Pl: egy négybájtos területet lehetett kétbájtosként, egybájtosként is kezelni  Nincs különbség a „bool”, „char”, „signed short”, „signed long” között, mindegyik 1 byte memóriaigény  Élettartam  Hatáskör

17 17 Programozási stílus fejlődése:  Csak ugró utasítás létezett  Az ugrás kiszámítása relatív címekkel történik (pl. „ugorj vissza 16 byte-nyit, és folytasd onnan a programot”)  Van eljáráshívás. Megvalósítása ugorj … memóriacímre … térj vissza

18 18 Programozási stílus fejlődése:  Az ugró utasítások pontos helyét azonosítókkal jelölték meg: Ciklus_ujra: push ax mov ax,cx

19 19 Programozási stílus fejlődése:  A jól megválasztott azonosítónevek szintén növelik a forráskód olvashatóságát  Nehéz elrontani az ugrás helyének azonosítását (elgépelés valószínűleg hibás)  Az eljárások belépési pontját is azonosítónév jelöli (ez már majdnem ELJÁRÁSNÉV)

20 20 Több modulból álló projekt (1):  Lehetőség nyílik a forráskódok egyesítésére (#include)  A program „hosszú” kódját szét lehet tördelni apróbb, e miatt jobban kezelhető forráskód- részekre  A forráskód-darabokat a fordítóprogram egyesítette

21 21 Több modulból álló projekt (2):  A fordítás gyorsítása érdekében a forráskódrészek külön kerülnek lefordításra  Az apró tárgykódokat egyesíteni kell, és a kereszthivatkozások helyességét ellenőrizni Szerkesztő (linker) program Szerkesztés (linking) fázis A futtatható program előállítása egyre több, jól elkülöníthető fázisra bontható fel

22 22 Még mindig hiányzik:  Nincs tisztán eljárás, az eljárás „törzsébe” is közvetlenül be lehet ugorni  Egyetlen „eljárás” belsejében is tetszőleges módon lehet ugrálni előre-hátra  Az assembly nyelv is processzorfüggő

23 23 Még mindig hiányzik:  Nincs rögzített módszer  az eljárások paraméterátadására (több módszer is létezik)  Értékek (pl hibakód) visszaadására

24 24 Elkezdődött egy folyamat: általános célú rutinok megírásának igénye. Ez rohamosan csökkentette a fejlesztési sebességet!  Nem kell megírni  Nem kell tesztelni „Amit nem lehet megírni assemblyben, azt meg lehet írni gépi kódban. Amit nem lehet megírni gépi kódban, azt nem lehet megírni!”

25 25 3. gen: Eljárásorientált nyelvek Elvi, szemléletbeli váltás történt !  Rögzített paraméterátadás i technikák  Érték szerinti  Cím szerinti  Rögzített érték-visszaadási technika (függvények)  A formális és aktuális paraméterlista egyezőségének ellenőrzése!

26 26 Típusok:  Megjelentek a nyelvi alaptípusok (bool, char, int, float, …)  Megjelentek az egyszerűbben megvalósítható összetett típusok (tömb, rekord)  Saját típusok definiálhatóak  Típusátnevezés (név változtatása)  Meglévő típusok szűkítése (pl. résztartomány-típusok)

27 27 Típusok:  A változók típushoz rendelése (deklaráció)  Kifejezések írhatósága, típushelyességének ellenőrzése  Értékadás típushelyességének ellenőrzése  Paraméterek kezelése közbeni típushelyesség ellenőrzése

28 28 Programvezérlési szerkezetek:  Történelmi okokból megmaradt a „goto”  A három alapvető programvezérlési szerkezet  Szekvencia  Szelekció  Iteráció  Utasításblokkok kialakíthatósága

29 29 További előnyök:  Nem processzorfüggő  A fordítás menete lehetséges:  Először a 3. generációs forráskód átfordítása assembly forráskódra  Assembly nyelvre már létezik fordítóprogram  Ma már közvetlenül a gépi kód generálása a jellemzőbb

30 30 Korlátok:  Saját típus fejlesztése igazából nem lehetséges. Nincs lehetőség olyan „típus” kifejlesztésére, mely a nyelvbe olyan szinten beépül, mint a gyári típusok  Nincs lehetőség új operátorok fejlesztésére, a meglévőek jelentésének finomítására, a precedenciaszint megváltoztatására, stb…  A nyelv kevéssé fejleszthető

31 31  Annyi a hasonlóság a procedurális nyelvek között, hogy nem tekintik külön generációnak  A fordítóprogram intelligenciája, hibakiszúró képessége tovább fokozható  Saját típusok fejlesztése majdhogynem „korlátok nélkül” 3. gen: Objektum-orientált nyelvek Elvi, szemléletbeli váltás történt !

32 32  Speciális feladatkörre orientálódott (pl adatbáziskezelés, grafika, matematika, …)  Nagyon gyorsan elsajátítható, beszélt nyelvre (angol) emlékeztető szintaxis  Nem kifejezetten szakemberek számára tervezett 4. gen: Speciális nyelvek

33 33  Nem készült el (készítése folyamatban)  Speciális processzor érti meg csak 5. gen: Mesterséges Intelligencia

34 34  1. Imperatív (procedurális) nyelvek  2. Applikatív (funkcionális) nyelvek  3. Szabály alapú (logikai) nyelvek  4. Objektumorientált nyelvek Programozási nyelvek csoportosítása

35 35  Értékadó utasításokat használ ( a := b+c; )  Ezeket végrehajtva közelít a megoldáshoz  Az elágazások és ciklusok segítik, hogy melyik értékadó utasítást, hányszor kell végrehajtani  Erősen épít a változó fogalmára Imperatív nyelvek

36 36  Nincsenek benne változók, és e miatt értékadó utasítás  Függvények vannak benne, amelyeket ki kell értékelni  MINDEN függvény benne, még az is, ami nem látszik annak  A program egy nagy, bonyolult, összetett fv kiértékelését jelenti Funkcionális nyelvek

37 37  Formális logika és halmazelmélet szabályaira épül  Tényeket tárol (tudásbázis)  Kérdéseket lehet megfogalmazni benne  A kérdésekre a választ a beépített tények alapján a nyelv által használt módszer szerint megkeresi a választ Logikai nyelvek

38 38  Egymással kölcsönhatásban álló objektumok összessége  Minden objektumnak van interface, amely definiálja, hogy mit lehet az adott objektummal végezni, végeztetni  Az objektumok egymással egymás interface-in keresztül kommunikálnak Objektum-orientált nyelvek

39 39  Egy, az interface-beli tevékenység meghívását üzenet-nek hívjuk (‘azt üzenjük neked, hogy mentsd ki az adataidat’)  Egy tevékenységet általában többféle paraméterezéssel is el lehet érni (overloading)  Az objektumok hordozzák saját állapotukat (változókban (mezőkben)) Objektum-orientált nyelvek

40 40  Ha egy műveletet az adott objektum visszautasít, szabványos módon jelzi a hibát a hívónak (kivételkezelés)  stb… Objektum-orientált nyelvek

41 41  Az OOP nyelvek is imperatívak  Az alap szintaxis (értékadás, elágazás, ciklus, …) leírására nem találnak ki új nyelvet, hanem egy már meglévő nyelv szintaxisát használják fel: C -> C++ Objektum-orientált nyelvek

42 42  Hagyományos nyelv: nem ismeri az OOP fogalmakat sem  OOP támogató nyelv: a nyelv ismeri az OOP fogalmakat, de lehet benne hagyományos programokat is fejleszteni (vegyesen)  OOP nyelv: csak OOP szemléleten keresztül lehet benne fejleszteni Objektum-orientált nyelvek


Letölteni ppt "1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy."

Hasonló előadás


Google Hirdetések