OOP po lopate - Dedenie a Abstraktnosť
Dedenie spolu s abstrakciou sú klúčové koncepty OOP. Sú to práve tieto kocepty, ktoré nám dovoľujú nie len sprehľadniť kód, ale aj ho členiť do logických častí.
Dedenie
Predstavme si príklad z úvodu:
**Zviera**
- eat()
- play()
**Pes (Zviera)** # Táto zátvorka znamená, že dedí od Zvieratka
- bark()
My vieme, že metódy ako papanie a hranie je pre každé jedno zvieratko, či už je to pes, mačka alebo zajačik. Skúsme teraz porozmýšlať nad rôznymi príkladmi zo života:
-
Majme Auto, Motorku, Bicykel uvážme čo majú spoločné povedzme, že maximálnu rýchlosť všetky môžu dosiahnuť maximálnu rýchlosť len majú iné hodnoty pre bicykel, auto… Preto, aby sme nepísali do nášho kódu stále
public Int maxSpeed
(napríklad) pre každú triedu Auto, Bicykel vieme o nich povedať, že sú dopravnými prostriedkami, tak si vytvoríme triedu dopravný prostriedok kde uložímepublic Int maxSpeed
. -
Vo firme existuje Zamestanec, ak sa zamyslíme nad ním, tak pracuje, má určité funkcie a my chceme teraz do našej aplikácie napríklad vložiť aj Manažéra, o manažérovi vieme, že je to zamestanec, ale má aj iné funkcie, môže napríklad vycestovať, vie kričať na zamestancov a podobne. Preto vieme nasledovné Manažér dedí od Zamestnanca.
Tak o čom to vlastne je? Ako vidíte snažíme sa hľadať niečo podobné, podobné vlastnosti, metódy. Následne vytvoríme takúto super triedu a povieme všetkým tým, ktoré majú tieto vlastnosti, aby od nej dedili.
Abstrakcia
Uhádnete, v ktorom prípade z tých dvoch je abstrakcia? Chvíľka napätia, dramatické bubnovanie… V prvom. Tadá. A teraz prečo?
Viete si predstaviť Dopravný prostriedok? Predstavili ste si auto alebo snáď motorku? No, to popravde neviem, pretože je to abstraktný pojem v tomto kontexte, povedal som vám, že budem mať triedy Auto, Motorku, Bicykel. Ale z toho vyplýva, že super trieda Dopravný prostriedok je niečo neurčité, čo zatiaľ nemá podobu a môže existovať len Auto, Motorka, Bicykel.
Ale, prečo nie Zamestnanec? Skúste si predstaviť zamestanca, napríklad programátora, môže to byť Jožo, Fero, Karol… Stále sú zamestanci, rozdiel medzi nimi nie je, možno Jožo programuje rýchlejšie, no stále je len inštanciou triedy Zamestnanec, jednoducho vieme vytvoriť zamestanca, ale dopravný prostriedok nevieme vytvoriť dokým si nepovieme vytvor Auto. Čo taký Manažér? Je to to isté, tiež si vieme nejakého predstaviť.
Implementacia
Väčšina jazykov využíva klúčové slovo extends
, čo znamená rozšír mi triedu, oddeď mi tie metódy a tribúty tej super triedy.
Abstrakcia funguje v dobrých jazykoch , hovorí len o jednom, túto triedu s abstract
nemôžeš inicializovať, respektíve
vytvoriť inštanciu.