Programozási nyelvek II. (Az Ada) Kocsisné Dr. Szilágyi Gyöngyi.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Összefoglalás 1. Pascal program szerkezete 2. Pascal típusai
Algoritmus és programozás
Programozási Nyelvek (C++) Gyakorlat Gyak 03.
JavaScript.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymá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
Programozás II. 3. Gyakorlat C++ alapok.
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
C A C nyelv utasításai.
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 programozási nyelv 2. rész – Vezérlő szerkezetek
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
5. előadás Parametrikus polimorfizmus. Generikus programozás
2. előadás Programegység, fordítási egység, könyvtári egység, beágyazás, blokkszerkezet, alprogramok, csomagok.
2. előadás Programegység, fordítási egység, könyvtári egység, beágyazás, blokkszerkezet, alprogramok, csomagok.
6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.
Programozási nyelvek I. (Az Ada) Kozsik Tamás
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
4. előadás Az Ada típusai és típuskonstrukciós eszközei, II. Rekordok és átlátszatlan típusok. A csomagok. Adatabsztrakció, egységbe zárás.
Vizuális és web programozás II.
4. előadás Az Ada típusai és típuskonstrukciós eszközei, II
Bevezetés a C++ programozási nyelvbe
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Programozás Az adatokról C# -ban.
Funkcionális programozás 2. gyakorlat
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
Programozási nyelvek Páll Boglárka.
Ismétlés A pascal program szerkezete: program programnev; Programfej
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
Tömbök és programozási tételek
1.3. Pascal program felépítése Az els ő program. Program ; … Begin … End. Program fej Deklarációs rész Végrehajtó rész.
Készítette: Csíki Gyula
Hernyák Zoltán Programozási Nyelvek II.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
Objektum orientált programozás
A Visual Basic nyelvi elemei
Funkciós blokkok A funkciós blokkok áttekintése Az alkalmazás előnyei.
Fontos tudnivalók A MATLAB egy fajta objektummal dolgozik (Mátrix)
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
C Programozási alapok.
Algoritmizálás, adatmodellezés
1 Mivel foglalkoz(t)unk a laborokon? 1.Labor: Word alapok Excel alapok: Excel alapok: Cellahivatkozás, munkalapfüggvény, diagram varázsló, trendvonal 2.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 3. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
1 Mivel foglalkoz(t)unk a laborokon? 1.Labor: Word alapok Excel alapok: Excel alapok: Cellahivatkozás, munkalapfüggvény, diagram varázsló, trendvonal 2.
Programozási nyelvek I. (Az Ada)
Programozási alapok.
Programozási nyelvek típusossága.
Programozás C# -ban Elágazások.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
A CLIPS keretrendszer
Példa: Dinteger = {..., -1,0,1,...}; Dboolean = {true, false};
Bevezetés a programozásba Algoritmikus gondolkodás
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Változók.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Algoritmus készítés.
Előadás másolata:

Programozási nyelvek II. (Az Ada) Kocsisné Dr. Szilágyi Gyöngyi

Technikai Adatok Elérehetőség: aszt.inf.elte.hu/~szilagyi/ aszt.inf.elte.hu/~szilagyi Fogadó óra: hétfő szoba

A tárgy célja n A programozási nyelvek alapfogalmainak bemutatása – Az előadásokon – Számonkérjük zh-kal és a Szoftverszigorlaton n Az Ada nyelven keresztül – Az előadásokon és a gyakorlatokon – Számonkérjük zh-kal és a Szoftverszigorlaton n És egy kis programozási gyakorlatszerzés…

A tárgy célja n A programozási nyelvek alapfogalmainak bemutatása – Az előadásokon – Számonkérjük zh-kal és a Szoftverszigorlaton n Az Ada nyelven keresztül – Az előadásokon és a gyakorlatokon – Számonkérjük zh-kal és a Szoftverszigorlaton n És egy kis programozási gyakorlatszerzés…

