Adatstruktúrák, algoritmusok, objektumok 3. Az objektumorientált paradigma alapelemei Objektum Osztály Példányosítás A konstruktor és a destruktor Osztályok közötti kapcsolatok
Miklós Árpád, BMF NIK, 2006
[email protected]
1
Objektum Definíció • Az objektum állapottal rendelkező entitás, amely a benne tárolt adatok felhasználásával feladatokat hajt végre és egyéb objektumokkal kommunikál – Adatokat és algoritmusokat tartalmaz – Saját feladatait önállóan végzi • Saját „életciklussal” rendelkezik • A „külvilággal” meghatározott üzeneteken keresztül tartja a kapcsolatot
• Az objektum saját adatait mezőknek, beépített algoritmusait metódusoknak nevezzük – Az objektumok metódusaikkal vesznek részt az üzenetváltásokban – Az üzenetek elemei: célobjektum, metódus, paraméterek, eredmény
V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
2
2
Objektum Állapotok, viselkedés és azonosság • Az objektum állapotát mezői aktuális értéke határozza meg – Az objektum állapota az elvégzett műveletek hatására megváltozhat – Az objektum mindig „megjegyzi” aktuális állapotát – Két objektum állapota akkor egyezik meg, ha minden megfelelő mezőértékük megegyezik
• Minden objektum egyértelműen azonosítható – Az objektumok önállóak (saját életciklusuk határozza meg őket) – Ha két objektum állapota megegyezik, maguk az objektumok akkor sem azonosak
• Az objektum viselkedését az általa ismert (az objektumba épített) algoritmusok határozzák meg
V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
3
Példa: programozható időkapcsoló
3
Osztály Definíció • Az osztály egy adott objektumtípust határoz meg annak adataival (mezők) és beépített algoritmusaival (metódusok) – Az osztályok egyfajta mintát, sablont adnak az objektumokhoz • Az osztályok tehát azonos adatszerkezetű és viselkedésű objektumokat írnak le
• Minden objektum valamilyen létező osztályba tartozik – Más kifejezéssel élve az egyes objektumok azon osztályok példányai, amelyekhez tartoznak – Egy osztályból több példány is létrehozható – Egy osztály összes példánya ugyanazokat a mezőket és metódusokat tartalmazza • Az egyes példányok létrehozásuk pillanatában azonos állapotúak, ezt követően viszont önállóan működnek tovább • Léteznek az osztályra (és nem az egyes objektumpéldányokra) jellemző mezők és metódusok is V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
4
4
Osztály Példa: az Autó osztály és két példánya (UML) Objektum (példány) Osztály (típus) Példányosítás
Autó
Meződefiníciók
Gyártó Típus Rendszám
Metódusdefiníciók
V1.15
EgyikKocsi : Autó Suzuki Ignis 4WD 5MT KQX-987
Mezőértékek
Objektum (példány)
Beindul() Leáll() Megy() Fordul() Szerviz()
MásikKocsi : Autó Lamborghini Murciélago LP640 KQX-988
… EgyikKocsi.Beindul(); EgyikKocsi.Megy(); MásikKocsi.Beindul(); …
Példányosítás
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
Mezőértékek
5
5
Objektumorientált szoftverciklus Elemzés, tervezés, megvalósítás • Objektumorientált elemzés (OOA) – A megoldandó feladat leírása osztályok és objektumok segítségével
• Objektumorientált tervezés (OOD) – A feladatleírás objektumközpontú részekre bontása (dekompozíciója) • Logikai modell – az osztályok és objektumok • Fizikai modell – a logikai modellt megvalósító modulok és folyamatok • Statikus és dinamikus jellemzők
• Objektumorientált programozás (OOP) – A modell megvalósítása egymással kommunikáló, dinamikusan létrehozott objektumok segítségével, melyek egy-egy osztály példányai • OO stílusú programokat bármilyen nem OO nyelven is lehet írni, csak nagyon nehéz
• Részletesebb, pontosabb információk később (a szoftvertechnológiával foglalkozó tantárgyak keretében) V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
6
6
Metódusok általános típusai Objektumok létrehozása (példányosítás): konstruktor • Ahhoz, hogy az objektumokat használhassuk, először létre kell hozni őket – Ez a művelet a példányosítás – Alapja az osztály megadott definíciója – A példányosítást követően érhetők el az objektumok metódusai és ekkortól érhető el az objektumok mezőinek értéke
• A konstruktor egy olyan metódus, amelynek segítségével példányok (objektumok) hozhatók létre egy osztályból – Feladatai: • Új objektum létrehozása • Az objektumhoz tartozó mezők kívánt kezdőértékének beállítása • Egyéb szükséges kezdeti műveletek végrehajtása
• Minden osztályhoz tartoznia kell konstruktornak – Ha külön nem definiálunk konstruktort, akkor is létrejön V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
7
7
Metódusok általános típusai Objektumok megszüntetése (felszámolás): destruktor • Az objektumokat az utolsó használat után fel kell számolni – Minden objektum külön-külön szüntethető meg (önállóan léteznek)
• A destruktor egy olyan metódus, melynek segítségével létező objektumok szüntethetők meg – Egyetlen feladata az objektum megszüntetése
• Az objektumok felszámolása lehet a programozó feladata vagy történhet automatikusan is – Egy objektum akkor számolható fel automatikusan, ha a későbbiekben már biztosan nincs rá szükség – Az automatikus felszámolás fejlettebb és jóval kevésbé hibaérzékeny megoldás – Automatikus felszámolás esetén nincs feltétlenül szükség destruktorra
V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
8
8
Metódusok általános típusai Módosító, kiválasztó és iterációs metódusok • Módosító metódusok – Megváltoztatják az objektum állapotát
• Kiválasztó metódusok – Hozzáférést biztosítanak az objektum adataihoz, de nem változtatják meg őket (így az objektum állapotát sem)
• Iterációs metódusok – Az objektum adatainak valamely részhalmazán „lépkednek végig”, és az adott részhalmazra vonatkozóan végeznek el műveleteket
V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
9
9
Osztályok közötti kapcsolatok 1. Leszármazás (ún. „IS-A” kapcsolat) • Egy osztály leszármazottai „öröklik” az osztály jellemzőit – Rendelkeznek ugyanazokkal a mezőkkel – Tartalmazzák ugyanazokat a metódusokat – Ebben a specializációs kapcsolatban a leszármazottat „utódnak”, az eredeti osztályt „ősosztálynak” nevezzük
• A leszármazottak bővíthetik az ősosztály adatait és algoritmusait – Új mezőket adhatnak a meglévőkhöz – Új metódusokat definiálhatnak – Meglévő metódusok működését módosíthatják
• A leszármazottak minden műveletre képesek, amelyre az ősosztály képes volt – Az utódosztály példányai használhatók az ősosztály példányai helyett V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
10
10
Osztályok közötti kapcsolatok Példa: leszármazás (UML) Jármű Gyártó Típus Tulajdonos Beindul() Leáll() Halad() Szerviz() Változatlanul örökölt mezők Új mezők
Változatlanul örökölt metódusok Módosított metódusok
Autó
Hajó Gyártó Típus Tulajdonos Merülés Hívókód
Gyártó Típus Tulajdonos Szárnyfesztáv Hatótávolság
Beindul() Leáll() Halad() Szerviz() Fordul()
Beindul() Leáll() Halad() Szerviz() Elsüllyed()
Beindul() Leáll() Halad() Szerviz() Felszáll() Leszáll()
Új metódus(ok) V1.15
2007. október 11.
Repülő
Gyártó Típus Tulajdonos Meghajtás Rendszám
Miklós Árpád, BMF NIK, 2007
[email protected]
11
11
Osztályok közötti kapcsolatok 2. Asszociáció • Az asszociáció osztályok közötti tetszőleges típusú viszony – Általában az asszociáció konkrét elnevezése fejezi ki a viszonyt • Szerep (pl. az ember az autó tulajdonosa) • Cselekvés (pl. az ember vezeti az autót)
– Multiplicitás: vannak „egy-egy”, „egy-több” és „több-több” típusú asszociációk – Irányultság: az asszociáció lehet egy- vagy kétirányú
• Asszociációs kapcsolat áll fenn két osztály között, ha az egyiknek a saját helyes működéséhez ismernie kell a másikat – Példa: egy osztály használ egy másik osztályt (ún. „USES-A” kapcsolat)
V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
12
12
Osztályok közötti kapcsolatok Példa: asszociáció (UML)
Asszociáció
Iskola
alkalmaz
tanul 0..*
0..* Oktató
órán vesz részt
Hallgató birtokol Leckekönyv
V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
13
13
Osztályok közötti kapcsolatok 3. Aggregáció és kompozíció (ún. „HAS-A” kapcsolat) • Az aggregáció az asszociáció speciális esete: tartalmazási kapcsolat – A kapcsolat aszimmetrikus és tranzitív – A tartalmazó osztály példányai magukban foglalják a tartalmazott osztály egy vagy több példányát – A tartalmazó és a tartalmazott osztály egymástól függetlenül létezhetnek • A tartalmazott átveheti (de nem örökli) a tartalmazó egyes jellemzőit
• A kompozíció az aggregáció speciális esete: szigorú tartalmazási kapcsolat – Egy tartalmazottnak mindig csak egy tartalmazója lehet • Egy tartalmazó viszont tetszőleges számú tartalmazott példánnyal rendelkezhet
– A tartalmazó és a tartalmazott életciklusa közös V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
14
14
Osztályok közötti kapcsolatok Példa: aggregáció és kompozíció (UML) Ablak Varázsló
Kompozíció
Képnyomtató 1
1
Lista
Kép 5
Aggregáció
0..*
Gomb
3 Címke
Bélyegkép V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
15
15
Az OOP néhány csapdája Mire kell ügyelni az osztályok kialakításánál? • Rossz döntés az osztályok közötti kapcsolat típusának megválasztásánál – Pl. leszármazás helyett aggregáció vagy fordítva
• Leszármazási kapcsolat helytelen kialakítása – Az ősosztály túl keveset vagy túl sokat „tud”
• Önkéntelenül (nem látható módon) beépített feltételezések – Az ősosztály feltételez bizonyos állapotváltozásokat, a metódusok végrehajtási sorrendjét – ez nem biztos, hogy a leszármazottaknál is igaz lesz
• „Felduzzasztott” osztályok – A túl sok mező és metódus, a túl hosszú metódusok azt jelezhetik, hogy valamilyen módon fel kell bontani az osztályt
• Elnevezési anomáliák V1.15
2007. október 11.
Miklós Árpád, BMF NIK, 2007
[email protected]
16
16