Zapouzdření vs abstrakce
Zapouzdření a abstrakce jsou dva různé, ale související pojmy, které se vyskytují v jazycích OOP (Object Oriented Programming). Zapouzdření je koncept kombinování dat a chování do jedné entity. Na druhou stranu abstrakce je proces prezentace toho, jak se entita chová/vypadá, v protikladu k tomu, jak je implementována.
Co je zapouzdření?
Zapouzdření je proces zabalení dat a operací, které s nimi pracují, do jediné entity. To v podstatě znamená, že pro přístup k datům by měly být použity určité předem definované metody. Jinými slovy, zapouzdřená data nejsou přímo přístupná. Tím je zajištěno, že je zachována integrita dat, protože uživatel nemůže přímo přistupovat a upravovat data, jak si přeje. Uživatelé získají nebo nastaví hodnoty dat pouze pomocí metod, které jsou uživatelům veřejně dostupné. Tyto metody obvykle poskytují validaci dat, takže do polí lze vkládat pouze data v příslušném formátu. Výhody Encapsulation jsou tedy trojí. Prostřednictvím Encapsulation může programátor vytvořit pole třídy pouze pro čtení nebo pouze pro zápis. Za druhé, třída může mít úplnou kontrolu nad tím, co je uloženo v jejích polích. Konečně, uživatelé třídy se nemusí starat o to, jak jsou její data uložena. V Javě může programátor prohlásit všechny proměnné instance za soukromé a poskytnout metody get a set (které jsou veřejné) pro přístup a úpravu soukromých polí.
Co je abstrakce?
Abstrakce je proces oddělení detailů prezentace od detailů implementace. To se provádí tak, aby byl vývojář osvobozen od složitějších implementačních detailů. Místo toho se programátor může zaměřit na prezentaci nebo detaily chování entity. Jednoduše řečeno, abstrakce se zaměřuje na to, jak lze určitou entitu použít, spíše než na to, jak je implementována. Abstrakce v podstatě skrývá detaily implementace, takže i kdyby se metodika implementace časem změnila, programátor by se nemusel obávat, jak to ovlivní jeho program. Systém může být abstrahován v několika vrstvách nebo úrovních. Například nízkoúrovňové abstrakce odhalí detaily hardwaru, zatímco abstrakce na vysoké úrovni odhalí pouze obchodní logiku entity. Termín abstrakce lze použít k označení entity i procesu, což vede k určitému zmatku. Jako proces abstrakce znamená extrahování podstatných detailů a ignorování nepodstatných detailů položky nebo skupiny položek, zatímco jako entita abstrakce znamená model nebo pohled na entitu pouze s podstatnými detaily. V Javě může programátor použít klíčové slovo abstract k deklaraci třídy jako abstraktní entity, která představuje základní definující charakteristiky entity reálného světa.
Jaký je rozdíl mezi zapouzdřením a abstrakcí?
Přestože zapouzdření a abstrakce jsou velmi příbuzné pojmy používané v jazycích objektově orientovaného programování, mají zásadní rozdíly. Abstrakce je technika, která nám pomáhá identifikovat, co by mělo být viditelné a co by mělo být skryté. Zapouzdření je technika balení informací tak, že zviditelní to, co by mělo být viditelné, a skrylo to, co by mělo být skryté. Jinými slovy, zapouzdření lze označit za jeden krok za abstrakcí. Zatímco abstrakce redukuje objekt reálného světa na jeho základní definující charakteristiky, zapouzdření rozšiřuje tuto myšlenku modelováním a propojením této funkce dané entity.