Gyakorlati alapok III.
Öröklődés (inheritance)
Specializálódás – Általánosizálódás
A fenti 2. kifejezés természetesen csak szójáték, helyette általánosítást kell mondanunk, ez a hivatalos terminus technicus. Az előző fejezetben értesülhettünk az öröklődés előnyeiről. Ennek során, azaz új osztály öröklődéses létrehozásakor alapjában véve 2 irányt vehetünk fel:
-
speciális tulajdonságokat általánosítunk (általánosítás),
-
általános tulajdonságokat egyre konkrétabbakká teszünk, azaz specializálunk (specializálódás).
Először beszéljünk általánosságban az általánosításról. Fő jellegzetessége, hogy
ekkor egyedi tulajdonságot teszünk általánossá. Gyakran
alkalmazzuk, ha hosszabb távú, sokszor globális következtetéseket szeretnénk
levonni, sajnos sokszor okoskodó hangvétellel. Éppen ezért az általánosítás
legtöbbször téves, egyszerűen nem igaz. Például:
-
minden kisgyerek neveletlen,
-
minden férfi szereti a focit.
Programozás-technikailag: az általánosítás során több osztályból kiemeljük a közös jellemzőket. Például:
Háromszög – Négyzet - Kör
↓
Síkidom
↓
Objektum
Az osztályok tervezésekor ez a megfelelő irány.
Ennek során a lehető legáltalánosabb megközelítésből haladunk az egyre
speciálisabb felé.
Például:
Objektum
↓
Síkidom
↓
Háromszög – Négyzet - Kör
Az öröklődés implementációja szempontjából ez a megfelelő irány.
Mivel a legfelső szinten a lehető legáltalánosabb osztály van, egy logikusan
felépített és jól továbbalakítható (osztály)hierarcha kialakítására van
lehetőségünk, amelyet természetszerűleg a
Java-API
osztálykönyvtára már tartalmaz is. Igazából ez sem újdonság: ilyen, a
specializálódás műveletét alkalmazó hierarchiák máshol is előfordulnak,
például a biológiában: