2014/2015 v0.8
Célok Bemutatni a programozás alapvető fogalmait. Algoritmizálási képesség fejlesztése. Az eljárásorientált programozási módszer megtanulása. A Turbo Pascal programozási nyelv elsajátítása. Objektum orientált programozási elvek megismerése. 2
Témakörök Szoftverfejlesztés: Program, szoftver Elemzés, tervezés, kódolás, tesztelés, dokumentálás, karbantartás Algoritmizálás: Algoritmus Algoritmus leíró eszközök Programozási nyelvek: Fejlődés Eljárásorientált, objektumorientált 3
Témakörök Programkészítés menete: Forrásszöveg szerkesztés Fordítás Kapcsolatszerkesztés Hibakeresés, debugolás Turbo Pascal programozási nyelv: Nyelvi elemek, adattípus, egyszerű adattípusok Nevesített konstans, Változó, kifejezés 4
Témakörök Vezérlési szerkezetek: Szekvencia Szelekció Iteráció Karakterlánc Összetett adattípusok (tömb, rekord, halmaz) Alprogramok: Eljárás Függvény 5
Témakörök Egyéb algoritmusok: Rendezés Keresés Összefésülés Fájlkezelés: Szöveges Típusos Típus nélküli Objektum-orientált alapfogalmak 6
7
Program - Szoftver Program: A mikroprocesszor számára végrehajtható utasítások sorozata. Szoftver: A számítógépet működtető programok összessége. 8
CPU utasítás végrehajtás lépési 9
Szoftverfejlesztés Egy adott problémának számítógép segítségével való megoldása egy hosszú és bonyolult munkafolyamat végeredménye. A program elkészítésének munkafolyamatát a felmerülő problémától a késztermékig programfejlesztésnek nevezzük. Nagy feladat esetén, amikor több programból álló rendszerről van szó, rendszerfejlesztésről beszélünk. 10
Szoftverfejlesztés lépései Elemzés (analízis) Tervezés Kódolás Tesztelés Dokumentálás Karbantartás 11
Nagy rendszerek esetén Stratégiai tervezés projekt létrehozás Pl. PRINCE (Projektirányítási Módszertan) A stratégiának része lehet egy számítógépes szoftver létrehozása. Pl. SSADM (Strukturált Rendszer Elemzési és Tervezési Módszertan) Magát a szoftvert valamilyen szoftverfejlesztő eszközzel készítik. Pl. Visual C++, Delphi, NetBeans, Oracle 12
Igény, Ötlet Specifikáció Első lépésként valakinek kipattan a fejéből a nagy ötlet, hogy valamilyen probléma megoldása mennyivel egyszerűbb lenne egy számítógépes programmal. Ezt az igényt meg is kell tudnunk fogalmazni. A specifikáció nem más mint a megoldandó, megvalósítandó feladat megfogalmazása. 13
Elemzés I. Van-e pénz? Van-e idő? Van-e ember? Az elemzés során felmérjük a helyzetet: mire van szükség, mik a lehetőségek. A probléma megoldásának ebben a szakaszában a szóban forgó problémát minden szempontból egyértelműen definiálni kell, ezzel a problémamegoldás többi fázisát időben lényegesen lecsökkenthetjük és hibamentesebbé tehetjük. Ehhez az szükséges, hogy a feladat megfogalmazása legyen teljes, érthető, egyértelmű, pontos, tömör, szemléletes, előrelátó, jól felépített és tagolt. 14
Elemzés II. A fejlesztés e szakaszában tisztázni kell többek között, hogy milyen adatokat vár a program, és milyen adatokat kell annak produkálnia. A beviteli (input) adatokkal kapcsolatban a következő kérdések merülhetnek fel: Mik az input adatok? Milyen a beviteli formájuk? Milyen kapcsolatok vannak a beviteli adatok között? 15
Elemzés III. A kiviteli (output) adatoknál többek között a következőket kell megállapítani: Milyen adatokat kell megőrizni? Milyen formában kell az adatokat megőrizni? Mennyi adatról van szó? Hogyan tudjuk ezeket az adatokat előállítani? 16
Elemzés IV. Az elemzés fázisának dokumentuma kisebb feladatok esetén a feladatspecifikáció, vagyis a feladat pontos megfogalmazása. Nagyobb rendszerek esetén rendszertervet kell készíteni. 17
Tervezés I. Adatmodell Funkcionálismodell A programtervezés feladata, hogy az analízis során összegyűjtött információkat és adatokat alapul véve logikailag véglegesen kialakítsa az adatstruktúrákat és az adatokon manipuláló algoritmusokat. Hogy milyen tervezési módszert választ az ember, az a következő dolgoktól függhet: Milyen számítógépre készül a program? Mekkora a megoldandó feladat? Milyen módszerek állnak rendelkezésre? Mik a tervező lehetőségei szoftverekben, felkészültségben? 18
Tervezés II. A programtervezés alapja a részekre bontás. A feladatot - bonyolultságától függően - részekre kell szedni. A törekvés az hogy a részek minél függetlenebbek legyenek egymástól, hiszen így a program sokkal áttekinthetőbb, a hibakeresés, karbantartás, továbbfejlesztés sokkal könnyebb, egyértelműbb. 19
Tervezés III. Programtervezési módszerek: Moduláris: Lényege, hogy a programot felülről lefelé funkcionálisan egyre kisebb lépésekre (modulokra, eljárásokra) bontjuk. Jackson: Szintén felülről lefelé bontja a programot, de itt a programszerkezet felépítését az adatok szerkezete határozza meg. Objektum-orientált: Az egyes objektumok adataikkal és funkcióikkal együtt a program többi részétől függetlenek, és teljes mértékben felelősek a rájuk bízott feladatért. 20
Kiegészítés A moduláris programozást bonthatjuk: Horizontálisan Alkalmazói program Operációs rendszer BIOS, Firmware Vertikálisan: A programon belüli tagolás, amely szintén lehet horizontális és vertikális. 21
Tervezés IV. A tervezési szakasz dokumentációja a programterv. A program megtervezésével a probléma lényegileg meg van oldva, már csak a kódolás van hátra a megvalósításhoz. 22
Kódolás I. Ha a terv elkészült, akkor jöhet annak implementálása (kivitelezése). Az implementáció első szakasza a programterv kódolása egy adott programnyelven, vagyis a forrásprogram elkészítése. A forrásprogramból a fordító- és a kapcsolatszerkesztő program készíti el a processzor által értelmezhető gépi kódot. 23
Kódolás II. A kódolási szakasz dokumentációja a forrásnyelvi lista. Egy forrásnyelvi lista akkor jó, ha pontosan a programterv alapján készül, áttekinthető, olvasható, tömör és egyértelmű megjegyzésekkel van megtűzdelve. 24
Tesztelés I. Próbafuttatáskor még sok hibát észlelünk, ez természetes. Azonban minél alaposabbak voltak az előző fázisok, annál nagyobb a valószínűsége, hogy a program úgy fog működni, ahogy elképzeltük. A tesztelés folyamán különböző próbaadatokkal futtatjuk a programot, amelyeket úgy kell összeállítani, hogy minden lehetséges értéket felvegyenek. 25
Tesztelés II. A program tesztelésekor a következőkre kell figyelni: Pontosan úgy működik a program, ahogy az a feladat leírásában szerepel? Nem lehet elrontani? Elég hatékony? Biztonságos a használata? A program felhasználóbarát (kényelmes a használata, esztétikus, nem idegesítő)? A tesztelési fázis dokumentációja a kész program és a tesztadatok listája. 26
Dokumentálás I. Minden fázisnak megvan a maga terméke", dokumentációja. A program fejlesztésének befejeztével a teljes dokumentációt (vagyis mind a négy fázis dokumentációját) meg kell őrizni. Csak a teljes dokumentáció birtokában lehet később a programon változtatásokat végezni. 27
Dokumentálás II. A program fejlesztését végigkísérő dokumentációk összességét fejlesztői dokumentációnak nevezzük. Részei: a feladatspecifikáció, a programterv, a forrásprogram, a kész program, a tesztadatok listája, a program használatának ismertetése. 28
Dokumentálás III. A felhasználói dokumentáció részei: a feladat leírása, a szükséges hardver környezet, a szoftver környezet (operációs rendszer, a futtatáshoz szükséges egyéb szoftverek), a program betöltése, indítása, a program használatának részletes leírása: billentyűk, menük stb. használata, működési leírás, képernyőtervek, listatervek, hibalehetőségek, a hibaüzenetek felsorolása, biztonsági előírások (pl. adatok időszakos mentése). 29
Rendszerbevezetés A letesztelt programok üzemeltetésre készek. A rendszerbevezetés az installálással kezdődik. Az üzemeltetőket, felhasználókat ki kell képezni a program kezelésére, hibák elhárítására. A program üzemeltetése során szükség lehet apró módosításokra karbantartás. 30
31
Algoritmus I. Amikor egy problémát meg akarunk oldani, ajánlatos először a konkrét programozási nyelvet félretenni, és azon gondolkodni, milyen lépéseket kell megtenni a probléma megoldásának érdekében. A legjobb, ha egyszerűen leírjuk a megoldáshoz vezető út lépéseit. A szoftverfejlesztés tervezési fázisához tartozik. 32
Algoritmus II. Definíció: Azon tevékenységek sorozatát, amelyek egy feladat megoldásához vezetnek algoritmusnak nevezzük. Definíció: Egy feladat megoldására irányuló, véges számú jól definiált elemi lépések egyértelműen megadott sorozata, melyek véges időn belül véget érnek, s elérik a kitűzött célt. Definíció: Algoritmusnak nevezzük az aritmetikai, logikai, stb... műveletek olyan célszerűen összeállított sorozatát, amely a kitűzött feladat egyértelmű megoldásához vezet. 33
Algoritmusra példa Sobri Jóska betyárbandája egy csárdában ütötte fel tanyáját. A vezér utasította egyik betyárját, hogy: menjen ki az útkereszteződéshez, rejtőzzék el, és várjon. Ha jön egy kereskedő, üsse le, vegye el minden pénzét, majd nézze meg, hogy mennyi az idő. Ha már elmúlt este 8 óra, térjen vissza a csárdába, ha nem, várjon tovább. 34
Algoritmusra példa Persze, az algoritmusnak van némi hibája! (A betyár éhen halhat!) 35
Algoritmusra példa I. Az algoritmus tehát egy út a felvetődött probléma megoldásához. Nézzünk egy példát az algoritmusra: Hogyan tudnánk krétát szerezni az egyetemen? 36
Algoritmusra példa II. Lehet, hogy az algoritmus néhány elemi tevékenység egymás után végrehajtódó (szekvenciális) sorozata. Például: Menj be a tanszékre! Keresd meg az adminisztrátort! Kérj tőle két darab krétát! Hozd be a krétát az előadóba! 37
Algoritmusra példa III. Lehet, hogy a megoldás bizonyos pontokon nem látható előre és feltételektől (szelekció) függően más és más megoldást kell választanunk. Például: Menj be a tanszékre! Keresd meg az adminisztrátort! Ha megtalálod, akkor Kérj tőle két darab krétát! Különben Keress máshol krétát! Gyere vissza az előadóba! 38
Algoritmusra példa IV. Előfordulhat, hogy egy tevékenységet nem lehet egyből végrehajtani. A lépést részletezni (összetett tevékenység) kell. Például a Menj be a tanszékre! : Menj ki az előadóból! Menj el a C/1 épületbe! Az első emeleten keresd meg a 104-es ajtót! Kopogtass! Lépj be az ajtón! 39
Algoritmusra példa V. Előfordulhat, hogy a megoldás érdekében valamely tevékenységet többször is végre kell hajtani, vagyis ismételni (iterálni) kell. Például Kérj tőle két darab krétát! Csináld kétszer: Kérj tőle egy darab krétát! 40
Algoritmus III. Az algoritmus szerkezetét (struktúráját) tehát szekvenciák, szelekciók illetve iterációk adják, amelyeket tetszőleges mélységben egymásba lehet ágyazni. 41
Algoritmus tulajdonságai I. Az algoritmus lépésekből (elemi tevékenységekből, utasításokból) áll. Minden lépésnek egyértelműen végrehajthatónak kell lenni. Egy algoritmusban hivatkozhatunk összetett lépésekre is, melynek részletezését később adjuk meg. A végrehajtásnak mindig van valamilyen tárgya. Kell valami, amin az utasításokat végrehajthatjuk. Ezeket a programozásban adatoknak nevezzük. 42
Algoritmus tulajdonságai II. A végrehajtandó tevékenységnek mindig valamilyen célja van. Az algoritmusnak vannak bemenő (input) adatai, melyeket felhasznál. Az algoritmusnak legalább egy kimenő (output) adatot eredményeznie kell. Az algoritmus legyen hatékony! Az utasítások legyenek könnyen követhetők, pontosak, egyszerűek és azokat minél rövidebb idő alatt végre lehessen hajtani. Az algoritmus legyen elronthatatlan! Az algoritmus legyen felhasználóbarát! 43
Az algoritmus legyen Helyes Teljes Hatékony Egyértelmű Célorientált Elronthatatlan 44
Algoritmus tervezése Top Down (Felülről Lefelé) A megoldást felülről lefelé fokozatosan, lépésenként finomítjuk és a kis feladatokat csak a végső fázisban oldjuk meg. Bottom Up (Alulról Felfelé) Először megoldjuk a kisebb feladatokat, és aztán gondolkodunk az összeállítás srtuktúráján. 45
Algoritmus IV. Egy tetszőleges algoritmus a következő elemekből építhető fel: Szekvencia: egymás után végrehajtandó tevékenységek sorozata. Szelekció: választás megadott tevékenységek közül. Iteráció: megadott tevékenységek ismételt, többszöri végrehajtása. Feltétel nélküli ugrás: vezérlés átadása a program egy megadott pontjára. 46
Strukturált program A csak szekvenciákból, szelekciókból és iterációkból építkező programot strukturált programnak nevezzük. A strukturált programozásban a ciklusból való kiugrás fogalma ismeretlen. Ebből következik, hogy a program minden szekvenciájának - és így az egész programnak is - egyetlen belépési és egyetlen kilépési pontja van, ennélfogva a program lényegesen áttekinthetőbb. 47
Algoritmus készítése Egy bonyolultabb algoritmust nem lehet fejben megtervezni, ahhoz eszközök kellenek. Olyan eszközre van szükség, mely általánosan elfogadott, és mások is ismerik, használják. Ilyen a mondatszerű leírás, a folyamatábra, vagy a struktogram. 48
A folyamatábra I. A folyamatábra segítségével a program dinamikus viselkedését, folyamatát részletekbe menően ábrázolni tudjuk. A program folyását nyilak mutatják, ahol történik valami, ott valamilyen csomópont van. Tevékenység-csomóponton áthaladva a tevékenység végrehajtódik. Döntéscsomóponthoz érkezve a Feltételtől függően a vezérlés az Igaz vagy a Hamis (Igen vagy Nem) ágon folytatódik. A gyűjtőcsomóponton való áthaladás mindig egyértelmű. 49
A folyamatábra II. 50
A folyamatábra III. Bármely program e három elem segítségével felépíthető, a többi jelölés csak ábrázolási könnyebbség. Kapcsolódási pontot akkor használunk, ha helyhiány miatt ábránkat egy másik lapon folytatjuk. Az adatbevitel és az adatkiírás jelölésére is külön elemeket használunk. 51
A folyamatábra IV. 52
A folyamatábra V. Az iterációkat a következőképpen építjük fel: a vezérlés ismételten visszatér a ciklusmag elé, de az újbóli végrehatás előtt egy döntéscsomópont található, mely megengedi a ciklus elhagyását. Alapvetően két fajta iteráció létezik - az egyik a ciklusmag előtt tesztel, a másik a ciklusmag után, ezek az előfeltételes (előltesztelő) illetve végfeltételes (hátultesztelő) ciklusok. 53
A folyamatábra VI. 54
A folyamatábra VII. A növekményes ciklus azt jelenti, hogy a ciklusmagban megadott tevékenység előre meghatározott számban, valamely változó (ciklusváltozó) növekvő értékeire hajtódik végre valamettől valameddig. Olyan iterációknál használjuk, amelyeknél pontosan tudjuk a végrehajtások számát. A növekményes ciklust folyamatábrán előltesztelő ciklussal tudjuk megvalósítani úgy, hogy az ábrába beépítjük a ciklusváltozó értékének beállítását, illetve módosításait. 55
Krétás példa Megkérdezem, vállalkozik-e valaki arra, hogy bemenjen krétáért a Tanszékre. Ha igen, Menjen be a Tsz-re. Kérje meg Editet, adjon egy darab krétát. Ha nincs Edit, Keressen valaki mást, s kérjen tőle krétát. Jöjjön vissza a krétával, adja ide. Ha nem talál senkit, jöjjön vissza üres kézzel. Ha nem vállalkozik senki a hallgatók közül, Bemegyek én. Kiveszek a szekrényből egy darab krétát. Visszajövök az előadóba, s folytatjuk az órát. 56
57
Sobri Józska helyes algoritmusa 58
Struktogram I. A struktogram egy strukturált ábrázolási módszer, megalkotója Chapin (ezért Chapin chart-nak is hívják). E jelölés annyiban hasonlít a folyamatábrához, hogy a tervezés itt is kívülről befelé történik. Ahogy a struktúrában lejjebb megyünk, úgy egyre kevesebb hely marad tevékenységeink leírásához. 59
Struktogram I. 60
Mondatszerű leírás I. A mondatszerű leírás lényege, hogy a programot mondatszerű elemekből építjük fel. Annyiban tér el a folyamatos írástól, hogy bizonyos szabályokat be kell tartanunk, a struktúrák képzésére megállapodás szerinti formákat és szavakat használunk. 61
Mondatszerű leírás II. Be- és kivitel Be:...felsorolás...[megszorítások] Ki:...felsorolás...[kiírási formák] Szekvencia Tevékenység1 Tevékenység2 Tevékenység3 62
Mondatszerű leírás III. Egyágú szelekció Ha Feltétel teljesül, akkor Tevékenység(ek) végrehajtásra kerül(nek), egyébként nem. A program az Elágazás vége után folytatódik: Ha Feltétel akkor Tevékenység(ek) Elágazás vége 63
Mondatszerű leírás IV. Kétágú szelekció Ha Feltétel teljesül, akkor Tevékenység(ek)1 kerül(nek) végrehajtásra, egyébként Tevékenység(ek)2. Mindkét esetben a program az Elágazás vége után folytatódik: Ha Feltétel akkor Tevékenység(ek)1 egyébként Tevékenység(ek)2 Elágazás vége 64
65
Kezdetek I. 1951-ben készült el Neumann János tervei alapján az EDVAC nevet viselő számítógép, amely az első Neumannelvek alapján épített gép volt. Innen kezdődik a programozási nyelvek története. Az EDVAC volt az első számítógép, amelyen programot lehetett végrehajtani, elsősorban matematikai problémák megoldására specializálva. 66
Kezdetek II. A programozás kezdeti időszakára jellemző volt, hogy a programok általában csak azon a gépen futottak le, amely gépen elkészítették őket, azaz a programok gépfüggőek voltak. A továbbiakban bővült a számítógép által megoldandó problémák köre, egyre több területen kezdtek el számítógépet használni, és az újabb alkalmazási területek újabb problémákat vetettek fel. Az évek során a programozási munka könnyítése, gyorsítása érdekében a programozási technikák és eszközök (programozási nyelvek) is fejlődtek. 67
Kezdetek III. A 60-as években egyre több számítógép került a nagyvállalatokhoz, ahol már nem csak a számítások elvégzése volt az igény, hanem más nem számolást igénylő feladatot is meg szerettek volna oldani (adatkezelés). A hosszú nehéz munkával készített programok igen gyorsan elavultak, és máris lehetett hozzákezdeni következő írásához. Tehát új, gyorsabb, egyszerűbb programfejlesztési módszerekre volt szükség. 68
Programozási nyelvek generációi 0. GL: gépi kód, Assembly 1. GL: IBM ősnyelvei: FORTRAN, COBOL 2. GL: ALGOL60 és környéke 3. GL: PL/1, C, PASCAL, C++, JAVA 4. GL: Visual C++, Delphi, JBuilder Alacsony szintű nyelvek Magas szintű nyelvek 1:N típusú nyelvek, azaz egyetlen magas szintű programnyelvi utasítás több gépi kódú utasítást reprezentál. 69
Negyedik Generációs Nyelvek Tulajdonságai: Kezelői felület létrehozása Form Designer, Report Designer Kommunikációs felület létrehozása előre definiált környezetet tételeznek fel (pl. relációs adatbáziskezelő, ipari mérésadatgyűjtő, korházi betegfelügyelő, robotvezérlés), nyílt rendszerek illesztése (ODBC, JDBC) Alkalmazáslogika implementálására (létrehozására) magas szintű objektumorientált nyelveket használnak. 70
Programozási nyelvek osztályozása Imperatív nyelvek: Algoritmikus nyelvek: a programozó algoritmust kódol, és ez a kód működteti a processzort. A program utasítások sorozata. Legfőbb programozási eszköze a változó. Szorosan kötődik a Neumann- architektúrához. Alcsoportjai: Eljárás-orientált: C, Pascal Objektum-orientált: C++, Object Pascal, Java, C# 71
Programozási nyelvek osztályozása Deklaratív nyelvek: Nem algoritmikus nyelvek: A programozó csak a problémát adja meg, a nyelvi implementációkba van beépítve a megoldás megkeresésének módja. Alcsoportjai: Funkcionális nyelvek: LISP Logikai nyelvek: PROLOG, (MPROLOG) Egyéb nyelvek: Szimulációs nyelvek: SIMULA, GPSS 72
Programozási nyelvek hierarchiája 73
Assembly gépi kód példa MOV AX,1234h ;0B8h 34h 12h MUL WORD PTR [5678h] ;0F7h 26h 78h 56h MOV [5678h],AX ;0A3h 78h 56h Némi magyarázat a programhoz: az első sor egy számot (1234h) rak be az AX regiszterbe, amit most tekinthetünk mondjuk egy speciális változónak a második sor a fenti értéket megszorozza a memória egy adott címén (5678h) található értékkel a harmadik sor az eredményt berakja az előbbi memóriarekeszbe a pontosvessző utáni rész csak megjegyzés az első oszlop tartalmazza a mnemonikot a memóriahivatkozásokat szögletes zárójelek ( [ és ] ) közé írjuk 74
Az Assembly előnyei korlátlan hozzáférésünk van a teljes hardverhez, beleértve az összes perifériát (billentyűzet, nyomtató stb.) pontosan ellenőrizhetjük, hogy a gép tényleg azt teszi-e, amit elvárunk tőle ha szükséges, akkor minimalizálhatjuk a program méretét és/vagy sebességét is (ez az ú.n. optimalizálás) 75
Az Assembly hátrányai a forrás sokszor áttekinthetetlen még a szerzőnek is a kódolás nagy figyelmet, türelmet, és főleg időt igényel sok a hibalehetőség a hardver alapos ismerete elengedhetetlen a forrás nem hordozható, azaz más alapokra épülő számítógépre átírás nélkül nem vihető át (ez persze igaz a gépi kódra is) 76
77
Forrásprogram I. A processzornak saját nyelve van, csak azt beszéli! Ez a gépi kód (gépi utasítás) Utasításkészlet. A magas szintű nyelven megírt programot forrásprogramnak, forrásszövegnek nevezzük. Minden magas szintű nyelv egyben formális nyelv, amely meghatározott nyelvtan szerint használható. 78
Forrásprogram II. A program forrásszövegére vonatkozó formai, nyelvtani szabályok összességét szintaktikai szabályoknak hívjuk. A tartalmi, értelmezési, jelentésbeli szabályok alkotják a szemantikai szabályokat. Egy magasszintű programozási nyelvet szintaktikai és szemantikai szabályainak együttese határoz meg. 79
Programkészítés Egy magasszintű programozási nyelven megírt forrásszövegből elő kell állítani a processzor számára érthető gépi kódú programot. Erre két technika létezik: fordítóprogramos interpreteres 80
Fordítóprogramos technika Forrásszöveg + Fordítóprogram Fordítás Kapcsolat szerkesztés Tárgykód Egyéb tárgykód Kapcsolatszerkesztő + Futtatható program + Betöltő Betöltés a memóriába Folyamat, Process + Futtató rendszer 81
Fordítóprogram Fordítóprogram: Egy speciális szoftver. Előállít egy gépi kódú, a processzor által megérthető, de még nem futtatható programot. Mindig a teljes forrásszöveget elemzi és állítja elő belőle a tárgykódot. A tárgykód (object, *.obj) független az őt létrehozó programozási nyelvtől. Így támogatja a kevert nyelvű programfejlesztést is. A szintaktikai hibák mindig fordítás során derülnek ki. 82
A fordítás részletei lexikális elemzés: Szövegelemekre bontás. Az embernek szóló részt kihagyja (megjegyzések, szóközök, stb.), számára értelmezhető részekre bontja a forrásszöveget. Tokenizál, közbenső formára hoz. szintaktikai elemzés: Ellenőrzi, hogy teljesülnek-e a nyelv szintaktikai szabályai. Hiba esetén kiírja az üzeneteket és leáll a fordítás. szemantikai elemzés: Arra készíti fel a programot, hogy a szemantikai hibák kiderüljenek. kódgenerálás: Előállítja a tárgyprogramot. 83
További lépések Kapcsolatszerkesztő: Általában több tárgykódú programból állít elő egy futtatható programot. Betöltő: Egy speciális szoftver. Elhelyezi a memóriában a futtatható programot, és átadja neki a vezérlést. Futtató rendszer: A futtató rendszer felügyelete mellett fut a program. A futó program része, nem az operációs rendszeré! A program futása során derülnek ki a szemantikai hibák. 84
Interpreteres technika Nem a teljes forrásszöveget tekinti alapnak, mindig csak bizonyos szöveg elemekkel dolgozik (utasítások). Nem generál tárgykódot. Szövegelemenként végrehajt egy szövegelemzést, tokenizálást, szintaktikai elemzést. Ha a szintaktikai elemzés rendben volt, akkor jöhet a interpretálás. Az adott tevékenységet azonnal végrehajtja a processzor. Minden egyes szövegelem mögött van egy gépi kód. Az interpreter csak kiválasztja az adott szövegelemnek megfelelő gépi kódot. 85
Egyebek Előfordítás: Ha egy forrásszövegben vannak nem a nyelvhez tartozó elemek is, akkor egy előfordítás szükséges. Az előfordítás során csak nyelvi elemeket tartalmazó forrásszöveg keletkezik. Hivatkozási nyelv: Egy magas szintű programozási nyelv szabványa. Ebből minden időpillanatban egy aktuális létezik. Implementációk: A hivatkozási nyelvnek megfelelően, egy adott platformon (processzor, operációs rendszer) realizált fordítóprogramok, vagy interpreterek. Sok van belőlük. 86
IDE Az implementációk manapság egy integrált fejlesztői környezetben (Integrated Development Environment IDE) érhetők el. Részei: editor (szövegszerkesztő a forrásszöveg készítéséhez) compiler (fordító), interpreter (értelmező) linker (kapcsolat szerkesztő) debuger (nyomkövető, hibakereső) A szemantikai hibák feltárásában segít. 87
Egyéb fogalmak Paradigma: eljárásmód, eszközrendszer, gondolkodásmód. Absztrakció: adat absztrakció, procedurális absztrakció. Modellezés: A problématér leképezése a feladat szempontjából fontos, releváns modelltérre. 88
89
90
91
ASCII kódtábla 92