Skip to main content

3A. Tétel: Objektumorientált paradigma

Az objektumorientált paradigma alapfogalmai.

Egységbezárás:

Az adatok és a metódusok osztályba való összezárását jelenti.

Absztrakció:

Segítségével privát implementációkat rejthetünk el egy nyilvános interfész mögé

Öröklődés:

egy objektumot vagy egy osztályt alapjául választunk egy másik objektumnak vagy osztálynak, megtartva a hasonló implementációt. A legtöbb osztály-alapú objektum-orientált nyelvben egy öröklődésen keresztül létrehozott objektum a „gyermekobjektum” megkapja az ő „szülőobjektumának” minden tulajdonságát és viselkedését, leszámítva a konstruktorokat, destruktorokat, túlterhelt operátorait és barát függvényeit.

Polimorfizmus:

Többalakúság. Egy típuselméleti fogalom, amely szerint egy ősosztály típusú változó hivatkozhat ugyanazon közös ősosztályból származó osztályok példányaira. A polimorfizmus lehet statikus és dinamikus.

Programozási paradigma:

Programozási mód. Alapvetően a program felépítésére használt eszközkészletet jelenti.

Absztrakt adattípus:

Az adattípus leírásának legmagasabb szintje, amelyben az adattípust úgy specifikáljuk, hogy az adatok ábrázolására és a műveletek implementációjára semmilyen előírást nem adunk. Lehetőleg matematikai fogalmakat használva írjuk le az adattípust.

Objektumorientált programozás:

Olyan programozási paradigma, amely a programokat objektumokból építi fel. A program működése tulajdonképpen objektumok kommunikációját jelenti. Legfontosabb alapelvei: egységbezárás, öröklődés, polimorfizmus.

Osztály:

Az osztály egy felhasználói típus, amelynek alapján példányok hozhatók létre. Az osztály alapvetően adat és metódus definíciókat tartalmaz.

Objektum:

Információt tárol és kérésre műveleteket végez. Van állapota, viselkedése és futásidőben azonosítható.

Üzenet:

Objektumhoz továbbított kérés. Válaszként az objektum végrehajtja a kért műveletet.

Információ elrejtése:

Az objektum elrejti az adatait és bizonyos műveleteit. Ez azt jelenti, hogy nem tudjuk pontosan, hogy egy objektumban hogyan vannak az adatok ábrázolva, sőt a műveletek implementációit sem ismerjük. Az információk elrejtése az objektum biztonságát szolgálja.

Metódusok felülírása:

Egy osztályhierarchián belül az utódosztály újradefiniálja az ősosztály metódusát. (azonos név, azonos szignatúra). Ha ősosztály típusú mutatón vagy referencián keresztül érjük el az osztályhierarchia példányait és ezen keresztül meghívjuk a felülírt metódust, akkor futási időben dől el, hogy pontosan melyik metódus kerül meghívásra. (dinamikus, futásidejű kötés).

Konstruktor:

Az a művelet, amely inicializálja az objektumot. Automatikusan hívódik. Egy osztályhoz annyiféle konstruktort készítünk, ahányféle képpen lehetővé tesszük a példányok inicializálását.

Destruktor:

A konstruktorral ellentétes művelet, általában a konstruktorban lekötött erőforrásokat szabadítja fel. Az objektum megsemmisítése előtt hajtódik végre és automatikusan hívódik.

Függőség:

Komponensek közötti függőség mértéke. Megkülönböztetünk laza és szoros csatolású rendszereket. A laza csatolású rendszerek esetében, a rendszer valamely komponensének változása nem vonja maga után a többi komponenes módosítását.

Aggregáció:

Rész-egész kapcsolat. A részek alkotják az egészet. Például az autó motor, váz és kerekek aggregációja. A részek túlélhetik az egészet.

Kompozíció:

Sajátos aggregáció, amikor a rész szorosan hozzátartozik az egészhez. A részek nem élik túl az egészet. Például az emberi agy szorosan hozzátartozik az emberhez

Delegálás:

Implementációs mechanizmus, melynek során egy objektum továbbítja (delegálja) a kérést egy másik objektum fele. A delegált objektum fogja feldolgozni a kérést. Példa: Java eseménykezelés (az eseményfigyelő fele továbbítódik a kérés)

Iterátor:

Olyan típus, amely pozíciót határoz meg egy halmazban (tároló, adatfolyam). Műveletein keresztül biztosítja a tároló bejárását, azaz a tárolt elemek egymás utáni feldolgozását.

Algoritmus:

