Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23
Tartalomjegyzék Programozási módszertanok Strukturált programozás, struktogram Vezérlő szerkezetek JAVA-ban Az utasítás fogalma A blokk fogalma Egyszerű elágazás (if) Összetett elágazás (switch) Elöltesztelő ciklus (while) Hátultesztelő ciklus (do-while) For ciklus (for) For ciklus folyt. Címkék Break utasítás Continue utasítás Visszatérés egy metódusból (return) A Java programozási nyelv Soós Sándor 2/23
Programozási módszertanok Egykoron: A programozás művészet volt Monolitikus programozás, egy ember ír egy programot A programnak nincs belső struktúrája Programozó zseni, nem tudja elmondani, hogyan csinálja! Szoftverkrízis Több programozóra van szükség Szükség van a programozók képzésére Egy program soha nincs készen, fel kell készülni a javításokra, továbbfejlesztésre, esetleg a programozó nélkül! Művészetből tudománnyá kellett alakítani a szakmát Ezért van szükség módszertanokra A Java programozási nyelv Soós Sándor 3/23
Moduláris programozás Alapelv: Oszd meg és uralkodj! Top-down dekompozíció - Bottom-up kompozíció Előnyök: Tiszta szerkezet, tiszta kapcsolatok Egy-két helyen kell módosítani, ha valamilyen javításra, változtatásra van szükség Párhuzamos fejlesztést, tesztelést tesz lehetővé Egyszerre több ember dolgozhat egy feladaton Újrafelhasználhatóság, bizonyos modulok szabványosíthatók, újra felhasználhatók Hátrányok: Nem ad módszert arra, hogy tökéletesen jól működő modulokból hogyan lehet jó programot összeállítani. A Java programozási nyelv Soós Sándor 4/23
Strukturált programozás DIJKSTRA: Hierarchikus programozás Top-down elven fokozatosan finomítjuk a programot. Nincsen bottom-up fázis. Minden szinten tudományosan bizonyítható a program helyessége. BOEHM ÉS JACOPINI: Minden algoritmus felépíthető a következő elemekből: szekvencia szelekció, elágazás iteráció, ciklus JACKSON-ELV: az adatszerkezetek is leírhatók a fenti három szerkezettel A Java programozási nyelv Soós Sándor 5/23
Struktogram A strukturált programozás alapszerkezeteit egymásba ágyazott grafikus elemekkel ábrázoljuk. Amit le tudunk rajzolni, azt könnyedén átírhatjuk strukturált programmá, és viszont. Bármely strukturált programot le tudunk rajzolni struktogrammal. Alapfogalmak: http://www.ngkszki.hu/~fidoo/download/pmmf/ ProgTerv/STUKI.HTM A Java programozási nyelv Soós Sándor 6/23
Struktogram alapelemek 1 Szekvencia Elágazás (if) utasítás 1 utasítás 2 Elágazás (switch) A Java programozási nyelv Soós Sándor 7/23
Struktogram alapelemek 2 Előltesztelő ciklus (while) Kidolgozott példak: http://www.ngkszki.hu/~fidoo/download/pmmf/ ProgTerv/PELDAK.HTM Egy struktogram tervező program: http://www.myfriend.de/index.htm?/download.html A Java programozási nyelv Soós Sándor 8/23
Példa struktogram A Java programozási nyelv Soós Sándor 9/23
Vezérlőszerkezetek Java-ban A strukturált programozás megvalósítása JAVAban A C++ szintaktikájára épül kisebb eltérésekkel Ennek elemeit vesszük sorra a következő oldalakon Csak az eltéréseket emelem ki! A Java programozási nyelv Soós Sándor 10/23
Az utasítás fogalma Utasítás: kifejezés utasítás értékadás postfix, vagy prefix ++, ill. -- -szal képezett kifejezés metódushívás példányosítás (a new operátor használatával) deklaráció utasítás egy lokális változó létrehozása és opcionális inicializálása a lokális változó a deklarációtól az őt magában foglaló blokk végéig létezik A kétfajta utasítás tetszőleges sorrendben követheti egymást. Minden utasítást pontosvessző (;) zár le. A Java programozási nyelv Soós Sándor 11/23
A blokk fogalma Blokk (utasítások szekvenciája): Utasítások { és } jelek közé írt sorozata Mindenhol, ahol utasítás írható, ott blokk is írható. Például: { int i; i = 123; int j = i*i; } A Java programozási nyelv Soós Sándor 12/23
Egyszerű elágazás (if) if (logikai kifejezés) utasítás1 else utasítás2 Sajnos mindkét ágban állhat egyetlen utasítás is, ezért fennáll az if-then-else probléma: if (a == 1) if (b == 2) c = 1; else c = 2; E kettő ugyanazt jelenti: Inkább írjuk így! if (a == 1) { if (b == 2) { c = 1; } else { c = 2; } } A Java programozási nyelv Soós Sándor 13/23
Összetett elágazás (switch) switch (egész kifejezés) { case cimke1: utasítások; break; case cimke2: case cimke3: utasítások; break;... default: utasítások; } A Java programozási nyelv Soós Sándor 14/23
Elöltesztelő ciklus (while) while (logikai kifejezés) utasítás A Java programozási nyelv Soós Sándor 15/23
Hátultesztelő ciklus (do-while) do utasítás while (logikai kifejezés) Ha a logikai kifejezés hamis, egyszer akkor is lefut a ciklusmag! A Java programozási nyelv Soós Sándor 16/23
For ciklus (for) for (kezdet; logikai kifejezés; továbblépés) utasítás Ez nagyjából ekvivalens a következővel: { kezdet; while (logikai kifejezés) { utasítás; továbblépés; } } A Java programozási nyelv Soós Sándor 17/23
For ciklus folyt. Miért csak nagyjából ekvivalens a kétféle ciklus? continue utasítás Miért fontos a külső zárójel a while ciklus körül? A Java programozási nyelv Soós Sándor 18/23
Címkék Címke bármely utasítás elé tehetünk címkét, például: cimke: utasítás A most következő utasítások használhatók címkével és anélkül is. Ha megadunk címkét, akkor a címkével jelölt blokkra vonatkozik. Ha nem adunk meg címkét, akkor a legbelsőre. A Java programozási nyelv Soós Sándor 19/23
Break utasítás Egy blokkból való kilépésre szolgál. Például: int i = 1; ciklus: while (i < 1000) { for (int j = 1; j <= i; j++) { if (KilepesTeszt(i, j)) break ciklus; } } Break utasítással nem lehet kilépni egy metódusból. A Java programozási nyelv Soós Sándor 20/23
Continue utasítás A ciklusmag hátralévő részét átugorva, a ciklus feltételére kerül a vezérlés. For ciklus esetén a továbblépés is lefut! Például: while (! bemenet.eof()) { sor = bemenet.readln(); if (ures(sor)) continue; Feldolgoz( sor ); } A Java programozási nyelv Soós Sándor 21/23
Visszatérés egy metódusból (return) Egy metódusból a return utasítással tudunk visszatérni. A return után írt kifejezés lesz a metódus visszatérési értéke. A Java fordító ellenőrzi, hogy a metódus minden lehetséges lefutása esetén végrehajtásra kerüljön egy return utasítás. Ha úgy találja, hogy ez nem teljesül, akkor fordítási hibát kapunk. A Java programozási nyelv Soós Sándor 22/23
Nem létezik goto utasítás A Java nyelvben nincsen goto utasítás! Ennek ellenére a goto foglalt kulcsszó! Az eddig megismert szerkezetekkel - kiegészítve a később tárgyalandó finally-val - minden felmerülő programozási feladat megoldható. A Java programozási nyelv Soós Sándor 23/23