Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 1. előadás Hasznos weboldal http://kto.web.elte.hu Program felépítése Programegységek (program unit) eljárások (procedure) meghívjuk függvények (function) Csomag (package, C++-ban pl. osztályok) egységbezárás Sablon (generic, C++-ban: template) típussal való paraméterezés Task (thread, process) Védett egységek (protected unit) párhuzamosan végrehajtható számítás folyamatok közötti kommunikáció A programegységek két féle konstrukciót alkothatnak: 1. Mellérendelt konstrukció P.E. + P.E. 2. Alá-fölé rendelt konstrukció (beágyazás) P.E. P.E.
Fordítási egység (compilation unit) Legkisebb része a programegységnek, amit a fordítónak oda lehet adni. A programszöveg azon része, amelyet a fordítóprogram egy egységnek kezel. (Az a rész, amit a fordító egy végrehajtásával le lehet fordítani.) Az Adában fordítási egységet lehet készíteni alprogramdefinícióból, csomag specifikációból, csomagtörzsből, sablon specifikációból, sablon törzsből, valamint alegységből. Például: egy alprogram definíciója, előtte az alprogram által használt könyvtári egységek listája (egy vagy több with utasításban megadva), valamint egy vagy több use utasítás alkothat egy fordítási egységet. Vegyük észre, hogy az Ada csomagok specifikációja és törzse külön fordítási egységként készíthető el. A C és C++ nyelvben a fordítási egység egy darab c, illetve cpp forrásfájlból az előfordító végrehajtásával keletkező forráskód. A gyakorlatokon a GNAT GNU Compiler-t használjuk, a gnatmake (fileok) utasítással tudjuk lefordítani a programunkat. Az ADA-ban az alábbi forrásfájlok találhatóak:.ads.adb A forrásfájlok fordítási egységeket tartalmaznak A fordítási egységet pedig képzeljük el úgy, mint programegységek halmaza. Példa: hello.adb with Text_IO; procedure Hello is Text_IO.Put("Hello"); end Hello; A with kulcsszó utáni csomag és a procedure Hello egy jó példa a mellérendelt konstrukcióra. Főprogram: C++ programozási nyelvben megszoktuk, hogy a main függvényvény a főprogram. ADA programozási nyelvben viszont a főprogram is egy alprogram. Egy olyan programegység, mely egy paraméter nélküli eljárás. (procedure). (A forrásfájlt, amiben a főprogram található, a főprogram nevével látjuk el) Csomag: Olyan programegység, amely sok programegységet foglal magába. Ezen programegységek logikai összefüggésben állnak. Egy csomag tartalmazhat például alprogramokat, csomagokat, taskokat, változókat
Ada.Text_IO Szöveges input/outputot fogja össze. A szabványos könyvtár része Szerkezete: Csomag. Általánosságban eljárásokat és függvényeket tartalmaz. Például a Put_Line()-t, mely a soremeléssel való kiíratásért felel. Ez jó példa az alá-felé rendelt kostrukcióra: Ada.Text_IO Put_Line A. hierarchikus felépítést tesz lehetővé (Ada.Text_IO.Put_Line( Valami );) (Az Ada és a Text_IO közötti. egy picit másabb kapcsolatot jelent. Az Ada egy package és az Ada.Text_IO egy child package Logikai összetartozás, fizikai szeparáció) (Elhangzott kérdés: Főprogram paraméter nélküli eljárás, akkor argumentumos beolvasás hogy néz ki? Külön függvény van rá ) Programegység részei 1. Specifikáció (specification) Hogyan kell használni a programegységet? 2. Törzs (body) Belső utasítások leírása (rejtett más programegységek felé) procedure Hello is Text_IO.Put("Hello"); end Hello; Forrásfájlok esetén:.ads.adb Specifikációt tartalmaz Törzset tartalmaz Törzs Deklarációs rész Definiálja a programegységben használt konstansokat, változókat, típusokat, hibaeseményeket (exception) és programegységeket. Utasítássorozat Definiálja a programegység végrehajtásának hatását. Kivételkezelő rész (opcionális), Nem utasítás szerint.
Példa: 1. előadás dia 29. oldal negyzet.adb with Ada.Integer_Text_IO; procedure Négyzet is N: Integer; Ada.Integer_Text_IO.Get( N ); Ada.Integer_Text_IO.Put( N*N ); end Négyzet; Az is közé kerül a deklaráció (itt van a deklarációs rész), míg a end közé kerül az utasítássorozat. Ada.Integer_Text_IO Szintén egy szabvány könyvtár. Számok szöveges alapú input/output műveleteit tartalmazza. Az ADA-ban az értékadás := (C++-ban = ), míg az összehasonlítás az = (C++-ban ==) Beépített típusok Integer, Natural, Positive, Boolean, Character, Float, String Az ADA egy szigorúan, statikusan típusos nyelv. Minden adatot úgy használunk, ahogy kitaláltuk. Kifejezés, utasítás kérdésköre Kifejezés: Olyan része a programszövegnek, amely értéket fog azonosítani. Kiértékelés Utasítás: Végrehajtás Különbségek a C++ és az ADA között: C++-ban: x = 1 értéke 1. mellékhatása: x 1 (x-be belekerül az 1) x = 1; utasítás, ami kiértékeli a t Tiszta nyelvekben mellékhatások nélküli ekkel dolgozunk. nem ADA x:=1; utasítás x 1
Utasítások: - Értékadás - Vezérlési szerkezetek: o Strukturált programok vezérlési szerkezetei: Szekvencia Elágazás Ciklus o Egyebek: GOTO break/continue exit Kifejezések: Lexikális alapvető egységek: - Változók (Például: X) - Literálok (Például: 1) - Operátorok - Függvényhívás - Zárójelek Kifejezések jelentése érték meghatározásának módja A op B infix bináris operátor Operandus száma alapján: - unáris: -, not (!) - bináris: + < = - ternális:? : Operátor elhelyezkedése alapján: - infix: ek között található operátor (Például: = ) - prefix: előtt található operátor (Például: -, not) - postfix: után található operátor (Például: ++) - mixfix: vegyes (Például C++-ban:? :, ( )) Példa (++) C++-ban: C változó c++ mellékhatása: c c+1 értéke (): c ++c mellékhatása: c c+1 értéke (): c+1 A fentebbiek a ek szintaxisáról szólnak.