Miért az Ada? n Jól kitalált n Gazdag, sokszínű n Logikus felépítésű, világos fogalmakkal n Jó szemléletet ad n Sok mindenben különbözik a C++ nyelvtől n Példát ad a Pascal jellegű nyelvekre n Nehéz, kevesen használják – de pl. a PL/SQL nagyon hasonló

Követelmények (1) ELMÉLET (1jegy) + GYAKORLAT (2 jegy) n Elméleti teszt – 3 előadáson (megajánlott jegy) n Két géptermi zh – 1 zh: gyakorlaton, csak feladatok (1. JEGY) – 2. zh: közös géptermi elmélet (2. JEGY) Feladat (3. JEGY) – A zh-k feladatos részei 2 órásak, – Az időpontok a tárgy honlapján lesznek meghírdetve n Két beadandó program – Mindkét zh előtt egy-egy beadandó

Követelmények (2) n Előadás: 0 kredit, kétfokozatú – feltétel: minden zh sikeres n Gyakorlat: 4 kredit, gyakjegy – feltétel: minden zh sikeres – feltétel: a beadandók elkészültek – átlag: 3 jegyből

Tananyag n Nyékyné Gaizler Judit (szerk.) és mások: Az Ada95 programozási nyelv, Eötvös Kiadó

1. előadás Az Ada kialakulása és rövid jellemzése. Alaptípusok, deklarációk és utasítások.

Egy jó programozási nyelv n Egyszerre vonatkoztat el a számítógéptől és az alkalmazásoktól n Jó jelölésrendszert biztosít az algoritmusok megadásához n Eszköz a programok bonyolultságának kezelésére

Egy jó programozó n Amatőr programozás n Professzionális programozás

Egy jó szoftver n Helyesség: A program pontosan megoldja a feladatot, megfelel a kívánt specifikációnak n Megbízhatóság: Ha helyes és abnormális helyzetekben sem történi katasztrófa, ésszerű működést produkál n Karbantarthatóság: mennyire tudjuk a programot adaptálni, ha megváltozik a specifikáció (szoftver költségek 70%) n Újrafelhasználhatóság: egészben vagy részben újra felhasználható új alkalmazásokban (több kész komponenst felhasználva, több energia marad a hiányzó részek fejlesztésére) n Kompatibilitás: Milyen könnyű a szoftver termékeket egymással kombinálni n Hordozhatóság: mennyire könnyű a programot más géphez, konfigurációhoz, operációs rendszerhez átalakítani n Hatékonyság: a futási idővel és a felhasznált memória méretével arányos

Az Ada kialakulásának történeti háttere n Hatalmas nemzetközi erőfeszítés n Az 1970-es évek elején a US DoD (United States Department of Defense) megszervezte a HOL (High Order Language) elnevezésű munkát.

A kiindulás n a követelmények rögzítése és n a létező nyelvek értékelése volt – A FORTRAN, COBOL, PL/I, HAL/S, TACPOL, CMS-2, CS-4, SPL/1, J3B, Algol 60, Algol 68, CORAL 66, Pascal, SIMULA 67, LIS, LTR, RTL/2, EUCLID, PDL2, PEARL, MORAL és EL-1

Az eredmény n Nincs olyan létező nyelv, ami egymagában megfelelne a célnak. n Egyetlen nyelvet kell kialakítani. n A követelmények definiálásának meg kell maradnia a „state-of-the-art” szintjén. n Az új nyelv fejlesztését a meglevő értékek felhasználásával kell végezni.

Az értékelés n Nem használható fel: az elavult, vagy elhibázott nyelvek. (pl. FORTRAN, CORAL 66 ) n Megfelelő: közvetlenül nem alkalmas, de néhány elemük felhasználható. (pl. az RTL/2 és a LIS) n Alapnyelvként használható: a Pascal, a PL/I és az ALGOL 68.

n A CII Honeywell Bull franciaországi laboratóriuma (a „Zöld”). n Alapnyelv: a Pascal. A verseny

