Programozási paradigmák. Típusok, deklarációk ortogonalitása. Kombinációs ortogonalitás. Az imperatív paradigma II.



Hasonló dokumentumok
Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei

Java programozási nyelv

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozási nyelvek (ADA)

A C programozási nyelv II. Utasítások. A függvény.

FUNKCIONÁLIS PROGRAMOZÁS

Programozási nyelvek (ADA)

C programozás. 1 óra Bevezetés

Bevezetés a C++ programozási nyelvbe

Kifejezések. Kozsik Tamás. December 11, 2016

A programozás alapjai

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Informatika terméktervezőknek

Mindenki abból a három tantárgyból tesz szigorlatot, amelyet hallgatott.

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Pénzügyi algoritmusok

Oktatási segédlet 2014

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Occam 1. Készítette: Szabó Éva

A C# programozási nyelv alapjai

Készítette: Nagy Tibor István

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Vezérlési szerkezetek

Programozás I gyakorlat

Kifejezések. Kozsik Tamás. December 11, 2016

Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája

A C programozási nyelv I. Bevezetés

Programozás II. 2. Dr. Iványi Péter

Szoftvertervezés és -fejlesztés I.

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Programozás módszertan

Aritmetikai kifejezések lengyelformára hozása

A C programozási nyelv I. Bevezetés

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

C programozási nyelv

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Imperatív és procedurális programozás a Javában

4. PROGRAMOZÁSI PARADIGMÁK, PROGRAMOZÁSI NYELVEK

Programozási nyelvek a közoktatásban alapfogalmak I. előadás

Operációs rendszerek gyak.

Programozási nyelvek 6. előadás

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Eljárások és függvények

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

A C programozási nyelv III. Pointerek és tömbök.

Mintavételes szabályozás mikrovezérlő segítségével

Objektumorientált Programozás III.

A C programozási nyelv III. Pointerek és tömbök.

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Algoritmizálás és adatmodellezés tanítása 1. előadás

ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Pénzügyi algoritmusok

Már megismert fogalmak áttekintése

Kiterjesztések sek szemantikája

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

Interfészek. PPT 2007/2008 tavasz.

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Programozási nyelvek Python

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

AWK programozás, minták, vezérlési szerkezetek

Haladó DBMS ismeretek 1

Apple Swift kurzus 3. gyakorlat

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozási nyelvek Java

OOP #14 (referencia-elv)

Globális operátor overloading

Webprogramozás szakkör

A kódgenerálás helye a fordítási folyamatban. Kódgenerálás I. (kifejezések és vezérlési szerkezetek) A kódgenerálás feladata. Ebben az előadásban...

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Szkriptnyelvek. 1. UNIX shell

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

A TANTÁRGY ADATLAPJA

Imperatív programozás

Adatszerkezetek 1. Dr. Iványi Péter

Programozási nyelvek I. (Az Ada) Kozsik Tamás

Szelekció. Döntéshozatal

Kivételkezelés a C++ nyelvben Bevezetés

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Az AVR programozás alapjai. Előadja: Both Tamás

BASH script programozás II. Vezérlési szerkezetek

S z á m í t ó g é p e s a l a p i s m e r e t e k

Rekurzió. Dr. Iványi Péter

Számítógép architektúra

8. gyakorlat Pointerek, dinamikus memóriakezelés

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Szkriptnyelvek II. Perl programok

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

A C programozási nyelv IV. Deklaráció és definíció

Szoftvertechnológia alapjai Java előadások

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Átírás:

Programozási paradigmák Az imperatív paradigma II. Vadász 1 Típusok, deklarációk ortogonalitása Bármely típus-konstruktornál alkalmazható bármely már definiált típus (ez korlátlan ortogonalitást jelent). A compiler megvalósítások korlátozhatnak. Megkülönböztethetünk kombinációs ortogonalitást, fajta szerinti ortogonalitást és számbeli ortogonalitást. Vadász 2 Kombinációs ortogonalitás Akármilyen deklarációban akármilyen típusokat használhatunk. Pl. tiszta deklarációban, inicializáló deklarációban és inicializáló konstans deklarációban alaptípusok, tömbök, rekordok stb. deklarálhatók Ez az ortogonalitás a C-ben néha sérül. Vadász 3

Fajta ortogonalitás Ha egy S fajta tagja értelemszerűen használható, akkor akármelyik tagja is használható. A kombinációs ortogonalitás alesete ez valójában. Pl. ha egy rekord tagja lehet alaptípusú, akkor tag lehet tömb, tag lehet rekord s.í.t. C és ADA megfelel ennek! (És a rekurzív struktúra?) Vadász 4 Számbeli ortogonalitás Ha egy S fajta tagja értelemszerűen használható, akkor 0 vagy több tagja is használható. Pl. ahol egy deklaráció használható, ott zéró számú vagy több deklaráció is használható. A zéró változat néha speciális jelölést kíván. Vadász 5 Az ortogonalitás Tisztává tesz egy nyelvet! Fölösleges kérdéseket elkerülhetünk vele! És persze, nemcsak a deklarációkban lehet ortogonalitás.. Nézzük még meg a C-beli komplex deklarációkat... Példa Vadász 6

