240 likes | 500 Views
Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember. Java programozási nyelv 2. rész – Vezérlő szerkezetek. Tartalomjegyzék. Programozási módszertanok Strukturált programozás, struktogram Vezérlő szerkezetek JAVA-ban Az utasítás fogalma
E N D
Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember Java programozási nyelv2. rész – Vezérlő szerkezetek
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)
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
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.
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
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
Struktogram alapelemek 1 • Elágazás (if) • Szekvencia utasítás 1 utasítás 2 • Elágazás (switch)
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
Vezérlőszerkezetek Java-ban • A strukturált programozás megvalósítása JAVA-ban • 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!
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 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; }
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; } } if (a == 1) if (b == 2) c = 1; else c = 2;
Ö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; }
Elöltesztelő ciklus (while) while (logikai kifejezés) utasítás
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!
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; } }
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?
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.
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.
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 ); }
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.
Nem létezik goto utasítás • A Java nyelvben nincsengoto 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ó.