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
Valós objektum
1.
Absztrakció és/vagy formális leírás Absztrakció
2.
Absztrakt adattípus Megvalósítása vmely programozási eszközzel (Implementáció)
Nyelvi elem
Nyelvi elem
Objektum
Ficsor Lajos
3.
Osztály
Objektum
Példány létrehozása (Deklaráció)
Objektum
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
Valós objektum
1.
Absztrakció és/vagy formális leírás Absztrakció
2.
Absztrakt adattípus Megvalósítása vmely programozási eszközzel (Implementáció)
Nyelvi elem
Nyelvi elem
Objektum
Ficsor Lajos
3.
Osztály
Objektum
Példány létrehozása (Deklaráció)
Objektum
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
Valós objektum
1.
Absztrakció és/vagy formális leírás Absztrakció
2.
Absztrakt adattípus Megvalósítása vmely programozási eszközzel (Implementáció)
Nyelvi elem
Nyelvi elem
Objektum
Ficsor Lajos
3.
Osztály
Objektum
Példány létrehozása (Deklaráció)
Objektum
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
OOP alapelvek
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
OOP alapelvek
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
OOP alapelvek
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).
OOP alapelvek
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.
OOP alapelvek
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.)
OOP alapelvek
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(); )
OOP alapelvek
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.)
OOP alapelvek
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.
OOP alapelvek
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.
OOP alapelvek
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.
OOP alapelvek
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).
OOP alapelvek
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!)
OOP alapelvek
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!)