1. dia -...
TRANSCRIPT
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ésneknevezzü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.
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átminden 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
Van-e pénz?
Van-e idő?
Van-e ember?
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.
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
Adatmodell
Funkcionális-
modell
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
21
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.
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
35
Persze, az
algoritmusnak van
némi hibája!(A betyár éhen halhat!)
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, akkorKérj tőle két darab krétát!
KülönbenKeress 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ópontvan.
Tevékenység-csomóponton áthaladva a tevékenység végrehajtódik.
Döntéscsomóponthoz érkezve a Feltételtőlfü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ő Neumann-elvek 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
69
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.
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ű objektum-orientá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ályoknakhí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
81
Forrásszöveg Fordítóprogram
Tárgykód Egyéb tárgykód Kapcsolatszerkesztő
Futtatható program Betöltő
Folyamat, ProcessFuttató rendszer
Fordítás
Kapcsolat
szerkesztés
Betöltés a
memóriába
+
+
+
+
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