OOP Alapelvek Elek Tibor
OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós folyamat, amelyben a valós világban létező jelenséget (megoldandó problémát) valamilyen programozási eszköz absztrakciós szintjén képezünk le. A modell alkotást megkönnyíti, ha a programozási eszköz a valós élethez közeli nyelvi elemeket tartalmaz. Azaz szükség van egy objektumot modellező nyelvi elemre.
OOP szemlélet Természetes objektum jellemzői - egyéniség (különállás) - struktúra: objektumot jellemző adatok együttese - állapot: az objektum adatainak aktuális értékei - viselkedés: más objektumokkal való kapcsolata
Természetes objektumok: példa Ficsor Lajos Elég bonyolult struktúrájú, számos viselkedés formára képes objektum. A vér alkoholszintje, mint adat a struktúrájához tartozik Az alkoholszint pillanatnyi értéke az állapothoz tartozik Egyes viselkedésformák (pl. sört iszik) módosíthatják az állapotot Más viselkedésformák működését (pl. járás) az aktuális állapot befolyásolhatja Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 4
Objektumtól objektumig A valós világ egy eleme Absztrakció Valós objektum Absztrakt adattípus Absztrakció és/vagy formális leírás 1. 2. Megvalósítása vmely programozási eszközzel (Implementáció) Nyelvi elem Osztály Nyelvi elem Objektum Objektum Objektum Példány létrehozása (Deklaráció) 3. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 5
Objektumtól objektumig: 1. szint Tanulmányozzuk a valós objektumokat, és megkeressük azoknak a probléma megoldása szempontjából fontos adatai és viselkedésmintáit. (Az absztrakció definíciójából a "leglényegesebb tulajdonságok kiemelése".) Például a Ficsor Lajos objektumnak a Neptun szempontjából lényegtelen az alkoholszintje, de lényeges, hogy melyik tanszéken dolgozik. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 6
Objektumtól objektumig: 1. szint (folyt.) Ezután megkeressük azon objektumcsoportokat, amelyek azonos adatokkal és viselkedésmintákkal rendelkeznek, és elnevezzük ezt a csoportot. (Az absztrakció definíciójából az "általánosítás".) Így jön létre a Neptun szempontjából az "oktató" fogalom. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 7
Objektumtól objektumig A valós világ egy eleme Absztrakció Valós objektum Absztrakt adattípus Absztrakció és/vagy formális leírás 1. 2. Megvalósítása vmely programozási eszközzel (Implementáció) Nyelvi elem Osztály Nyelvi elem Objektum Objektum Objektum Példány létrehozása (Deklaráció) 3. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 8
Objektumtól objektumig: 2. szint Az előzőleg definiált fogalom leképezése egy programozási eszközre (osztálydefiníció elkészítése). Ez valójában egy minta a program működéséhez szükséges objektumok létrehozására. Például a Neptun szempontjából egy oktatónak vannak lényeges adatai (neve, tanszéke, minősítése stb.) és vannak lehetséges viselkedésformái (kurzust hirdethet meg, vizsgaidőpontot írhat ki, jegyet adhat stb., de például nem nézheti meg egy hallgató adószámát.) Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 9
Objektumtól objektumig A valós világ egy eleme Absztrakció Valós objektum Absztrakt adattípus Absztrakció és/vagy formális leírás 1. 2. Megvalósítása vmely programozási eszközzel (Implementáció) Nyelvi elem Osztály Nyelvi elem Objektum Objektum Objektum Példány létrehozása (Deklaráció) 3. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 10
Objektumtól objektumig: 3. szint Akkor és annyi objektumot kell létrehozni a program futása során, amelyek együttműködve képesek a valóságot modellezni. Például amikor Ficsor Lajos oktató be akarja írni Kisházi Brünhilda hallgatónak a GEIAL214N kurzus vizsgájához tartozó jeles vizsgajegyet, akkor Létrejön egy oktató típusú objektum Ficsor Lajos adataival, egy vizsgaalkalom típusú objektum a megfelelő adatokkal, és egy hallgató típusú objektum Kisházi Brünhilda adataival. A Ficsor objektum üzen a vizsgaalkalom objektumnak, megadva a hallgató nevét és jegyét, aki (ellenőrzések után) egy üzenetet küld a hallgató objektumnak, megváltoztatva ezzel az állapotát. Ficsor Lajos Objektum orientált programozás (Bevezetés) OOPALAP / 11
Azok az elvek, amelynek egy OOP programozási nyelvnek, illetve a megírt programoknak, meg kell felelnie 1. alapelv: osztály, objektum Egy OOP nyelvben két új nyelvi elemre van szükség: - osztály - objektum
1. alapelv: osztály, objektum Osztály A modellezés során nyert absztrakt adattípus implementációja: Egy programozó által definiálható típus, amely tartalmazhat - adatokat az objektum struktúrájának modellezésére - metódusokat az objektum viselkedésének modellezésére
1. alapelv: osztály, objektum Objektum Egy osztály egy példánya. Egy osztály általában többször is példányosítható. A példányok ugyanazzal a viselkedésfajtákkal rendelkeznek, ugyanaz a struktúrája, de minden példány más állapottal rendelkezhet (azaz adatai más-más értékekkel rendelkezhetnek).
2. alapelv: egységbezárás (encapsulation) Az osztály egy egységbe zárja az objektum adatait és az azokkal dolgozó műveleteket. Az osztály saját névteret képez, azaz több osztályban is lehet ugyanolyan nevű adat vagy művelet. Valamint az osztályon belül az adatok és műveletek korlátlanul elérik egymást.
2. alapelv: egységbezárás (encapsulation) (pl. Egy háromszög területét számító metódusnak nem kell átadni az oldalakat, mint a C-ben kellett, hiszen a Haromszog osztály adatai közé tartoznak az oldalak, az területet visszaadó metódus szintén az osztály része. Az osztály metódusai pedig látják az osztály adatait. Ha a metódusnak híváskor átkellene adni az oldalakat ez az Elek Tibor mond meg a neved -nek felelne meg.)
3. alapelv: üzenet (message) Az üzenet az objektumok között kommunikáció formája. Technikailag az objektum metódusainak meghívását jelenti. (A Fo objektum üzen az elsokor nevű Kor típusú objektumnak, hogy növelje meg a sugarát 5-el, majd üzen, hogy add meg a területed: elsokor.sugarnovel(5); double ter = elsokor.terulet(); )
4. alapelv: adatrejtés (information hiding) - Az osztály műveleteinek implementációja osztályon kívülre nem látható (automatikusan teljesül) - Az osztály adatai, és műveletei csak szabályozottan legyenek elérhetőek. Kell egy mechanizmus, amellyel a programozó szabályozhatja az adatok, műveletek elérését, figyelembe véve a szabályokat. (A szabályok az idők során alakultak ki a szoftver minőség követelményeit szem előtt tartva.)
4. alapelv: adatrejtés (information hiding) Betartandó szabályok: A) az adatok ne legyenek közvetlenül elérhetőek a külvilág számára, legfeljebb metódusokon (függvényeken keresztül). Ennek előnyei: - tudom szabályozni, hogy csak olvasásra, csak írásra vagy írásra és olvasásra biztosítok elérést, azzal, hogy milyen metódusokat készítek. Pl. egy Idő osztályhoz készítek egy időt visszaadó metódust, de nem készítek időt beállítót.
4. alapelv: adatrejtés (information hiding) - Független lesz az adat elérése a tényleges ábrázolástól. Pl. az Idő osztálynak a metódusát, amely visszaadja az időt, vagy amelyik beállítja az időt ugyanúgy kell használni függetlenül attól, hogy három számmal tárolja az időt (10 óra 30 perc, 30 másodperc) vagy esetleg egy számmal (10*3600+30*60+30). - Az adatok beállításakor megtehető, hogy csak bizonyos értékeket lehessen beállítani. Pl. egy tanuló jegyét tároló egész típusú változót beállító metódus nem fogad el csak 1 és 5 közötti számot.
4. alapelv: adatrejtés (information hiding) B) A metódusok közül csak azok legyenek a többi objektum számára elérhetőek, amelyek az objektum kommunikációs felületéhez tartoznak.
5. alapelv: öröklődés (inheritance) Egy osztály létrehozható úgyis, hogy egy másik osztály leszármazottja. Ilyenkor az osztály örökli a szülője adatait, metódusait (tehát már nem kell ezeket definiálni), de lehet újakat is definiálni illetve lehet örökölt metódusokat módosítani (felüldefiniálni, a viselkedés a leszármazottban is létezik, de kicsit másképpen).
5. alapelv: öröklődés (inheritance) Az öröklődés jelentősége egyrészt valós életbeli osztályozás (leszármazás) modellezése, másrészt a kód újrafelhasználás. (pl. Állat, Emlős, Kutya: Az Emlős egy Állat, a Kutya egy Emlős. Pl. Sikidom, Kor: A Kor egy Sikidom) (Az öröklődést később még részletesen vesszük!)
6. alapelv: polimorfizmus Bizonyos viselkedések működése függ a környezettől, ahol alkalmazzuk. Pl. egy síkidom elmozdit viselkedése eltérhet, ha két koordinátát adok meg vagy ha egy Vektor-t adok meg. Pl. a Kor, ami a Sikidom leszármazottja, tehát örökli az elmozdit viselkedést, elmozdit viselkedése más lehet, mint az eredeti elmozdit Pl. egy összeadás operátor másként működhet ha egész számokra használom vagy ha String-ekre (szövegekre) (Később ezeket megnézzük részletesen!)