2012. október 18.
Ismétlés
El z órai anyagok áttekintése Ismétlés Ismerjük: Az algoritmizálás alapjait Kifejezések fogalmát Vezérlési szerkezeteket Egyszer programozási tételeket... és néhány példát
Specikáció Feladat specikációja Miel tt az algoritmusainkat megtervezzük, leírjuk, programozzuk specikálni kell a feladatot Mi az amit bemenetként megkapunk kimenetként adni kell el kell végezni Ezek mindegyike feltétel! Feltételezzük, hogy a bemenetre/kimenetre igaz az állítás A programunk akkor lesz helyes, ha a feltételek teljesülnek!
Specikáció Feladat specikációja Példa a négyzetgyök számításra Bemenet: egy szám, aminek a négyzetgyökét keressük: x Kimenet: egy olyan szám y, amire igaz, hogy y 2 = x illetve x = y Feladat: a program számolja ki a bemenet négyzetgyökét Tehát az el feltétel azt köti ki, hogy egy számot kapok az utófeltétel pedig azt, hogy az eredmény a bemenet négyzetgyöke lesz
Típusok és m veletek
Típus fogalma Típus fogalma Deníció Típusnak nevezzük egy megadott értékhalmazt és az azokon értelmezett m veletek összességét Példa típusra 1. Egészek: Értékek: 0... 1000, M veletek: + és Példa típusra 2. Logikai: Értékek: igaz, hamis, M veletek:, és Példa típusra 3. Karakter: Értékek: a... z, M veletek: < (reláció a bet rend szerint)
Adatok ábrázolása Adatok ábrázolása a memóriában Két állapot tárolható zikai szinten matematikailag: 0 és 1 Egyetlenegy érték a bit, ez lehet 0 vagy 1 8 biten lehet ábrázolni egy bájtot, kettes számrendszerb l tízesre átírva ez 0 és 255 közötti számokat teszi lehet vé A bájtokat kett hatványai szerint szokás további egységekbe foglalni, szélesítend az ábrázolható értékek halmazát. Két bájt (16 bit): 0 és 65535 között Négy bájt (32 bit): 0 és 4294967295 között (32-bites rendszerekben ezt szónak (word) is hívják)
Adatok ábrázolása Adatok ábrázolása a memóriában Két állapot tárolható zikai szinten matematikailag: 0 és 1 Egyetlenegy érték a bit, ez lehet 0 vagy 1 8 biten lehet ábrázolni egy bájtot, kettes számrendszerb l tízesre átírva ez 0 és 255 közötti számokat teszi lehet vé A bájtokat kett hatványai szerint szokás további egységekbe foglalni, szélesítend az ábrázolható értékek halmazát. Két bájt (16 bit): 0 és 65535 között Négy bájt (32 bit): 0 és 4294967295 között (32-bites rendszerekben ezt szónak (word) is hívják)
Adatok ábrázolása Adatok ábrázolása a memóriában A tárolni kívánt érték típusától függ a számok jelentése... Például 16 biten (2 bájton) tárolni lehet: El jel nélküli egész számokat (0... 65535) El jeles egész számokat ( 32768... 0... 32767) (Els bit el jelbit) Karaktereket (úgynevezett Unicode táblázat alapján) Minden egyes számértékhez egy karaktergraka rendelhet...
Adatok ábrázolása Adatok ábrázolása a memóriában Mit tudunk tárolni még: Logikai értékeket Racionális számokat, meghatározott tizedes pontossággal Karaktersorozatokat (szövegeket) Memóriarekeszek címét Programutasításokat (az egyes bájtoknak utasítások felelnek meg) Dátumot, id t (például eltelt másodpercekben mérve) Az el z ek sorozatát vektorok formájában...
Adatok ábrázolása Adatok ábrázolása a memóriában Hogyan történik mindez? A memória rekeszekre van osztva A rekeszek hossza rendszerenként más, például 32 bit Egy rekeszben egy érték van A programozó (így a gépi utasításokra fordított program) tudja, hogy melyik rekeszben milyen típusú érték van, hogy kell értelmezni A rekeszeknek tudunk nevet adni, ezek a változók Változókkal rekeszeket lehet együttesen is kezelni (összefogni) Pédául tömbök, karaktersorozatok,...
Adatok ábrázolása Valós számok a memóriában A valós számok trükkje: X 2 Y alakban ábrázoljuk Pl.: 32 bit esetén 23 bit az X és 8 bit az Y, illetve el jelbit Lebeg pontos számábrázolás (egy IEEE szabvány esetén) 23db { }} { Az X minden esetben 1. xxxxxxxxxxxxxxxxxxxxxxx alakú, ahol az x egy bináris érték Az exponens adja meg a kettedes pont helyét A vezet egyest valójában nem tároljuk, mivel mindig egy
Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot
Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot
Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot
Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot
Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot
Adatok ábrázolása Tárolás következményei Fontos tudni az értékek típusát, mert legbelül minden egyforma Nem végtelen a precizitás számok esetén Egy bájton tárolva, ha vesszük azt a kifejezést, hogy 255 + 1, akkor is kapunk eredményt, mégpedig azt hogy 255 + 1 = 0 A jelenséget túlcsordulásnak hívjuk Racionális számoknál ha két eltér nagyságrend számot adunk össze, például 23 kettedesjegynél nagyobb a nagyságrendbeli különbség, akkor A 0: A + B = B el fordulhat Nem mindig igaz, pontosságvesztés miatt, hogy (x/y) y = x, tehát valós számoknál ne használjunk egyenl ségvizsgálatot
Típusok osztályozása Általános osztályozása a típusoknak A programozási nyelvekben el forduló típusokat az alábbiak szerint lehet csoportosítani: Típusok Összetett típusok Elemi típusok Iterált Skalár Mutató Unió Diszkrét Valós Direktszotzat Felsorolási Fixpontos... Egész Lebeg pontos
Beépített alaptípusok JAVA nyelven Primitívek A továbbiakban a JAVA nyelv alaptípusait vesszük sorra A Java objektum alapú nyelv, azaz néhány kivételt l eltekintve minden típusa objektum. Amik nem objektumok, azokat primitíveknek nevezzük. Primitívek Java-ban: boolean: Logikai típus byte: 8-bites el jeles egész short: 16-bites el jeles egész int: 32-bites el jeles egész long: 64-bites el jeles egész float: 32-bites lebeg pontos racionális szám double: 64-bites lebeg pontos racionális szám char: 16-bites Unicode karakter
Beépített alaptípusok JAVA nyelven Primitívek A továbbiakban a JAVA nyelv alaptípusait vesszük sorra A Java objektum alapú nyelv, azaz néhány kivételt l eltekintve minden típusa objektum. Amik nem objektumok, azokat primitíveknek nevezzük. Primitívek Java-ban: boolean: Logikai típus byte: 8-bites el jeles egész short: 16-bites el jeles egész int: 32-bites el jeles egész long: 64-bites el jeles egész float: 32-bites lebeg pontos racionális szám double: 64-bites lebeg pontos racionális szám char: 16-bites Unicode karakter
Beépített alaptípusok JAVA nyelven Csomagoló osztályok Minden egyes primitív típusnak létezik egy objektum párja, amit csomagoló osztálynak hívunk. Boolean: boolean Byte: byte Short: short Integer: int Long: long Float: oat Double: double Character: char Objektum alapú programozási szemlélet miatt vannak. Értékük csak úgy változtatható meg, hogy új példány jön létre, aminek ugyanaz lesz a változóneve. (Egyúttal a régi érték példány elérhetetlen lesz)
Beépített alaptípusok JAVA nyelven Tömbök A tömb ahhoz hasonlít, amit matematikában vektornak hívunk. A memóriában folytonosan több ugyanolyan típusú változó foglalódik le deklarációkor, amelyet indexelten lehet elérni. Java nyelven egy egészekb l álló tömb deklarációja a következ képpen történik: Deklaráció tombtipusa [] tombneve ; Egy létrehozott tömb hossza nem változtatható meg a kés bbiekben, viszont lehet ség van újabb, nagyobb deklarációjára.
Beépített alaptípusok JAVA nyelven Tömbök értékadás Egy tömbnek értéket adni többféleképpen lehet: Értékadás Felsorolással int [] tombneve; tombneve = {1,2,3,4,5}; Ugyanakkor létrehozható egy tömb kezd értékek nélkül is, csak a méret megadásával: Értékadás Üres létrehozása int [] tombneve; tombneve = new int[10];
Beépített alaptípusok JAVA nyelven Tömbök értékadás Illetve a tömb értékadásánál lehet ség van egy másik tömbbel egyenl vé tenni Értékadás Másik tömbbel int [] masiktomb = {0, 1}; int [] egyiktomb = masiktomb; Fontos, hogy ekkor a memóriában egyetlen tömb lesz csak, ugyanakkor kétféle változónévvel lehet elérni. (B vebben az objektumoknál.)
Beépített alaptípusok JAVA nyelven Tömbök használat A tömbök tartalmát indexeléssel érjük el, a számozás 0-val kezd dik. Például int [] egyiktomb = new int[10]; Az el z tömb esetén 0... 9 indexek érvényesek, a többi kiindexel a tömbb l. Egy tömb méretének megismerését a következ példa mutatja be: Tömbméret int tombmerete = egyiktomb.length;
Beépített alaptípusok JAVA nyelven Tömb, mint típus Deklaráció tombtipusa [] tombneve ; A tömbök is típusok, azaz szerepelhetnek tömb objektum létrehozási paramétereként: Deklaráció tipus [] [] matrix; Ezáltal két-, vagy többdimenziós tömböket is létre lehet hozni, a korlát a memória mérete (Kétdimenziós vektorok mátrixok)
Karakterláncok Karakterláncok Nagyon hasznos típus a karakterlánc String (objektum) Deklaráció String s; Értéket adni idéz jelek között megadott szöveggel lehet: Értékadás String s = "Szervusz világ"; Ha idéz jelet szeretnénk belevinni a szövegbe akkor: Idéz jelek egy karakterláncban String s = "Szervusz \"szép\" világ";
Karakterláncok Karakterláncok Hasonlóan a csomagoló típusokhoz a karakterláncok sem változtathatóak meg. Amikor új értéket adunk, akkor egy új jön létre ugyanazzal a névvel a memóriában. Karakterek száma egy Stringben: Karakterlánc mérete String s = "Szervusz világ"; int meret = s.length();
M veletek M veletek
M veletek számokon Egész típusokon végzett m veletek A következ m veletek értelmezettek egész típusokon: (Precedencia) Növelés, csökkentés: ++, -- Multiplikatív: *, /, % (Szorzás, Maradékos osztás, és maradékos osztás maradéka) Additív: +, - Bitenkénti eltolás: <<, >> (Balra, jobbra) Bitenkénti m veletek:, &,, (Negálás, és, vagy, kizáró vagy) Relációs: ==,!=, <, <=, >, >= Unáris: +, - (el jelek) Értékadás: A változónak új értéket ad. = (Kombinálható más m velettel: +=)
M veletek számokon Racionális típusokon végzett m veletek A következ m veletek értelmezettek racionális típusokon: (Precedencia) Növelés, csökkentés: ++, -- Multiplikatív: *, /, % (Szorzás, Osztás, és maradékos osztás maradéka) Additív: +, - Relációs: ==,!=, <, <=, >, >= Unáris: +, - (el jelek) Értékadás: A változónak új értéket ad. = (Kombinálható más m velettel: +=)
M veletek számokon Érdekességek Java esetén minden értéknek van valamilyen típusa a kódban. Példa egészre Példa valósra 2 2.0 2.0F Ha egészeket osztunk, egészet kapunk eredményül, ha valósakat, akkor valóst. Példa egészre 10 / 3 = 3 Példa valósra 10D / 3 = 3.3333...
M veletek logikai értéken Logikai típusokon végzett m veletek A következ m velek értelmezettek logikai típusokon: Tagadás:! Relációs: ==,!= Logikai és, vagy: &&, Értékadás: A változónak új értéket ad. = (Az érték true vagy false)
M veletek karakterláncokon Karakterláncokon végzett m veletek A következ m veletek értelmezettek karakterláncokon Értékadás: A változónak új értéket ad. = Összef zés: + Több különböz karakterláncot f z össze
Függvények
Bevezetés Függvények bevezetés Olyan (rész)programok, amelyeknek bemen paramétereik vannak m veleteket végeznek valamilyen eredménnyel kimenettel rendelkeznek Minden Java programban van egy függvény, a main függvény, ami a program elindulásakor kezd futni Ha a main függvény futása befejez dik, akkor a program is befejez dik A main további függvényeket hív(hat) meg, illetve a függvények is továbbiakat hívhatnak meg...
Bevezetés Függvények bevezetés Példa main függvényre public static void main(string [] arguments) { int i = 10; int negyzet = i*i; KIIR (negyzet); } Ez a program kiszámolja az i 2, az i = 10 és kiírja.
Függvényhívás részletei Függvényhívás Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(side, height); } Ez a program egy háromszög területét számoló függvényt hív meg.
Függvényhívás részletei Függvényhívás Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(side, height); } Figyeljük meg a függvényhívást!
Függvényhívás részletei Függvényhívás aktuális paraméterek Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(side, height); } Figyeljük meg a függvény aktuális paramétereit!
Függvényhívás részletei Függvényhívás formális paraméterek Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(side, height); } Figyeljük meg a függvény formális paramétereit!
Függvényhívás részletei Függvényhívás paraméterátadás Területszámítás public double terulet(double oldal, double magassag) { return (oldal * magassag) / 2; } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(10, 8); } Paraméterek behelyettesítése
Függvényhívás részletei Függvényhívás számítás Területszámítás public double terulet(double 10, double 8) { return (10 * 8) / 2; // = 40 } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = terulet(10, 8); } Eredmény kiszámítása
Függvényhívás részletei Függvényhívás visszatérési érték Területszámítás public double terulet(double 10, double 8) { return (10 * 8) / 2; // = 40 } public static void main(string [] arguments) { double side = 10; double height = 8; double eredmeny = 40; } Visszatérési érték
Függvényszignatúra Függvényszignatúra Függvényszignatúra visszatérésitipus fuggvenynev (parameterdeklarációk ) A visszatérés típusát hívják a függvény típusának is A függvény neve bármi, kivéve a nyelv fenntartott szavai A paramétereknél vessz vel elválasztott változódeklarációk A függvény szignatúra alapján használjuk a függvényt
Függvénytörzs Függvénytörzs A függvénytörzs m veleteket végez Használhatja a bemen paramétereket, új változókat,... Benne van egy return, amit a visszatérési típusnak megfelel kifejezés követ ez lesz a függvény visszatérési értéke Lehet több return is, például elágazás esetén A return utasítással befejez dik a függvény, még akkor is, ha van mögötte további utasítás Annak a függvénynek, aminek nincs visszatérési típusa, void a típusa Semmilyen típus, nem hozható létre bel le példány
Paraméterek Paraméterek Formális paraméterek a függvényszignatúrában vannak deklalrálva, új változók! Ezek a függvény hívásakor felveszik az aktuális paraméterek értékét (hogy hogyan azt kés bb) Tehát a formális és aktuális paraméter más-más terület a memóriában. A változónév azonban lehet ugyanaz! A visszatérési érték, a függvény befejeztekor, annak az értékadó utasításnak a jobb oldala lesz, amiben a függvény neve szerepelt A függvények aktuális paraméterei lehetnek további függvényhívások!
Változók láthatósága Változók láthatósága Egy változó láthatósági körének nevezzük azt a részt a programban, ahol az adott változó és általa képviselt memóriaterület elérhet, módosítható. Egy változó hatáskörének nevezzük azt a részt programban, ahol a változó deklarációja érvényben van. Egy függvényen belül deklarált változó csak a függvényen belül látható és arra terjed ki a hatásköre. Egy utasításblokkon belül deklarált változó hasonlóan viselkedik az el z höz. Ezeket lokális változónak hívjuk.
Változók láthatósága Változók láthatósága Léteznek globális változók is, amelyeket több függvényb l el lehet érni, használatuk azonban nem javasolt. Példa a hatáskörre int i = 10; int j = 100; { int i = 50; } i++; j++; Az els i-nek a teljes példára kiterjed a határköre, azonban a bels részben nem látható. A második i csak a bels részben látható és a hatásköre is ugyanaz. Nem engedi látni a küls i-t, elfedi azt Az j a programblokkon belül is látható!
Objektum Orientált Programozás
Valós világ modellezése Valós világ modellezése Az ember a világ megértéséhez modelleket épít, alábbi alapelvekkel Absztrakció az a szemléletmód, amelynek segítségével a valós világot leegyszer sítjük, úgy, hogy csak a lényegre, a cél elérése érdekében feltétlenül szükséges részekre összpontosítunk elvonatkoztatunk a számunkra pillanatnyilag nem fontos, közömbös információktól és kiemeljük az elengedhetetlen fontosságú részleteket Megkülönböztetés az objektumok a modellezend valós világ egy-egy önálló egységét jelöli az objektumokat a számunkra lényeges tulajdonságaik, viselkedési módjuk alapján megkülönböztetjük
Valós világ modellezése Valós világ modellezése Az ember a világ megértéséhez modelleket épít, alábbi alapelvekkel Absztrakció az a szemléletmód, amelynek segítségével a valós világot leegyszer sítjük, úgy, hogy csak a lényegre, a cél elérése érdekében feltétlenül szükséges részekre összpontosítunk elvonatkoztatunk a számunkra pillanatnyilag nem fontos, közömbös információktól és kiemeljük az elengedhetetlen fontosságú részleteket Megkülönböztetés az objektumok a modellezend valós világ egy-egy önálló egységét jelöli az objektumokat a számunkra lényeges tulajdonságaik, viselkedési módjuk alapján megkülönböztetjük
Valós világ modellezése Valós világ modellezése Osztályozás Az objektumokat kategóriákba, osztályokba soroljuk, oly módon, hogy a hasonló tulajdonságokkal rendelkez objektumok egy osztályba, a különböz vagy eltér tulajdonságokkal rendelkez objektumok pedig külön osztályokba kerülnek Az objektum-osztályok hordozzák a hozzájuk tartozó objektumok jellemz it, objektumok mintáinak tekinthet k Általánosítás, specializálás Az objektumok között állandóan hasonlóságokat vagy különbségeket keresünk, hogy ezáltal b vebb vagy sz kebb kategóriákba, osztályokba soroljuk ket
Valós világ modellezése Valós világ modellezése Osztályozás Az objektumokat kategóriákba, osztályokba soroljuk, oly módon, hogy a hasonló tulajdonságokkal rendelkez objektumok egy osztályba, a különböz vagy eltér tulajdonságokkal rendelkez objektumok pedig külön osztályokba kerülnek Az objektum-osztályok hordozzák a hozzájuk tartozó objektumok jellemz it, objektumok mintáinak tekinthet k Általánosítás, specializálás Az objektumok között állandóan hasonlóságokat vagy különbségeket keresünk, hogy ezáltal b vebb vagy sz kebb kategóriákba, osztályokba soroljuk ket
Valós világ modellezése Valós világ modellezése Példa Sok embernek van kutyája különböz névvel és jellemz tulajdonságokkal objektumok (példányok) A kutyák, mint egy állatfaj egyedei sok mindenben hasonlítanak is például mindegyik tud ugatni
Valós világ modellezése Valós világ modellezése Osztályhierarchia Állat Háziállat Vadállat Macska Kutya Tigris Emu Bodri Morzsi Floki
Az OOP elmélete Objektumok és állapotaik Az objektumorientált program egymással kommunikáló objektumok összessége, ahol minden objektumnak megvan a feladata Az objektum: Információt tárol, kérésre feladatokat hajt végre Bels állapota van, üzeneten keresztül lehet megszólítani Objektum = adattagok + m veletek (függvények) Felel s feladatainak korrekt elvégzéséért Az objektum állapota Mindig van egy állapota, amit a mez k (objektumhoz tartozó változók) pillanatnyi értékei írnak le Az objektum m veleteket hajt végre, melyek hatására állapota megváltozhat Két objektumnak ugyanaz az állapota, ha az adattagok értékei megegyeznek
Az OOP elmélete Objektumok és állapotaik Az objektumorientált program egymással kommunikáló objektumok összessége, ahol minden objektumnak megvan a feladata Az objektum: Információt tárol, kérésre feladatokat hajt végre Bels állapota van, üzeneten keresztül lehet megszólítani Objektum = adattagok + m veletek (függvények) Felel s feladatainak korrekt elvégzéséért Az objektum állapota Mindig van egy állapota, amit a mez k (objektumhoz tartozó változók) pillanatnyi értékei írnak le Az objektum m veleteket hajt végre, melyek hatására állapota megváltozhat Két objektumnak ugyanaz az állapota, ha az adattagok értékei megegyeznek
Az OOP elmélete Osztály, példány Osztály (class) Olyan objektumminta vagy típus, mely alapján példányokat (objektumokat) hozhatunk létre Példány (instance) Minden objektum születését l kezdve egy osztályhoz tartozik Életciklusa van megszületik, él, meghal Létrehozásához inicializálni kell speciális függvény, a neve konstruktor Változóknak kezd értéket ad Az objektum m ködéséhez szükséges tevékenységek végrehajtása
Az OOP elmélete Osztály, példány Osztály (class) Olyan objektumminta vagy típus, mely alapján példányokat (objektumokat) hozhatunk létre Példány (instance) Minden objektum születését l kezdve egy osztályhoz tartozik Életciklusa van megszületik, él, meghal Létrehozásához inicializálni kell speciális függvény, a neve konstruktor Változóknak kezd értéket ad Az objektum m ködéséhez szükséges tevékenységek végrehajtása
Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)
Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)
Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)
Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)
Az OOP elmélete Mez k, m veletek, láthatóság Példányváltozó Objektumpéldányonként helyet foglaló változó Osztályváltozó Osztályonként helyet foglaló változó Példányfüggvény (-metódus) Objektumpéldányokon dolgozó metódus Osztályfüggvény (-metódus) Osztályokon dolgozó metódus Láthatóság Lehet ség van arra, hogy bizonyos függvényeket, változókat azt osztályhasználó számára láthatatlanná tegyünk (információ elrejtésének alapelve)
Az OOP elmélete Örökl dés Az állat osztálynak vannak bizonyos tulajdonságai (mez i) és függvényei Ha elkészítjuk a háziállat osztályt, nyilvánvaló, hogy sok olyan tulajdonsága lesz, mint ami az állatnak Lehet ség van az OOP nyelvekben a háziállat osztályt az állat osztály leszármazottjaként létrehozni, ekkor az összes mez t és függvényt örökli a háziállat, ami az állatban megvolt Természetesen további függvényeket és mez ket vehetünk a háziállatba... (Az örökl dés, dinamikus kötés és polimorzmus (statikus és dinamikus típus) nagyon messzire elvinne minket, így elméletben többr l nem esik szó. Fontos megjegyezni azonban, hogy a fentebbiek alapelvek, ennél sokkal színesebb paletta áll rendelkezésre)
Az OOP gyakorlata Java-ban Java osztály Osztály létrehozása public class osztálynév extends szül [és még más] { public int mezonev; private String mezonev;... public osztályneve (paraméterek ) { // Konstruktor } public int fuggvenyneve (paraméterek ) {...}... }
Az OOP gyakorlata Java-ban Néhány lehetséges kulcsszó A mez k és függvények el tt néhány kulcsszó: public: mindenki számára elérhet private: csak az adott osztályban protected: csak az adott osztályban és leszármazottjaiban nincs kulcsszó: adott osztályban, leszármazottjaiban és a csomagban static-kal jelöljük az osztálymez t illetve függvényt Ha egy mez final, akkor nem módosítható Ha egy osztály final, akkor nem örökölhet bel le tovább (Van még: abstract, synhronized, volatile, native... )
Az OOP gyakorlata Java-ban Java osztály Kutya osztály public class Kutya extends Allat { public String nev; public String fajta; public Integer eletkor; private Date [] oltasok_ideje; private String [] oltasok_neve; public Kutya () { oltasok_ideje = new Date[10]; oltasok_neve = new String[10]; }
Az OOP gyakorlata Java-ban Java osztály Kutya osztály public void ugat() { } public void megy() { } public void oltastkap(string s, Date mikor) { } }
Az OOP gyakorlata Java-ban UML diagram +Név: String +Fajta: String +Életkor: Integer #Oltások ideje: Date [] #Oltások neve: String [] +ugat(): void +megy(): void Kutya +oltástkap(mikor:date,mit:string): void
Java objektumok Java Objektum Az el z kutya osztály, mint típus az alábbiak szerint deklarálható Deklaráció Kutya bodri; Ez még csak deklaráció, a tényleges példány létrehozása a new kulcsszóval történik. Példányosítás bodri = new Kutya(); Ekkor a memóriában létrejön egy új Kutya objektum, valamint lefut annak a konstruktora. Miért m ködik ez így?
Java objektumok Java Objektum Az el z kutya osztály, mint típus az alábbiak szerint deklarálható Deklaráció Kutya bodri; Ez még csak deklaráció, a tényleges példány létrehozása a new kulcsszóval történik. Példányosítás bodri = new Kutya(); Ekkor a memóriában létrejön egy új Kutya objektum, valamint lefut annak a konstruktora. Miért m ködik ez így?
Java objektumok Java Objektum Amikor az Object osztály bármely leszármazottját (legyen az tömb, String, Double, Kutya... ) deklaráljuk, akkor a változó, ami lefoglalásra kerül a memóriában egy referenciát (memóriacímet) tartalmaz értékként Az referencia alapértelmezésben null! Azaz a változó képes egy adott típusú objektumra hivatkozni, de éppen nem hivatkozik egyre sem Ahhoz hogy hivatkozzon létre kell hozni egy új példányt, vagy egy meglév hivatkozást kell átadni értékként (egy meglév példányt) Példányosítás Kutya morzsi = new Kutya(); Kutya rex = morzsi;
Java objektumok Java Objektum A második miatt egyetlen Kutya példány van a memóriában, csak két névvel is hivatkozhatunk rá: morzsi és rex Egy objektumváltozó értéke Java-ban egy referencia a memóriában!
Java objektumok Java Objektum Egy objektumpéldány mez it és tagfüggvényeit a következ módon lehet elérni, meghívni Tagfüggvények, mez k bodri.ugat(); String kutyaneve = bodri.nev; Természetesen ez csak megfelel látható mez kre és függvényekre igaz. Egy osztály osztálymez it és függvényeit az osztály nevén keresztül célszer elérni Osztálymez Kutya.ALAPÉRTELMEZETTUGATÁSIHANGERŽ
Java objektumok Java Objektum Egy objektumpéldány mez it és tagfüggvényeit a következ módon lehet elérni, meghívni Tagfüggvények, mez k bodri.ugat(); String kutyaneve = bodri.nev; Természetesen ez csak megfelel látható mez kre és függvényekre igaz. Egy osztály osztálymez it és függvényeit az osztály nevén keresztül célszer elérni Osztálymez Kutya.ALAPÉRTELMEZETTUGATÁSIHANGERŽ
Referencia következményei Következmények Java nyelven, amikor függvényt hívunk, az aktuális paraméter értéke átmásolódik a formális paramétert jelent változóba. (Létrejön(nek) a függvényszignatúra szerinti új változó(k), és az értékük az lesz, ami a függvényhíváskor az aktuális paraméter volt.) Objektumok esetén ez a referencia lesz! Nem jön létre másolat az objektumról, hanem pontosan ugyanazon az objektumon dolgozunk, mint ami az aktuális paraméter. (Primitívek esetén létrejön másolat és a másolaton dolgozunk.) Csomagolók esetén nincs másolat, mivel azonban változtatáskor új jön létre, a tényleges hatás ugyanaz, mint a primitívek esetén.