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