Általánosan megvalósított függvény, amely minimális követelményt támaszt azon adatokkal szemben, amelyeken végrehajtódik.

Függvényobjektum:

Függvényként viselkedő objektum. Az az előnye a függvénymutatóhoz képest, hogy mint objektum, állapotot is tárol, nemcsak függvényként viselkedik. Megvalósítás: olyan osztállyal, amelyben értelmezzük a függvényhívás operátort. Ezen kívül az osztály tartalmazhat adattagokat és más segédműveleteket is.

Függvénysablon:

Típusparaméterekkel ellátott függvény, amely egy függvénycsaládot határoz meg.

Osztálysablon:

Típusparaméterekkel ellátott osztály, amely egy típuscsaládot határoz meg

Privát örökítés:

Hozzáférés-szűkítő hatása van. Az ősosztálytól átvett adat és metódustagok privát tagokká alakulnak, ezáltal az utódosztály már nem biztosítja az ősosztály által meghatározott viselkedésmódot. Az utódosztály az ősosztály implementációját örökli és nem annak interfészét.

Osztály, objektum, példányosítás.

Osztály

Az osztály egy felhasználói típus, amelynek alapján példányok (objektumok) hozhatók létre. Az osztály alapvetően adat és metódus definíciókat tartalmaz.

Objektum

Az objektum információt tárol és kérésre műveleteket végez. Van állapota, viselkedése és futásidőben azonosítható.

Példányosítás

A példányosítás során egy létező osztályhoz kapcsolódóan létrehozunk egy példányt, amihez hozzárendelődik egy tárcím, ahol beállítódik a kezdőállapot.

Öröklődés, osztályhierarchia.

Öröklődés

Az öröklődés az újra felhasználhatóság fontos eszköze, imperatív OO-nyelvekben osztályokhoz kötődik, mindig van egy alaposztály a viszony definiálásánál, ehhez kapcsolódóan, vele öröklési viszonyban jön létre az alosztály, mely definiálása pillanatától átveszi bezárás által megengedett láthatósági szintű szuperosztály-beli attribútumokat és metódusokat, és ezeket azonnal használhatja. Emellett új attribútumokat és metódusokat definiálhat, metódusokat újra implementálhatja.

Osztályhierarchia

Az osztályhierarchia egyszeres öröklődésnél fa, többszörös öröklődésnél a ciklikus gráf, mindkettőben értelmezhetőek utak, egy úton elhelyezkedő osztályok iránytól függően egymás leszármazott - vagy elődosztályai. Az egymással öröklődési viszonyban nem lévő osztályok a kliensosztályok. Az öröklődési viszony aszimmetrikus, a leszármazott látja a szuperosztály eszközeit, a szuperosztály viszont a leszármazott új eszközeit már nem.

Polimorfizmus, metódustúlterhelés.

Polimorfizmus

Egy alosztály újra implementálhatja szülőosztálya metódusait, specifikációját nem módosíthatja, implementációját viszont újraírhatja. Ahol ez megtörténik, polimorf metódus lesz. A kötés dönti el, ezek közül melyik fusson le. A kötés két fajtája a statikus, aminél fordításkor eldől, híváskor melyik fut le, és a dinamikus, aminél futási időben dől el.

Metódustúlterhelés

OO-rendszerek általában megengedik a metódusnevek túlterhelését, adott osztályban lehetnek azonos nevű metódusok, ilyenkor kiértékelés (paraméterlista) dönti el, melyik fut le.

A bezárási eszközrendszer.

Az OO lényege az, hogy az objektumok belső szerkezete el van rejtve a program többi része elől, az objektum állapotát csak az adott objektum ismeri, kívülről pedig csak szabályozottan, a metódusokon keresztül tudjuk ezt változtatni.

Absztrakt osztályok és interfészek.

Absztrakt osztály

Olyan osztály, amelynek van legalább egy absztrakt művelete. Felületet határoz meg és nem lehet példányosítani. Absztrakt osztály az absztrakt műveleteinek implementálását az utódosztályokra bízza. Mivel nincs konkrét viselkedésmódja, nem példányosítható, csak örököltethető, a viselkedésmintát leszármazott osztályok konkretizálják.

Interfész

Viselkedésmódot definiál. Gyakorlatilag egy művelethalmaz deklarációját jelenti. Ha egy osztály implementál egy adott interfészt, akkor példányai az interfészben meghatározott viselkedéssel fognak rendelkezni. Csak konstans adattagokat tartalmazhat és minden tagja nyilvános.

Típustagok.

tulajdonságok, metódusok, konstruktorok, mezők