Java Angster Erzsébet: OO tervezés és programozás, Java I. kötet alapján Készítette: Andor Gergely és Angster Erzsébet Ellenőrizte: Dr. Szelezsán János Jóváhagyta: Lengyel Zsuzsánna Köszöntő Szeretettel köszöntöm Önt, kedves hallgató ott a képernyő túloldalán. Angster Erzsébet vagyok, a Programozás tantárgy vezető tanára. Azzal az elhatározással ültem ide erre az oldalra, hogy segítsek Önnek, sőt megpróbáljak kedvet csinálni tanulmányaihoz, apró programjai elkészítéséhez. Önnek tisztában kell lennie azzal, hogy ez a tárgy nem a magolós tárgyak közé tartozik, a tananyag elsajátításához hónapokra van szükség. E tárgy tanulása során kialakul majd egyfajta gondolkodás, melyhez feltétlenül gyakorlási és érési időre van szükség. Hogy mennyi időre, az természetesen az egyéntől is függ. Van, aki most lát életében először programot, van, aki már komolyabb rutinra tett szert. Van, aki lassabban, de alaposabban tanul, mások gyorsabban, de felületesebben. Én a kettő közül feltétlenül az előbbit választanám. (Itt jön be az első kép) A tananyag mintegy 20 fejezetből áll, úgy, ahogy a tankönyvben is. Minden fejezet elején látni fogja, hogy pontosan hol tart az anyagban. Ajánlatos az egyes fejezetek végén egy kicsit elidőzni, a tankönyv kérdéseire válaszolni, valamint néhány feladatot megoldani.
I. Bevezetés a programozásba II. Objektumorientált paradigma Java I. Bevezetés a programozásba II. Objektumorientált paradigma III. Java környezet IV. Java programozási alapok V. Osztályok használata, készítése VI. Konténerek Köszöntő Szeretettel köszöntöm Önt, kedves hallgató ott a képernyő túloldalán. Angster Erzsébet vagyok, a Programozás tantárgy vezető tanára. Azzal az elhatározással ültem ide erre az oldalra, hogy segítsek Önnek, sőt megpróbáljak kedvet csinálni tanulmányaihoz, apró programjai elkészítéséhez. Önnek tisztában kell lennie azzal, hogy ez a tárgy nem a magolós tárgyak közé tartozik, a tananyag elsajátításához hónapokra van szükség. E tárgy tanulása során kialakul majd egyfajta gondolkodás, melyhez feltétlenül gyakorlási és érési időre van szükség. Hogy mennyi időre, az természetesen az egyéntől is függ. Van, aki most lát életében először programot, van, aki már komolyabb rutinra tett szert. Van, aki lassabban, de alaposabban tanul, mások gyorsabban, de felületesebben. Én a kettő közül feltétlenül az előbbit választanám. (Itt jön be az első kép) A tananyag mintegy 20 fejezetből áll, úgy, ahogy a tankönyvben is. Minden fejezet elején látni fogja, hogy pontosan hol tart az anyagban. Ajánlatos az egyes fejezetek végén egy kicsit elidőzni, a tankönyv kérdéseire válaszolni, valamint néhány feladatot megoldani.
I. Bevezetés a programozásba 1. A számítógép és a szoftver 2. Adat, algoritmus 3. A szoftver fejlesztése Köszöntő Szeretettel köszöntöm Önt, kedves hallgató ott a képernyő túloldalán. Angster Erzsébet vagyok, a Programozás tantárgy vezető tanára. Azzal az elhatározással ültem ide erre az oldalra, hogy segítsek Önnek, sőt megpróbáljak kedvet csinálni tanulmányaihoz, apró programjai elkészítéséhez. Önnek tisztában kell lennie azzal, hogy ez a tárgy nem a magolós tárgyak közé tartozik, a tananyag elsajátításához hónapokra van szükség. E tárgy tanulása során kialakul majd egyfajta gondolkodás, melyhez feltétlenül gyakorlási és érési időre van szükség. Hogy mennyi időre, az természetesen az egyéntől is függ. Van, aki most lát életében először programot, van, aki már komolyabb rutinra tett szert. Van, aki lassabban, de alaposabban tanul, mások gyorsabban, de felületesebben. Én a kettő közül feltétlenül az előbbit választanám. (Itt jön be az első kép) A tananyag mintegy 20 fejezetből áll, úgy, ahogy a tankönyvben is. Minden fejezet elején látni fogja, hogy pontosan hol tart az anyagban. Ajánlatos az egyes fejezetek végén egy kicsit elidőzni, a tankönyv kérdéseire válaszolni, valamint néhány feladatot megoldani.
I. Bevezetés a programozásba 1. A számítógép és a szoftver 1. Objektum, adat, program 2. Programozási nyelv 3. A program szerkesztése, fordítása, futtatása 4. A szoftverek osztályozása 5. Szoftverkrízis 6. A szoftver minőségének jellemzői 7. Moduláris programozás 8. Módszertanok
A számítógép részei
Objektum A valós világban előforduló dolog, melynek vannak adatai (tulajdonságai) és van viselkedésmódja. Program Számítógép számára érthető instrukciók sorozata, mely az adatok megfelelő számításaival és mozgatásaival egy feladat megoldását célozza. Szoftver Egy számítógépes rendszer meg nem fogható, nem fizikai összetevői.
A programozó és a számítógép közötti kommunikációs nyelv Programozási nyelv Emberi nyelv Programozási nyelv { int a = 7 ; a = a * 5 ; } Forráskód Gépi nyelv 00971CDF 0000F3F1 Gépi kód „Szorozd meg a 7-et 5-tel!” A programozó és a számítógép közötti kommunikációs nyelv
Gépi kód (natív kód, tárgykód) LDA $05 ADC $20 $05 HLT Assembly nyelv Mnemonik LDA ADC Gépi kód (natív kód, tárgykód) $02 $05 $10 $20 $05 $01 $02 $05 Töltsd az akkumulátorba az 5-öt $10 $20 Add össze és tedd az akkumulátorba a $20 címen levő értéket és az 5-öt! $01 Állj meg! Utasításkód: Paraméterek:
A $20 címen levő byte-ot szorozzuk meg 5-tel! Adatok Memória: $00 $23 $07 $03 $0E $07 $02 $15 $07 $01 $1C $07 $00 $23 $07 $04 $07 $05 $07 $00 $07 $05 $07 $00 $05 $07 $05 $00 Akkumulátor: A program belépési pontja: $22
Alacsony szintű nyelv (Assembly nyelv) (Mnemonikok, címek) Magas szintű nyelv (Java) (Változók, magas szintű utasítások) JMP BELEP A: BYTE 7 I: BYTE 0 BELEP: LDA 5 STA I LDA 0 UJRA: ADD A DEC I JNZ UJRA STA A HLT { int a = 7 ; a = a * 5 ; }
Programozás fordító-szerkesztő környezetben A programkészítés folyamata Programozás fordító-szerkesztő környezetben Forrásprogram (forráskód) megírása Fordítás Szerkesztés Futtatás
Program fordítása Fordító program Fordítási hibák Forrásprogram Error 109:Variable Error 133:Too much Fordítási hibák Var A: Byte ; Begin ... A:= A*5 ; ... End. Forrásprogram Fordító program 00011101 11001110 00001111 01010101 00111000 11111111 ... Tárgykód vagy
Program szerkesztése Szerkesztő program 1. Tárgykód Szerkesztési hibák 00011101 11001110 00001111 01010101 00111000 11111111 ... 1. Tárgykód Error 500... Szerkesztési hibák Szerkesztő program 11001110 00001111 01011101 00111000 00011101 10110111 ... 2. Tárgykód 00011101 11001110 00001111 01010101 00111000 11111111 ... Futtatható program vagy
Program futása Futó program Adatok Adatok Futási hibák Átlag: 6 10 6 2 00011101 11001110 00001111 01010101 00111000 11111111 … Futási hibák vagy
Programozás Java környezetben Forrásprogram (forráskód) megírása Forráskód lefordítása bájtkódra (javac.exe) JVM (Java Virtual Machine, java.exe) Modulok összeszerkesztése (linker) Bájtkód értelmezése, fordítása, futtatása lépésenként (interpreter)
Bájtkód A magas szintű forráskód és a gépi kód közötti gépfüggetlen közbenső kód. Fordító (Compiler) Egy program, mely a teljes forrásprogramot gépi kódra, illetve közbenső bájtkódra alakítja. Értelmező (Interpreter) Egy program, mely a forrásprogramot vagy a bájtkódot utasításonként értelmezi, fordítja le, és hajtja végre.
Java program fordítása … int a = 7 ; a = a * 5 ; … Forráskód (App.java) javac.exe Fordítóprogram App.java : 7 : Class int not found Fordítási hibák 00971CDF 0000F3F1 Bájtkód (App.class) vagy
Bájtkód futtatása interpreterrel 00971CDF 0000F3F1 Bájtkód (App.class) Memória a … … ... 7 35 00971CDF 0000F3F1
Szoftverkrízis (1968) Igények, követelmények egyre nagyobbak szabványosítás felhasználóbarátság elronthatatlanság gyors elkészítés karbantarthatóság minél alacsonyabb költségek A programok, programrendszerek egyre bonyolultabbak, áttekinthetetlenek
Paradigmaváltás: strukturált OO A programot olyan egységekre kell bontani, melyek egymástól minél kevésbé függenek áttekinthetőek karbantarthatóak Adat Művelet Modul1 Modul2 Paradigmaváltás: strukturált OO
A minőségi szoftver jellemzői Helyesség Hibatűrés Karbantarthatóság, bővíthetőség Újrafelhasználhatóság Kompatibilitás Felhasználóbarátság Hordozhatóság Hatékonyság Ellenőrizhetőség Integritás (sérthetetlenség) Szabványosság
Moduláris programozás Irányelvek: Oszd meg és uralkodj! Adatok (információ) elrejtése Döntések elhalasztása Döntések kimondása Tervezési irányzatok (modulokra bontás irányai): Felülről lefelé tervezés (top-down) Alulról felfelé tervezés (bottom-up)
Módszertan Programfejlesztési (szoftverfejlesztési) módszertan Hogyan készítsük el a szoftvert? Adatok (objektumok) és algoritmusok meghatározása Modulokra bontás; modulok elkészítése és összerakása Például: strukturált, objektumorientált (Egységesített Eljárás, Unified Process)
Módszertan (folyt.) Grafikus jelölésrendszer (modellező nyelv) Például: UML (Unified Modeling Language, Egységesített Modellező Nyelv) CASE eszköz Például: Rational Rose
I. Bevezetés a programozásba 2. Adat, algoritmus 1. Az algoritmus fogalma 2. Változó, típus 3. Tevékenységdiagram 4. Pszeudokód 5. Az algoritmus tulajdonságai
Algoritmus Algoritmus: Utasításoknak olyan sorozata, amely egy feladat megoldásához vezet Program: Egy számítógép által érthető algoritmus Vezérlőszerkezetek: szekvencia szelekció (elágazás) iteráció (ciklus) feltétel nélküli ugrás Strukturált algoritmus alapelemei
Feladatspecifikáció Hannibál tanár úr azt kapja feladatul: határozza meg a legfiatalabb lánytanulót az osztályában. Meg kell adnia a kérdéses lány nevét és születési dátumát.
Változó Névvel azonosított memóriaterület, melynek változhat az értéke Például: aktTanuló Szív Zsazsa true 1976 02 01 év:number név:String lány:boolean nap:number hó:number szülDátum:Date aktTanuló:Tanuló
Típus Minden változónak van egy jól meghatározott típusa! Gyakori típusok: number (szám). Például: 45, -1.2 . boolean (logikai), értéke true vagy false. String (szöveg). Például: “Szív Zsazsa”. Date (dátum), összetett típus, 3 számból áll: év, hó, nap. Például (1976,02,01). Értékadás (=) Például: aktTanuló.név = “Szív Zsazsa”
[legTanulo.szülDatum != (1900,01,01)] Tevékenységdiagram legTanulo.szülDatum = (1900,01,01) Adatok: aktTanuló: Tanuló legTanuló: Tanuló in: aktTanuló [sikerült] [else] [aktTanuló.lány & aktTanuló.szülDátum > legTanuló.szülDátum] Ha ő lány és fiatalabb, akkor megjegyezzük [else] legTanuló = aktTanuló in: aktTanuló [legTanulo.szülDatum != (1900,01,01)] [else] out: legTanuló.név, legTanuló.szülDátum out: "Nincs lány"
Pszeudokód Adatok eljárás kiir(tanulo: Tanuló) aktTanuló: Tanuló legTanuló: Tanuló Algoritmus kiir(tanulo: Tanuló) out: tanuló.név, tanuló.szülDátum.év, tanuló.szülDátum.hó, tanuló.szülDátum.nap end kiir eljárás
későbbi(dátum1:Date, dátum2:Date): boolean ok : boolean = false if (dátum1.év>dátum2.év) ok = true else if (dátum1.év==dátum2.év) & (dátum1.hó>dátum2.hó) else if (dátum1.év==dátum2.év) & (dátum1.hó==dátum2.hó) & (dátum1.nap>dátum2.nap) end if return ok end későbbi függvény
legfiatalabbLány() legTanuló.szülDátum = (1900,01,01) in: aktTanuló while sikerült if (aktTanuló.lány & későbbi(aktTanuló.szülDátum, legTanuló.szülDátum)) legTanulo = aktTanulo end if in: aktTanulo end while fő algoritmus
if legTanulo.szulDatum != (1900,01,01) out: "Legfiatalabb lány:" kiir(legTanuló) else out: "Nincs lány" end if end legfiatalabbLány
Az algoritmus tulajdonságai Lépésekből (elemi tevékenységekből, utasításokból) áll Minden lépés egyértelműen végrehajtható Hivatkozhatunk benne összetett lépésekre is A végrehajtandó utasításoknak valamilyen célja van Véges számú lépésből áll Adatokon manipulál általában vannak bemenő (input) adatai legalább egy kimenő (output) adatot eredményez
I. Bevezetés a programozásba 3. A szoftver fejlesztése 1. A szoftverfejlesztés alkotómunka 2. Az Egységesített Eljárás 3. Követelményfeltárás 4. Analízis 5. Tervezés 6. Implementálás (kódolás) 7. Tesztelés 8. Dokumentálás
A szoftver fejlesztése UML (Unified Modeling Language, Egységesített Modellező Nyelv): Grafikus jelölésrendszer a szoftver különböző nézeteinek modellezésére Egységesített Eljárás (Unified Process): Módszertan a fejlesztés módjára vonatkozóan Java: Magas szintű programnyelv programjaink implementálásához
Egységesített Eljárás OMT + Booch + OOSE módszerek egységesítése Fogalmak felhasználó, megrendelő, szoftverfejlesztő aktor: aki vagy ami a rendszert használja használati eset: a használatnak egy értelmes, kerek egysége Főbb jellemzői Használatieset-vezérelt Architektúra központú Iteratív és inkrementális (növekvő)
A szoftver élete A szoftver élete fejlesztési ciklusokból áll Minden fejlesztési ciklus végén a szoftverfejlesztő átad a megrendelőnek egy szoftver verziót Fejlesztési ciklus Fejlesztési ciklus … Idő A kész verzió átadása
Fejlesztési ciklus Munkafázisok Iterációk Követelményfeltárás Analízis . # 1 2 n + m Követelményfeltárás Főbb munkafolyamatok Analízis Tervezés Implementáció Teszt Munkafázisok Felmérés Kidolgozás Konstrukció Átadás Előkészítő Iterációk Egy iteráció a kidolgozás fázisban
Munkafázisok Felmérés (Inception) feladat elképzelése, feltérképezése Kidolgozás (Elaboration) rendszer architektúrájának kialakítása Konstrukció (Construction) főleg tervezés és kódolás eredménye: a rendszer béta verziója Átadás (Transition) a felhasználó kipróbálja a rendszert, jelzi a feljesztőnek a hibákat és a további igényeket
Főbb munkafolyamatok Követelményfeltárás követelmények összegyűjtése dokumentációja: követelményspecifikáció (feladatspecifikáció) Analízis megoldhatóság, erőforrásigény feltérképezése a feladat elemzése, pontosítása irányvonalak, nagyvonalú tervek megadása megoldási eszközök, módszerek kiválasztása dokumentációja: szakterületi objektummodell és a használati esetek
Főbb munkafolyamatok (folyt.) Tervezés a feladat lényegi megoldása dokumentációja: programterv Implementálás kódolás a programterv alapján dokumentációja: forráskód Tesztelés a program működésének ellenőrzése tudatosan összeállított tesztadatokkal dokumentációja: kész program és a tesztadatok
Tesztelés Tesztelési módszerek éles tesztelés (futtatás) szárazteszt (fejben futtatás) Hibafajták szintaktikai (formai) hiba: forráskódrészlet, melyet a fordító nem tud értelmezni szemantikai (logikai, tartalmi) hiba: a program nem logikusan vagy nem a leírás szerint működik
Dokumentálás Fejlesztői dokumentáció fejlesztőknek szól a fejlesztés szakaszainak eredményeit tartalmazza Felhasználói dokumentáció felhasználóknak szól útmutató a szoftver használatához