A C pointerezésből jövő gondolat... A pointer változó tartalmazhat függvény címet is. Ez is adat! Függvény cím versus függvény hívás: mindkettő értéket szolgáltat (de mást és mást). A függvény hívás operátora a függvény címére hat. Szemantikája Képezhetünk tömböt függvény belépési címekből. Indexelésük lehetséges, A példa folyt. Vadász 7 Típusegyezőség Type equivalence: mikor egyeznek típusok? Két fajtája: Strukturális egyezőség: ha a két típus értékkészlete és operációkészlete megegyezik. Kevésbé szigorú. Név egyezőség (csak névvel ellátott típusoknál van értelme): a két adat ugyanolyan típusnevű. Vadász 8 Koerció, típus-átalakítás Mi történjen, ha egy szituációban T 1 típust várnánk és ott T 2 típusú adat van? Implicit konverzió lehetséges bizonyos esetekben, ez a coerció. (C-ben pl. integrális típusok szélesítő konverziója természetes. Más automatikus konverziók is vannak! Pl. float-to-int átalakítás nincs az argumentumoknál. ) A típus-előrevetés (cast) is lehetséges (és néha szükséges, ha a koerciós szabályok ellentmondásos helyzetet adnak). Példák Vadász 9

Értékadás Az állapottér (state) változtatása: belső állapot (változótér), külső állapot (I/O). Balérték (destination), jobbérték fogalom. <left-value><assg-op><expression><delimiter> Értékadó operátorok értékadó kifejezés (mellékhatással) (C-ben), értékadó utasítás. Szimultán értékadás. Példák Vadász 10 Kifejezések (expressions) Operátorokkal összekötött operandusokból álló szerkezet, ami kiértékelhető, kiértékelődik és megjelenik egy adott típusú érték. Operátorok precedenciája, asszociativitása: az operátorok kötődését határozzák meg, közvetve hatnak a kiértékelés sorrendjére. Zárójelezés szerepe. Vadász 11 Operátorok osztályozása Operandusok száma szerint monadic, unary: egyoperandusú, dyadic, binary: kétoperandusú, ternary: háromoperandusú. Helyzetük szerint: infix, prefix, postfix. Vadász 12

Operátor-túlterhelés Tradicionálisan túlterheltek az operátorok. Keveredhetnek bizonyos típusok: automatikus konverziók végbemehetnek (coertion). különlegesnek tűnő operátorok is lehetnek. A függvényezés tekinthető az operációk halmazának bővítéseként (ekkor a szigorú imperatív elvet feladjuk). A resricted operátorok igénye felmerülhet Vadász 13 Input/output A külső állapot fogalma. Egyes nyelvekben I/O utasítások, más nyelvekben I/O függvények/eljárások. Nagymértékben függ az operációs rendszertől, nemcsak a nyelvtől! Az alapgondolat: csatornát nyitunk/zárunk, melybe/melyből adategységeket mozgatunk. Vadász 14 Fájlkezelés Tekinthetők egy adott típusú adatszerkezetnek. Fájl-szervezés (organisation): az OS szerepe. szekvenciális, direkt, indexelt szekvenciális. Fájl-elérés: függhet a szervezéstől is. soros, véletlen. Vadász 15

A vezérlés menete Flow of Control : imperatív nyelvekben a programozó teljes kontrollja. Alapszerkezetek: soros végrehajtás, választások, elágazások, ismétlések, hurkok, ciklusok. Rutinhívás Megjegyzés Vadász 16 Utasítások (statements) Utasítás test (body) fogalom. Utasítás határolók Egyszerű utasítás, Üres utasítás (számbeli ortogonalitás!), Összetett utasítás (ortogonalitást segíti, ha úgy kezelhető, mint az egyszerű). Utasítások ortogonalitása A modern nyelvek fajta ortogonalitás szempontból ortogonálisak, a számbeli ortogonalitáshoz van, ahol kellenek összetett utasításhatárolók. Vadász 17 Utasítás címkék, goto Goto statement is considered harmful Miért? lehetőleg egyezzen a program szöveg szerkezete (térbeli szerkezet) és a végrehajtás menete (időbeliség). Így a hibakeresés, programböngészés könnyebb. A goto ezt sérti. Vadász 18