Ada Az új nyelv neve: Ada n Ada Augusta Byron – Lord Byron lánya – Babbage asszisztense – A világon az első programozó

Az Ada tervezésének szempontjai (1) n Biztonságra törekvés: megbízható, könnyen karbantartható programok kellenek. n Ezért a nyelv: – erősen típusos, – lehetőséget ad az adatabsztrakció kezelésére, – külön fordítható programegységekből áll, – eszközöket ad a kivételes és hibás helyzetek kezelésére.

n Ne legyen túl bonyolult, és legyen a rendszere következetes. n Hatékony legyen. Az Ada tervezésének szempontjai (2)

Ada83: az 1983-as szabvány n Alapja a Pascal n Néhány vonás: Euclid, Lis, Mesa, Modula, Sue, Algol 68, Simula 67, Alphard, CLU

Utána további igények: Ada 95 n Az interfészek problémája: más nyelven írt rendszerekhez illesztés n Újrafelhasználhatóság: objektum-orientált programozás támogatása n Rugalmasabb, hierarchikus könyvtárszerkezet n A párhuzamos programozást támogató eszközök továbbfejlesztése

Az Ada rövid jellemzése n Egy Ada program egy vagy több programegységből áll n A programegységek többnyire külön fordíthatóak (könyvtári egység) n A programegységek egymásba ágyazhatók (blokkszerkezet)

Az Ada programegységei (1) n az alprogramok: végrehajtható algoritmusokat definiálnak, két fajtájuk van: – az eljárás: egy tevékenység-sorozat leírása, lehetnek paraméterei – a függvény: egy érték kiszámítása és visszaadása n a csomagok: logikailag kapcsolatban álló entitások (alprogramok, típusok, konstansok és változók) gyűjteményeit definiálják

Az Ada programegységei (2) n a sablon (generic) egységek: típussal és alprogrammal is paraméterezhető, makrószerű csomagot vagy alprogramot jelentenek n a taszkok: párhuzamosan végrehajtható számításokat definiálnak. n a védett egységek: feladatuk a taszkok között megosztott adatok védett használatának koordinálása.

Főprogram n Egy paraméter nélküli eljárás n Hivatkozás használt könyvtárakra n A foglalt szavakat kisbetűvel, az azonosítókat nagybetűvel kezdjük, többszavas azonosítók esetén a szavak mindegyike nagybetűvel kezdődik, a szavakat _ jelek választják el. n Az üres utasítást a null kulcsszó jelzi, melyet ilyen esetben kötelező használni. n A főprogram egy eljárás. n A programunk nevének és az őt tartalmazó file nevének meg kell egyezni, különben fordítási hiba jelentkezik. Példa 1.: semmi.adb procedure Semmi is begin null; end;

Főprogram Példa 2.: hello.adb with Text_IO; procedure Hello is begin Text_IO.Put_Line("Hello"); end Hello;

Könyvtárak n Szabványos könyvtár (pl. Text_IO) n A nyelv ad eszközöket a saját könyvtárak szervezésére. n Minden könyvtár hierarchikusan van felépítve – individuális komponensekre dekomponálhatjuk a rendszert n Egy önállóan fordított programegység meg kell nevezze a szükséges könyvtári komponenseket.

A programegység részei n A specifikáció tartalmazza azt az információt, ami más egységek felé látható kell legyen n A törzs tartalmazza az implementációs részleteket -- ez rejtett más programegységek felé.

with Text_IO; procedure Hello is begin Text_IO.Put_Line("Hello"); end Hello; specifikáció törzs A programegység részei: példa

A törzs részei n deklarációs rész: definiálja a programegységben használt konstansokat, változókat, típusokat, hibaeseményeket (exception) és programegységeket n utasítássorozat: definiálja a programegység végrehajtásának hatását. n kivételkezelő rész (opcionális)

