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 – – –
●
Szoftverkrízis – – –
●
Monolitikus programozás, egy ember ír egy programot A programnak nincs belső struktúrája Programozó zseni, nem tudja elmondani, hogyan csinálja! 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 – –
●
BOEHM ÉS JACOPINI: Minden algoritmus felépíthető a következő elemekből: – – –
●
Top-down elven fokozatosan finomítjuk a programot. Nincsen bottom-up fázis. Minden szinten tudományosan bizonyítható a program helyessége. 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 ● ● ● ●
–
deklaráció 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) 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 (a == 1) E kettő if (b == if (b == 2) ugyanazt jelenti: { c = c = 1; else else Inkább { c = c = 2; írjuk így! } A Java programozási nyelv
Soós Sándor
{ 2) 1; } 2; } 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