1 / 42

A programozási nyelvek fejlődése

A programozási nyelvek fejlődése. Hernyák Zoltán Web: http://dragon.ektf.hu/aroan , E-Mail: aroan@aries.ektf.hu Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz http://aries.ektf.hu. 1. A programozási nyelvek fejlődése. A jó programozási nyelv:

Download Presentation

A programozási nyelvek fejlődése

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. A programozási nyelvek fejlődése Hernyák Zoltán Web: http://dragon.ektf.hu/aroan, E-Mail: aroan@aries.ektf.hu Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz http://aries.ektf.hu 1

  2. A programozási nyelvek fejlődése • 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ó 2

  3. A programozási nyelvek fejlődése • 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 3

  4. A programozási nyelvek fejlődése Példa: Mem.cím Gépi kódú utasítás Assembly utasítás 4

  5. A programozási nyelvek fejlődése • 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ő 5

  6. A programozási nyelvek fejlődése • 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!” 6

  7. A programozási nyelvek fejlődése • 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 7

  8. A programozási nyelvek fejlődése • 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ő 8

  9. A programozási nyelvek fejlődése Példa: Mem.cím Gépi kódú utasítás Assembly utasítás 9

  10. A programozási nyelvek fejlődése Ú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 10

  11. A programozási nyelvek fejlődése Ú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) 11

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

  13. A programozási nyelvek fejlődése 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_SUGAR 5420 Y_SUGAR 5422 add ax,[X_SUGAR] 13

  14. A programozási nyelvek fejlődése 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 14

  15. A programozási nyelvek fejlődése 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 WORD X_SUGAR WORD Y_SUGAR add ax,[X_SUGAR] 15

  16. A programozási nyelvek fejlődése 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 16

  17. A programozási nyelvek fejlődése 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 17

  18. A programozási nyelvek fejlődése 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 jnz @Ciklus_ujra 18

  19. A programozási nyelvek fejlődése 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) call @kiiras 19

  20. A programozási nyelvek fejlődése 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 20

  21. A programozási nyelvek fejlődése 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 21

  22. A programozási nyelvek fejlődése 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ő 22

  23. A programozási nyelvek fejlődése 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 23

  24. A programozási nyelvek fejlődése • 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!” 24

  25. A programozási nyelvek fejlődése 3. gen: Eljárásorientált nyelvek Elvi, szemléletbeli váltás történt ! • Rögzített paraméterátadási 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! 25

  26. A programozási nyelvek fejlődése 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) 26

  27. A programozási nyelvek fejlődése 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 27

  28. A programozási nyelvek fejlődése 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 28

  29. A programozási nyelvek fejlődése 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 29

  30. A programozási nyelvek fejlődése 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ő 30

  31. A programozási nyelvek fejlődése 3. gen: Objektum-orientált nyelvek Elvi, szemléletbeli váltás történt ! • 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” 31

  32. A programozási nyelvek fejlődése 4. gen: Speciális nyelvek • 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 32

  33. A programozási nyelvek fejlődése 5. gen: Mesterséges Intelligencia • Nem készült el (készítése folyamatban) • Speciális processzor érti meg csak 33

  34. A programozási nyelvek fejlődése Programozási nyelvek csoportosítása • 1. Imperatív (procedurális) nyelvek • 2. Applikatív (funkcionális) nyelvek • 3. Szabály alapú (logikai) nyelvek • 4. Objektumorientált nyelvek 34

  35. A programozási nyelvek fejlődése Imperatív nyelvek • É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 35

  36. A programozási nyelvek fejlődése Funkcionális nyelvek • 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 36

  37. A programozási nyelvek fejlődése Logikai nyelvek • 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 37

  38. A programozási nyelvek fejlődése Objektum-orientált nyelvek • 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 38

  39. A programozási nyelvek fejlődése Objektum-orientált nyelvek • 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)) 39

  40. A programozási nyelvek fejlődése Objektum-orientált nyelvek • 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… 40

  41. A programozási nyelvek fejlődése Objektum-orientált nyelvek • 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++ 41

  42. A programozási nyelvek fejlődése Objektum-orientált nyelvek • 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 42

More Related