with Ada.Integer_Text_IO; procedure Negyzet is N: Integer; begin Ada.Integer_Text_IO.Get( N ); Ada.Integer_Text_IO.Put( N*N ); end Negyzet; deklarációs rész utasítás- sorozat A törzs részei: példa

Deklarációs rész n Elválasztva az utasításoktól n Változók, konstansok, típusok, kivételek, programegységek n Változódeklaráció: állapottér megadásához azonosító: típus N: Natural; – Kezdőérték: érdemes, ha értelmes B: Boolean := True; – Több azonosítóhoz ugyanaz a típus (és esetleg kezdőérték) I, J: Integer; A, B: Positive := 3;

Néhány használható típus n Integer n Natural n Positive n Boolean n Character n Float n String Beépített típusok A Standard csomagban vannak deklarálva

n objektumok deklarációja: N: Integer; – kezdeti értéket is adhatunk: N: Integer := 42; – konstanst is deklarálhatunk: Max: constant Integer := 100; N_Vessző: constant Integer := N; n fordítási hiba: I: Integer; B: Boolean;... I := B; Mire való a típus?

Logikai típus (Boolean) n A Standard csomagban (automatikusan használható a programokban) n Az if és a while ezt igényli n Ilyet adnak: = /= = n predefinit operátorok: not and or xor and then or else if B = True then if B then if B = False thenif not B then

„Rövidzár” logikai operátorok n Lusta kiértékelés: and then or else ha az első argumentumból meghatározható a kifejezés értéke, akkor megáll if A>B and then F(A,B) then n Mohó kiértékelés: and or mindenféleképpen kiértékeli mindkét argumentumot más eredmény: ha a második argumentum – nem mindig értelmes / kiszámítható (futási hiba) – mellékhatással rendelkezik

Az Integer típus n Az egész számok halmaza:..., -3, -2, -1, 0, 1, 2, 3,... n Predefinit operátorok +A -A A+B A-B A*B A/B A rem B A mod B abs A A**B – Az egész osztás csonkít (nulla felé...) – Hatványozásnál B nemnegatív

A mod és a rem különbsége A B A/B A rem B A mod B A=(A/B)*B +(A rem B) előjel A-é A=B*N +(A mod B) előjel B-é (N egész)

A Float típus n Predefinit műveletek: +X -X X+Y X-Y X*Y X/Y X**Y – hatványozás: Y egész

Kevert aritmetika n Nem megengedett: I: Integer := 3; F: Float := 3.14; I := F + 1; F := I - 1.3; -- Hibásak! n Explicit konverzióra van szükség: I := Integer(F) + 1; F := Float(I) - 1.3; – Integer(F) kerekít

Precedenciák n Pontosan definiálva van az operátorok precedenciája – később visszatérünk rá... n Bal-asszociativitás n Zárójelezés

Utasítások n Egyszerű utasítások – Értékadás – Üres utasítás – Alprogramhívás és return utasítás n Összetett utasítások – Elágazások – Ciklusok – Blokk utasítás

Az értékadás n Egy kifejezés értékét egy változóhoz rendeljük I := 5; n Az érték és a változó típusának meg kell egyeznie I := True; -- fordítási hiba! n Futási időben további ellenőrzés (altípus) n A korlátozott típusú változóktól eltekintve minden változóra alkalmazható (sőt, „balértékre”)

procedure Semmi is begin null; end; n Üres begin-end nem írható n Más szituációkban is használjuk n Ezt a kulcsszót nem csak utasításként használjuk Az üres utasítás

n Alprogramokat nevük és aktuális paramétereik megadásával hívhatunk. Text_IO.Put_Line("Kiírandó szöveg"); Text_IO.Get(Ch); -- ahol Ch egy karakter típusú változó Text_IO.New_Line; n A return utasítás hatására az alprogram végrehajtása befejeződik. n Függvénynél itt adjuk meg az eredményét is: return X+Y; Alprogramok hívása és a return

