Hernyák Zoltán Magasszintű Programozási Nyelvek I.

Slides:



Advertisements
Hasonló előadás
T ESZTELÉS. C ÉLJA Minél több hibát találjunk meg! Ahhoz, hogy az összes hibát fölfedezzük, kézenfekvőnek tűnik a programot az összes lehetséges bemenő.
Advertisements

„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
Weblap szerkesztés HTML oldal felépítése Nyitó tag Záró tag Nyitó tag Záró tag oldalfej tözs.
Hatékonyságvizsgálat, dokumentálás
Erőállóképesség mérése Találjanak teszteket az irodalomban
Humánkineziológia szak
3. A programozás eszközei, programozás-technikai alapismeretek
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Programozási nyelvek.
Bevezetés a Java programozásba
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Mutatók, tömbök, függvények
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
Java Típuskonverziók.
Fordítóprogramok FORD01 Programozó matematikus III. évf. Miskolci Egyetem 1 Fordítóprogramok 1 Programozó matematikus szak 2003/2004-es tanév II. félév.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
6. Előadás Merevítő rendszerek típusok, szerepük a tervezésben
Darupályák tervezésének alapjai
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
C nyelv utasításai.
A programozás alapjai A számítógép számára a feladat meghatá- rozását programozásnak nevezzük. Ha a processzor utasításait használjuk a feladat meghatározásához,
szakmérnök hallgatók számára
Programozási nyelvek, Pascal
Szintaktikai, szemantikai szabályok
1.4. Fordítás, szerkesztés, az objektumkönyvtár használata.
Programozási nyelvek.
Készítette: Csíki Gyula
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Hernyák Zoltán Programozási Nyelvek II.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Objektumorientált programozás
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Objektum orientált programozás
Virtuális Méréstechnika Sub-VI és grafikonok 1 Makan Gergely, Vadai Gergely v
Mérés és adatgyűjtés laboratóriumi gyakorlat - levelező Sub-VI és grafikonok 1 Mingesz Róbert V
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
Algoritmizálás, adatmodellezés
HEFOP 3.3.1–P /1.0A projekt az Európai Unió társfinanszírozásával, az Európa terv keretében valósul meg. 1 Számítógép architektúrák dr. Kovács.
Adatszerkezetek és algoritmusok 2008/ Algoritmus Az algoritmus szó eredete a középkori arab matematikáig nyúlik vissza, egy a i.sz. IX. században.
Informatikai gyakorlatok 11. évfolyam
kialakulása, fejlődése, generációk
Programok készítése és futtatása. Integrált fejlesztői környezet (IDE) tartalmaz:  szövegszerkesztőt a program forráskódjának szerkesztésére,  fordítóprogramot.
Programozási nyelvek csoportosítása.
kialakulása, fejlődése, generációk
Adatstruktúrák Algoritmusok Objektumok
Programozási nyelvek Programozási alapismeretek
Programozási alapok.
a programegységek között
Programozási nyelvek típusossága.
Compiler illetve interpreter nyelvek
Hernyák Zoltán Programozási Nyelvek II.
Beépített függvények használata programozáskor
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Algoritmus készítés.
Előadás másolata:

Hernyák Zoltán Magasszintű Programozási Nyelvek I. 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: 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

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

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

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

„Amit nem lehet megírni gépi kódban, 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 A Neumann elvű gépek memóriarekeszekben, és bennük tárolt értékekben gondolkodnak. De megjegyeznénk, hogy más ettől eltérő elvű programozási nyelvek is vannak, amelyek távolabbi absztrakciós szinten közelítik meg a probléma leírását, és megoldását. 34

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

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

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

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

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

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

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

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