Az objektum orientált programozás alapjai
A Szoftver krízis Egy légiirányító szoftver olyan bonyolult, hogy senki sem képes teljesen átlátni. A szoftvernek teljesen biztonságosnak kell lennie. A bonyolultság nem mehet a biztonság rovására. A hagyományos, struktúrált programozással ezek a követelmények nem valósíthatók meg. Szoftver krízis: hagyományos módszerekkel nem valósítható meg korszerű, minőségi szoftver.
Egy szoftver minőségi követelményei 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 (ISO Intenational Standard Organization)
Moduláris és objektumorientált programozás (Modulok, kapcsolatok) A rendszer modulokkal és a közöttük lévő kapcsolatokkal leképezhetők A modulok egymástól jól elkülöníthetők A lehető legkevesebb legyen a kapcsolatok száma Minél kisebb legyen a modulok hozzáférési felülete (interfész) Rendszer Modulok Kapcsolatok
Moduláris és objektumorientált programozás (Modulok, kapcsolatok) A modul interfésze legyen egyértelmű és jól meghatározott. A modul minél nagyobb része legyen zárt és sérthetetlen. Mindent el kell rejteni, ami nem feltétlenül szükséges a modul külső használatához. Rendszer Modul Kapcsolatok Modul Kapcsolatok
Moduláris és objektumorientált programozás (Modulok, kapcsolatok) Eljárás Adat Eljárás Adat Eljárás Adat
Az objektum jellemzői A legkisebb modul az objektum, amelyben az adatok és az eljárások össze vannak zárva. Az objektum adatain csak az objektum saját eljárásai dolgozhatnak. Az objektum védi saját adatait, idegen objektumok azokat nem használhatják. Egy objektum csak olyan feladatot tud elvégezni, amelyre beprogramozták. Az objektum információkat tárol, és kérésre feladatokat hajt végre. Az objektum felelős a feladatainak végrehajtásáért.
A valós világ modellezése Absztrakció Egy szemléletmód, amellyel a valós világot leegyszerűsítjük úgy, hogy a feladat szempontjából lényegtelen dolgokat elhanyagoljuk, csak a lényegre koncentrálunk Megkülönböztetés Az objektumokat a számunkra lényeges dolgok alapján próbáljuk megkülönböztetni (piros labda, kék labda)
A valós világ modellezése Osztályozás Az objektumokat a számunkra fontos tulajdonságok alapján kategóriákba, osztályokba soroljuk (ez a kutya olyan mint a másik, tehát kutyák) Általánosítás és specializáció Hasonlóságok és különbségek keresése, ezek alapján bővebb és szűkebb kategóriák felállítása (A kutya egy háziállat, de olyan, amelynek négy lába van)
A valós világ modellezése Kapcsolatok felépítése, részekre bontás Két objektum csak akkor kommunikálhat egymással, ha közöttük valamilyen kapcsolat van. Ismertségi, együttműködési kapcsolat Egymástól függetlenül is létezhetnek, egyik léte nem függ a másiktól. (kutya-ház) Tartalmazási, egész-rész kapcsolat Egy objektum határozottan része a másiknak, ha az egész elpusztul, akkor vele együtt a rész is elpusztul (kutya és annak szeme)
Mitől objektumorientált egy program? Egy OO programban nem eljárásokat hívunk, hanem objektumokat szólítunk meg, kérünk meg feladatok elvégzésére. Az objektumorientált program egymással kommunikáló programok összessége, melyben minden objektumnak megvan a jól meghatározott feladata. Egy objektum szolgáltatásokat tud nyújtani, mégpedig csak olyan szolgáltatásokat, amelyekre őt beprogramozták.
Egy objektumorientált rendszer felépítése A szolgáltatást kérőnek meg kell tudni szólítani az objektumot. (azonosító ismeret) A feladat végrehajtásának módja az objektum belügye. Minden objektumnak van egy „interfész” része, amelyen keresztül az objektummal kommunikálni lehet. Az objektumokat üzeneteken keresztül kérjük meg feladatok elvégzésére
Egy objektumorientált rendszer felépítése Objektum Interfész Üzenet, kérés
Az objektumorientált rendszer felépítése Meg kell határozni, hogy a rendszerben milyen objektumok szükségesek Szét kell osztani az objektumok között a feladatokat Ki kell választani egy objektumot, amely felelős az egész program végrehajtásáért Egy objektum megkérhet más objektumokat bizonyos feladatok végrehajtására
Az objektumorientált rendszer felépítése A rendszerben minden objektumnak megvan a jól meghatározott feladata Egy objektum felelős feladatának végrehajtásáért még akkor is, ha bizonyos feladatokat „mással” végeztet el Ugyanarra a kérelemre különböző objektumok különbözőképpen reagálhatnak (hogyan programozták be őket?)
Az objektumorientált rendszer jellemzői Objektum Információt tárol, és kérésre feladatokat hajt végre. Az objektum felelős feladatainak korrekt végrehajtásáért. Objektumorientált program Egy objektumorientált program egymással kommunikáló objektumok összessége melyben minden objektumnak megvan a jól meghatározott feladata.
Az objektumorientált rendszer jellemzői Üzenet, kérelem Az objektumokat üzeneteken keresztül kérjük meg különböző feladatok elvégzésére Felelősség Minden objektumnak megvan a jól meghatározott feladata. Az objektum felelős a feladatai elvégzéséért.
Az objektumorientált rendszer jellemzői Bezárás, információ elrejtése A feladatok elvégzésének „hogyan”-ja az objektum belügye. Az objektum belseje sérthetetlen. Az objektummal csak az interfészen keresztül lehet kommunikálni. Többalakúság Ugyanarra a kérelemre a különböző objektumok különbözőképpen reagálhatnak.
Az objektumorientált rendszer jellemzői Osztályozás Az objektum példányokat viselkedésük szerint osztályokba soroljuk. Öröklődés Egy osztály örökölhet viselkedésformákat egy másik osztálytól. Az utód osztályban csak az ős osztálytól való eltéréseket kell megadni.
Objektumok jellemzői Az objektum információt tárol, és kérésre feladatokat hajt végre. Az objektum adatok (attribútumok) és metódusok (műveletek) összessége, mely felelős feladatai elvégzéséért. Nagy József 1988 Siófok Elköltözik (Új cím) Növekszik(Cm/év) Adatok (attribútumok) Metódusok (műveletek)
Az objektum állapota Az objektumnak mindig van egy aktuális állapota – az adatok pillanatnyi értékei. Egy feladat elvégzése után az objektum állapota megváltozhat. (növekszik) Az objektum mindig „emlékszik” az állapotára (elköltözik) Szöveg 20,10 15,5 7,1 Töröl Ír(szöveg) Bal felső sarok Szélesség, magasság Kurzor pozíció
Az objektum azonosítása Az objektumokat egyértelműen azonosítani kell Két objektumnak akkor is különbözőnek kell lennie, ha minden jellemzőjük, állapotaik azonosak Az objektumok változóneveikkel, vagy pointerekkel azonosíthatók Fiu1 Fiu2
Osztály, példány Az ugyanolyan adatokat tartalmazó, ugyanolyan metódusokkal rendelkező objektumokat egy osztályba soroljuk. Ha Kis Gézáról ugyanazokat az adatokat tartjuk nyilván, mint Nagy Kati, valamint ha a két ember ugyanazokat a feladatokat tudja végrehajtani, (növekszik, elköltözik), akkor a két ember ugyanahhoz az osztályhoz tartozik. Növekszik feladat esetén az egyik „megtagadja” a növekedést.
Osztály, példány Az objektum osztály (típus) egy objektum minta, amely alapján objektum példányokat (objektumokat) hozhatunk létre. Az EMBER egy OSZTÁLY, ami alapján Kis Géza és Nagy Kati PÉLDÁNYOK létrejöttek, ők az EMBER osztály egy-egy példánya. EMBER Név Szülév Cím Magasság Elköltözik (Új cím) Növekszik(Cm/év)
Osztály, példány: Az objektumot a programban azonosítani kell. Minden objektumban egyedi nevet adunk. Az objektum osztályhoz tartozik, ettől kezdve az objektum szabályai szerint él, „tudja”, hova tartozik. KisGeza,NagyKati:Ember; Ablak1,Ablak2:Ablak; Az osztály és példány összetartozást a rendszer figyeli Ha két objektumnak ugyan az az állapota, akkor ugyanarra a kérésre, ugyanúgy reagál.
Osztály, példány: Amikor egy objektumot felkérünk egy feladat végrehajtására, akkor az objektumnak üzenetet küldünk. Az üzenet formája: Objektumnev.Metodus. Pl: Objektumosztály:Ember Objektumnév:KisGeza Metódus:Novekszik(10) KisGeza.Novekszik(10)
Osztály, példány: Ember Nev Szulev Cím Magassag Elköltözik (Új cím) Növekszik(Cm/év) Osztály Osztály neve Attribútumok Adatok Változók Metódusok Kis Géza 1988 Balatonboglár 168 cm Elköltözik (Siófok) Növekszik(5) Példány
Üzenetküldés Egy objektum „felkérhet” más objektumokat különböző feladatok elvégzésére. A felkérést üzenetküldésnek vagy kérelemnek nevezzük. Az üzenet egy kívülről elérhető metódus (eljárás vagy függvény) hívása.
Üzenetküldés Kliens-szerver kapcsolat: Kliens: a feladatot elvégeztető objektum Szerver:a feladatot elvégző objektum Mindig a kliens üzen a szervernek. KliensSzerver Üzenet Kérelem
Objektum inicializálása Az objektumnak életciklusa van. Minden objektum egyszer „megszületik”, aztán „él”, és végül „meghal”. Születéskor az objektumba be kell táplálni a kiinduló adatokat, ez lesz az objektum kezdeti állapota. Az objektum inicializálása az objektum kezdeti adatainak megadásából, és a működéshez szükséges kezdeti tevékenységek végrehajtásából áll. Az inicializáló metódus végzi az objektum létrehozását.
Bezárás, információ elrejtése Az objektum legfontosabb jellemzője, hogy zárt és „sérthetetlen” A kliens számára felesleges információkat bezárja, elrejti. Előnyei: más programrész nem tudja „elrontani” Az objektumban keletkezett esetleges hiba nem tud átterjedni más programrészekre Bezárás: az adatok, metódusok „betokozása” Inf. elrejtés: Az objektumot csak az interfészén keresztül lehet megközelíteni.
Bezárás, információ elrejtése Az objektum csak olyan üzenetre reagál, amelyre beprogramozták Az információ elrejtésével a hibák mennyisége lényegesen csökkenthető. Az interfész a lehető legkisebb legyen Adatok Metódus1 Metódus2 Metódus3 Interfész
Kód újrafelhasználása Az egyszer már megírt, és jól működő programkódot ugyanabban, vagy másik programban újra felhasználjuk A már létrehozott osztályból példányokat hozunk létre Ahány példányt létrehozunk, annyiszor használjuk újra a megfelelő osztály kódját
VÉGE