Ep. 20 – OOP Part 4 (Enkapsulácia)
V OOP chceme ochrániť naše objekty pred tým, aby si s nimi každý mohol robiť čo chce. Na toto nám slúži enkapsulácia a o enkapsulácii je aj táto epizóda. Vďaka enkapsulácii vieme skrývať interný stav objektov a prístup k tomuto stavu upraviť podľa potreby – get/set. Vďaka enkapsulácii sú zmeny v kóde lepšie izolované, redukujú sa nám test cases a znižuje sa nám previazanie kódu. Ale pozor, všetko treba brať opäť s mierou.
00:00 – 00:29 Úvod
00:30 – 02:06 Čo je to enkapsulácia
02:07 – 03:55 Príklad – auto
03:56 – 06:47 Načo sa používa enkapsulácia
06:48 – 11:12 Access modifiers
11:13 – 15:43 Prečo nemôže byť všetko public
15:44 – 18:36 Access modifiers v.2
18:37 – 24:20 Mini tips ohľadom enkapsulácie
24:21 – 25:09 Enkapsulácie znižuje impakt zmien
25:10 – 27:54 Loose coupling
27:55 Záver
Enkapuslácia
- skrývanie hodnôt, stavu a funkcionality
- zabraňuje tomu, aby používateľ objektu vedel dostať tento objekt do nevalídneho stavu
- schovávame implementačné detaily – abstrakcia
Príklad auto
- bez enkapsulácie vieme zabočiť ľavým kolesom doprava a pravým doľava – auto pokazíme
- namiesto toho kolesá schováme pred verejnosťou (private) a spravíme verejnú metódu zaboč()
- auto interne vie (alebo ten kto ju vytváral), že auto zabáča vždy oboma kolesami
- používateľ nemusí vôbec vedieť ako auto zabáča, hlavne že zabáča
Access modifiers
- týkajú sa propertiesov a metód
- private – iba daná trieda vie k vlastnostiam pristupovať
- protected – daná trieda a jej deti (triedy od nej dediace) vedia k vlastnostiam pristupovať
- internal (C#) – public pre daný projekt (reálne assembly)
- package private (Java) – public pre daný package – nedostupné mimo packagu
- public – dostupné pre všetkých
Prečo nemôže byť všetko public
- menenie propertiesov môže mať veľa side-effectov, ktoré viem ošetriť/zabezpečiť v setteri
- vďaka enkapsulácii vieme spraviť read-only alebo write-only properties
- bez settera nevieme napr. volať OnPropertyChanged() pri nastavení propertiesu
Mini tips
- za každou private metódou sa schováva trieda – je to tak?
- properties po väčšine majú byť private a ak treba, tak podľa potreby pridávame get/set
- pri písaní nových tried/metód/propertiesov je fajn začať s najnižšími právami a postupne podľa potreby ich zvyšovať
Ďalej o enkapsulácii
- zmeny kódu sú viac izolované
- loose coupling – tým, že sa nechýtam vnútorností triedy sa znižuje previazanie kódu – neriešim dve kolesá auta, ale iba to, aby zabočilo
- opäť treba hladať tú správnu mieru
- enkapsulácia zjednodušuje aj testovanie
Užitočné odkazy
Jakubova hra, ktorá učí základné koncepty OOP
Stará dobrá Wiki
OOP pre 6 ročných