Összetett utasítások programkonstrukciók kódolására n Elágazás: if, case n Ciklus: léptetős, tesztelős, feltétel nélküli n Blokk utasítás

if A>B then Temp := A; A := B; B := Temp; end if; Elágazás: if

if A>B then A := A - B; else B := B - A; end if; Elágazás: if + else

if Aktuális < Keresett then U := I + 1; elsif Aktuális > Keresett then V := I - 1; else Megtaláltuk := True; - akárhány ág lehet end if; - elhagyható az else Elágazás: if + elsif (+ else)

Csellengő else if (a>0) if (b>0) c = 1; else c = 0; n Veszély: C++, Java, Pascal stb. n Az Adában ilyen nincs n Az if utasítás le van zárva

Ch : Character; diszkrét típusú értéken case Ch is when ‘d’ => X := X+1; when ‘w’ => Y := Y-1; when ‘a’ => X := X-1; when ‘z’ => Y := Y+1; when others => null; end case; Elágazás: case (1)

case (X mod 20) + 1 is when 1..3 | 5 | 7 | 11 | 13 | 17 | 19 => Felbonthatatlan := True; when others => Felbonthatatlan := False; end case; Elágazás: case (2)

with Ada.Integer_Text_IO; procedure Tízig is begin for I in loop Ada.Integer_Text_IO.Put( I ); end loop; end Tízig; Ciklus: léptetős A ciklusváltozó: csak a ciklusban létezik nem külön deklaráljuk nem változtatható az értéke a ciklusmagban „a ciklusmag lokális konstansa” csak egy intervallumot adhatunk meg neki csak egyesével léphet

n Üres intervallum: ciklusmag nem hajtódik végre n Visszafelé haladó ciklus: for I in reverse loop Ada.Integer_Text_IO.Put( I ); end loop; Ciklus: léptetős

with Ada.Integer_Text_IO; procedure Tízig is I: Positive := 1; begin while I <=10 loop Ada.Integer_Text_IO.Put ( I ); I := I + 1; end loop; end Tízig; Ciklus: tesztelős (csak elöl)

n Ritkábban használjuk, egyelőre nem is olyan fontos n Végtelen ciklus írására (párhuzamos programok) n Kilépés itt is lehetséges, sőt, feltételes kilépés is – exit utasítás loop... end loop; Ciklus: feltétel nélküli

n Utasítások között egy blokk nyitható n Tartalmazhat újabb deklarációkat declare begin end; A blokk utasítás

n Akármilyen mélységig mehet: hierarchia … declare … begin … declare … begin … end; … end; … A blokk utasítás: beágyazás

n nagy adatstruktúrára van szükség a program egy rövid szakaszán – részben kiváltható mutatókkal n egy deklarálandó objektum mérete futási időben dől el, deklarálás előtt ki kell számolni – részben kiváltható mutatókkal n kivételkezelő kód helyezhető el a végén – később visszatérünk erre... A blokk utasítás: Mikor van rá szükség?

Strukturálatlan utasítások: az exit utasítás (1) n Ciklusból való kiugrásra használható n Ciklusmagon belül bárhova írható n Gyakran feltétel nélküli ciklushoz használjuk loop … exit; … end loop;

Strukturálatlan utasítások: az exit utasítás (2) n Feltételhez is köthető a kiugrás n Így kódolhatunk például hátultesztelő ciklust is loop loop Get(Ch); … exit when Ch = ‘q’; exit when … end loop; end loop;

Strukturálatlan utasítások: az exit utasítás (3) n Egymásba ágyazott ciklusoknál is jól jön n Névvel jelölt ciklusok segítségével… A: for I in loop for J in loop if Beta(I,J) then … exit A; end if; exit A when end loop; end loop A;

Strukturálatlan utasítások: a goto utasítás n valójában nincs rá szükség! n ha nagyon optimalizálni kell... > if A(I) < Elem then if Balszomszéd(I) /= 0 then I := Balszomszéd(I); goto COMPARE; end if; … -- utasítások end if;