Skip to main content

3M. Tétel: Objektumorientált paradigma

Az objektumorientált paradigma alapfogalmai.

Programozási paradigma:

  • Az a mód, ahogyan egy-egy programozási nyelv létrehozására felhasználják a programozási alapfogalmakat. Valamint az a stílus, amit az így létrehozott nyelvek sugallnak.

Egységbe zárás (Encapsulation):

  • Lényege, hogy minden objectnek az classon belül az állapotai privátak legyenek, hogy más objectek ne tudják azt direkt módosítani, esetleg publikus függvények segítségével, amiben szabályokat adhatunk meg, hogy minek kell teljesülnie, hogy a változtatás sikeres legyen.

Absztrakció (Abstraction):

  • Lényege, hogy egy nagy adatösszességből kiemeljük a közös, lényeges tulajdonságokat és viselkedésmódokat, az eltérőeket, lényegteleneket pedig elhanyagoljuk. Ennek az előnye, hogy az így kinyert adatokat akár másik programhoz is felhasználhatjuk, akár bármilyen változtatás nélkül.

Öröklődés (Inheritance):

  • Lényege, hogy az egyik objekt tulajdonságai átadhatóak legyenek a másik objektnek (újrafelhasználhatóság). Pl: gyümölcsök esetén. Ha van egy Fruit classunk, akkor amit abba beleírunk, az az összes gyümölcsre igaz lesz, és örökölhetik. Az adott classhoz meg hozzáírjuk a sajátosságait, ha szükséges.

Polimorfizmus (többalakúság):

  • Akkor van jelentősége, amikor több, egymással kapcsolatban álló classunk van az öröklődésnek köszönhetően. Például van egy animal classunk, és benne egy animalSound() függvény. Ezen animal class sub-classjai öröklődés esetén megkapják ezt a függvényt és sajátukként használhatják fel, vagyis felülírhatják (Overrideolhatják).
  • Lehet:
    • Statikus (fordítási időben) Method overloading-nál használatos.
    • Dinamikus (futási időben) Method overriding-nál használatos.

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.

Aggregáció:

  • Rész-egész kapcsolat. A részek alkotják az egészet. Például tojás = tojásfehérje + sárgá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)

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 komponens módosítását.

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

Osztály:

  • Az osztály az egy felhasználó által létrehozott blueprint vagy prototípus, ami alapján az objecteket létrehozzuk.
  • Reprezentálja a tulajdonságok összességét vagy metódusokat, melyek gyakoriak az azonos típusú objekteknél.
  • Tartalmazhat:
    • Hozzáférési módosítókat (public vagy private)
    • Osztály kulcsszót
    • Osztály nevét
    • Super-osztály
    • Interfész
    • Törzs (benne változók, függvények, konstruktor)

Objektum:

  • Alapegysége az objektum orientált programozásnak, és egy adott osztályhoz kapcsolódóan jön létre. A létrehozás folyamata a példányosítás, egy osztálynak bármennyi példánya lehet.
  • Van jól definiált tárbeli címe, adott címen példányosított osztály attribútumai helyezkednek el, tehát az adott példányhoz tartozó adatrész jelenik meg.

Példányosítás:

  • 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 (az objektum mindenképpen kezdőállapotba kerül, olyan nincs, hogy állapota nem definiált). A kezdőállapotba hozás speciális eszköze a konstrukor, ennek csak példányosításkor van szerepe (new kulcsszó). Innentől kezdve az objektum él, és osztályának megfelelően viselkedik. A konstruktor ellentétes művelete a destruktor, általában a konstruktor lekötött erőforrásait szabadítja fel.

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

Osztályhierarchia:

  • Az object-oriented programozásban minden class öröklődés szintjén áll kapcsolatban egymással. Minden class egy másik class subclass-a, ami a subclass fölött van, ő a superclass. Egy subclass minden olyat megörököl, amit a superclass tud, de tartalmazhat új információkat és újradefiniálhat régieket.
  • Ha minden classnak egy superclassa van, akkor azt egyszeres öröklődésnek hívjuk, ha több, akkor többszörös öröklődésnek.
  • Az egyszeres öröklődés osztályhierarchiája egy fa, a többszörösé pedig egy gráf.
  • Minden class legtetején pedig az Object class áll.
  • Ő a legalapabb class, neki nincs superclassa.
  • Amikor egy metódust meghívunk egy objektumon, akkor a metódus először az objektum osztályát keresi meg, utána annak a superclass-át, és így tovább fel a hierarchián.

Polimorfizmus, metódustúlterhelés.

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 az aktuális paraméterek számainak vagy sorrendjének megadása döntik 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ályok:

  • Az absztrakt osztályok célja, hogy egy blueprintet nyújtsanak a származtatott osztályoknak és felállítsanak néhány szabályt, amit a származtatott osztályoknak muszáj lesz implementálniuk, amikor megöröklik őket. Az absztrakt osztályok nem példányosíthatóak.
  • Lehetnek nem absztrakt metódusai is.
  • Nem támogatja a multiple inheritance-t.
  • Változóinak nem muszáj csak static és final-nak lenni, az interace-szel ellentétben.
  • Implementálhat interface-t, viszont az interface nem implementálhat abstract class-t.
  • Class tagjai lehetnek publicon kívül privátak és protectedek is, ellentétben az interface-szel.

Interface:

  • Egy classhoz hasonlóan egy interfacenek lehetnek metódusai és változói, de a metódusok egy interfaceben mind absztraktak.
  • Azt mondja meg, hogy egy classnak mit kell csinálnia, nem azt, hogy hogyan (blueprint of a class).
  • Minden metódust ami egy interfacebe van deklarálva, ha egy class implementálja az interface-t, akkor muszáj implementálni az összes metódusát is.
  • Ha egy class implementálja az interface-t de nem tervezi minden metódus használni (nem ír mindegyik metódus törzsébe), akkor a class absztrakt.
  • Megvalósíható vele a multiple inheritance, mert egy class több interface-t is implementálhat.

Típustagok.