Magas szintű programozási nyelvek 1 Előadás Bevezetés Espák Miklós espakm@unideb.hu Juhász István jegyzete alapján
Valós világ leírása Egyedek Modellezés Tulajdonságok Kapcsolatok Viselkedés Egyedek osztályozhatók: Közös tulajdonságok Hasonló viselkedés Absztrakció: Modellalkotás alapja Közös, lényeges tulajdonságok kiemelése
Modellezés Milyen modellek vannak? Kotta (egy zeneszám modellje) Műszaki rajz (épületé, alkatrészé stb.) Piktogram (pl. fagylalt áthúzva) Blokkdiagram használati utasításon UML diagram stb.
Absztrakció: Modellalkotás alapja Modellezés Közös, lényeges tulajdonságok kiemelése Lényegtelen tulajdonságok elhagyása Osztály Az absztrakció segítségével a modellben egyedek osztályát írhatjuk le! (Nem független egyedekkel kell foglalkozunk.)
Mikor modellezünk? Modellezés Megoldandó problémán gondolkodunk Tervezünk valamit, rajzolunk Tanulunk (a magolás nem tartozik ide) Mitől modell a modell? Leképezés: léteznie kell az eredeti egyednek Leszűkítés: az egyednek csak bizonyos tulajdonságai jellenek meg (nem mind) Alkalmazhatóság: a modellben levont következtetés igaz az eredeti egyedre
Leképezés Modellezés Az eredeti egyed lehet képzelt vagy tervezett vagy akár feltételezett is. Pl. egy legyártandó gép. Leszűkítés A modell szegényebb, de kezelhetőbb mint az eredeti egyed Alkalmazhatóság A modell létcélja. A vizsgálatok a modellben egyszerűbbek. (Esetleg csak abban lehetséges.)
Modellezés Számítógépes modellezés Adat: egyedek tulajdonságai Kód (program): egyedek viselkedése Adatok modellezése (adatabsztrakció útján): Adatmodell Viselkedés modellezése (procedurális absztrakció útján: funkcionális modell (eljárásmodell) A két modell együttesen írja le a világot!
Alapfogalmak : Nyelvek osztályozása Programnyelvek osztályozása gépközeliség szerint: Gépi kódú nyelvek: Adott processzor utasításkészletére írt bináris programok nyelve Közvetlenül végrehajtható Assembly nyelvek: Alacsony szintű, közvetlen hardver elérés Szöveges (nem bináris) Magas szintű nyelvek Nem CPU-függők, emberközelibb szemlélet
Magas szintű programozási nyelvek Magas szintű programozási nyelvek Forrásprogram: az elkészített (megírt) program Szintaktikai szabályok: a nyelv felépítése, nyelvtana Szemantikai szabályok: A nyelvi elemek jelentése, tartalma. Pl. utasítások végrehajtásának menete, adatok letárolásának módja stb. Nyelv = szintaktikai + szemantikai szabályok
Magas szintű programozási nyelvek Gépi kódú program előállítása: Fordítóprogram (compiler) Forrásprogramból tárgyprogramot készít Lépések: Lexikális elemzés Szintaktikai elemzés Szemantikai elemzés Kódgenerálás (tárgykód előállítása) A tárgykód lehet ún. bájtkód (virtuális gép) Értelmező program (interpreter) Nem készít tárgyprogramot (csak az első 3 lépés van) Utasításonként értelmez és végrehajt
Magas szintű programozási nyelvek Gépi kódú program előállítása: Vegyes technikák: A kettő kombinációja: pl. Java HotSpot VM
Magas szintű programozási nyelvek Gépi kódú program előállítása: Lexikális elemző (lexer): lexikális elemekre bontás Szintaktikai elemzés (parser): A nyelvtani szabályok szerinti ellenőrzés pl.: C-ben x <> 7 fordítási hiba A program struktúrájának felépítése (AST) Szemantikai elemzés: Szemantikai összefüggések teljesülésének ellenőrzése pl. C-ben i = 4.5 fordítási hiba, ha i int típusú
Magas szintű programozási nyelvek Gépi kódú program előállítása: Szerkesztő, kapcsolatszerkesztő (linker): Tárgykódokból futtatható kódot készít Betöltő (loader): Elhelyezi a programot a tárban, és ráadja a vezérlést Futtató rendszer (runtime environment): A program futását vezérli Interpreteres nyelvnél ez az értelmezőprogram Bájtkódra fordító nyelvnél a virtuális gép Gépi kódra fordító nyelvnél a processzor
Magas szintű programozási nyelvek Fordítás menete, 0. lépés: Előfordító (precompiler) A forrásprogramban lehetnek nyelven kívüli elemek Ezeket eltávolítja, illetve feloldja Érvényes forrásprogramot állít elő
Programnyelvek osztályozása Imperatív nyelvek Algoritmikusak A program utasítások sorozata Alapvető eszköz a változó: A tárban lévő értékek közvetlenül módosíthatók Az algoritmus lényege a változók értékének sorozatos módosítása Szorosan kötődnek a Neumann-architektúrához Alcsoportjai: Eljárásorientált nyelvek, objektumorient. nyelvek
Programnyelvek osztályozása Deklaratív nyelvek Nem algoritmikusak A programozó csak a problémát adja meg A megoldáskeresés módja be van építve Memória közvetlen elérése nem lehetséges, vagy korlátozott Pl. Prolog: a változók csak egyszer kaphatnak értéket Nem kötődnek szorosan a Neumann-archit.-hoz Alcsoportjai: Funkcionális, ill. logikai nyelvek
Egyéb: Programnyelvek osztályozása Egyik csoportba sem sorolhatók, vagy éppen a kettő ötvözései (multiparadigmás nyelvek)
Nyílt forrás, zárt forrás A programot forráskód formájában készítik el Futtatáshoz a tárgykódra van szükség Nem módosítható (vissza kellene fejteni) Kié a program? Melyik a program? A forráskód? A tárgykód? Mindkettő?
Zárt forrás (closed source) A forráskód a gyártóé. Más számára nem elérhető. A felhasználó csak a tárgykódot érheti el: csak futtathatja a kódot, nem vizsgálhatja, nem alakíthatja át. Problémák: a felhasználó kiszolgáltatott, a gyártó kezében van (pl. speciális hardverek) Gyakran pénzbe kerül ( fizetős )
Nyílt forrás (OSS, open source sw.) A forráskód nyilvános. Ettől még a gyártóé/fejlesztőé, mivel rendszerint licenc védi. A felhasználó vizsgálhatja a kódot, de nem feltétlenül módosíthatja: ez már licenctől függ. A nyílt forrás csak a forráskód nyilvánosságát jelenti, ettől még nem feltétlen szabad szoftver, és nem is feltétlen ingyenes!
Szabad szoftver (FS, free software) Richard M. Stallman (RMS): Free as in freedom, not as in free beer Free software freeware Egyetlen etikus terjesztési mód GNU projekt: szabad operációs rendszer létrehozása (GNU: GNU is Not Unix) Saját kernelük nincs: GNU/Linux GPL: GNU Public Licence http://gnu.org FOSS: Free and Open Source Software
RMS
Szabadon lehet: Terjeszteni Szabad szoftver Vizsgálni Módosítani Azért szabad, mert a felhasználó szabadságát adja. A szabad szoftver ipari tendencia lett