Soros szerkezet Egymás utáni utasítások: tedd ezt, azután ezt s.í.t. Igen gyakori szerkezet. Összetett utasítások, null utasítás is! A goto: ugrás. Vadász 19 if utasítás switch, case utasítás Választások Vadász 20 Ciklusok Ismétlés egy előre kalkulált számszor, ismétlés, amíg egy feltétel fennáll (vagy bekövetkezik). while (elől tesztelő, hátul tesztelő) until (hátul tesztelő, elől tesztelő) for (ciklusváltozó fogalom, listás) Vadász 21

Ciklusból való kilépés A ciklus teste fogalom. break (exit), continue (, return) megszakító utasítások szerepe. Ez elfogadható. goto veszély: ciklusból kiugrásban, ciklus testre ugrásban. Vadász 22 Esemény és hibakezelés Esemény, feltétel állapot. Esemény jelződése. Esemény lekezelés: handlerek. Megszakítás (IT), hiba (exeption), klasszikus esemény (event). Váratlanság, szinkronitás, aszinkronitás. Vadász 23 Futás idei hibák Domain/data errors (synchronous) Pl., túlcsordulás. Resource exhaustion (synchronous, asynchronous) pl. memória allokálásnál memóriahiány, stack kimerülés. Loss of facilities (asynchronous) pl. kapcsolat (connection) megszűnés. Vadász 24

Handlerek A normál végrehajtás menetét abba kell hagyni (instrukciót? rutint? processzt?), a dinamikus kontextust lementeni (legfontosabb a PSW-PC) Fusson a kezelő. Terminálódás, vagy a vezérlés visszaadható (instrukcióra?, a következőre?, rutin elejére?, a következő rutinra?) Vadász 25 A program összeállítás Deklarációkból és utasításokból lehet programot összeállítani (ha a deklaráció is utasítás?) A nagyobb programegységek hierarchiája: blokkok rutinok (eljárások, függvények), modulok (packages, tasks), program(ok). Vadász 26 Blokk Kezdő-vég zárójelekkel deklarációk és utasítások. Blokkbeágyazás (általában) lehetséges. Láthatósági szabályok vannak (nyelvektől függően). Beágyazott blokkokban vannak név definíciós előfordulások, és név hivatkozási előfordulások: és a kérdés az, hogy egy név hivatkozás előforduláskor melyik definícióhoz kötődik a név. Ha a kötődést a fordító elintézi: static binding. Ha futásidőben: dynamic binding. Vadász 27

Scope, visibility A scope: az a terület, amire a deklaráció kiterjed. Jó szabály: deklaráció a használat előtt. Ez probléma rekurzív elemeknél. Erre: forward declaration megoldás (a név létezzen, majd megmondjuk milyen az). Tipikus példa a függvény prototype is. Visibility range: az a terület a scope-on belül, amin kötődik. Mi lehet a nem-láthatóság oka? Más a scope egy újra deklarálással, Rekord mező hivatkozásban a kiválasztó operátor mást tesz láthatóvá... Vadász 28 Lifetime, kontextuális scope szabályok Lifetime: az a futási idő, amin belül az entitás létezésére számíthatunk. Kontextuális scope szabály: függvénynév túlterhelésnél az aktuális argumentum szignatúra mondja meg, mi is kötődik (ADA igen, C nem) Vadász 29 Alprogramok Blokkok (deklarációk, utasítások) olyan együttese, ami explicite meghívható. Meghívásra lefut. Visszatérve ott folytatódik, ahol meghívták. Fogalmak: rutin fej, rutin test, rutin hívás, formális és aktuális paraméterek (argumentumok), argumentumátadás. Eljárások, függvények Operátor versus rutin Vadász 30

Modulok és csomagok Alprogramok (+ deklarációk és utasítások) együttese. Elemeihez való hozzáférés szabályozása miatt csoportosítunk modulokba, csomagokba. Felépítésük: specifikációs rész, implementációs rész. Vadász 31 Összefoglalás Az imperatív programozási nyelvek lehetővé teszik, hogy a programozó algoritmusokat programozzon, amik pontosan megszabják hogyan oldjuk meg a adott problémát. A számítógépi modell állapotokat, állapotátmeneteket használ, a program futása az állapotátmenetek sorozata. Az állapottér sokdimenziós, a program változói, a perifériák állapotai képezik, melyeken maga a program - értékadásokkal - manipulációkat végez. Az állapotátmenetek kulcsfogalma a vezérlés menete, ami valójában a programszámláló regiszter felvett értékeinek sorozata. Vadász 32 Irodalom H. E Bal, D. Grune: Programming Language Essentials, Addison-Wesley, 1994. ISBN 0-201-63179-2 Vadász D.: Operációs rendszerek, Jegyzet, ME. 2006. http://ww.iit.uni-miskolc.hu/~vadasz/geial202 Vadász 33