OOP je celé o "dependency managment", pomáha oddeliť oddeliť nízkoúrovňovú logiku aplikácie od tej vyššej úrovne ako je interakcia s užívateľom, umožňuje navrhovať systémy tak, aby boli ľahko rozšíriteľné. OO ponúka aj vysokú úroveň abstrakcie.
Hlavní smysl OOP v mainstream jazycích je ušetření práce a zvýšení přehlednosti. Nic víc za tím nehledej, není to tam.
A
jakým způsobem se té přehlednosti podle tebe dosáhlo? Třeba vylepšeným editorem kódu, rozčleněním kódu do odstavců, dokumentačními komentáři nebo čím?
A co je to přesně to OOP? Abysme věděli o čem se vlastně diskutuje
S jistotou to neví nikdo. Ani ti největší odborníci v oboru se nejsou schopni dohodnout co to vlastně znamená. V knize Základy objektově orientovaného návrhu v UML autor popisuje tuto historku:
Když jsem poprvé vstoupil do království OOP, rozhodl jsem se vytvořit definici OOP jednou pro vždy. Sehnal jsem tucet chlapíků z OOP světa a zamkl je v pokoji bez jídla a vody. Řekl jim, že je pustím až poté, co se dohodnou na definici, kterou bych mohl předat žádostivě čekajícímu publiku.
Po hodině křiku a rachotu v pokoji následovalo ticho. Protože jsem se bál nejhoršího, opatrně odmkle dveře a nahlédl na potenciálně krvavou scénu. Všichni guru byli naživu, seděli však samostatně a nikdo s nikým nemluvil.
Zřejmě každý začal sezení tím, že se snažil ustanovit definici OOP pomocí časem dobře prověřené vědecké praxe hlasitého a neustálého opakování svého tvrzení. Když tento postup nikam nevedl, všici souhlasili s vytvořením seznamu vlastností OOP prostředí a 6-10 bodech, které sami jednotlivě považovali za nezbytné.
Měli 2 volby, vytvořit jeden dlouhý seznam, který byl souhrnem všech jednotlivých seznamů, nebo vytvořit krátký seznam, který by byl průsečíkem jejich jednotlivých seznamů.
Zvolili druhou možnost a výsledkem byl krátký seznam vlastností, které se nacházely na všech jednotlivých seznamech.
Ten seznam byl opravdu krátký. Obsahoval jedno slovo - "zapouzdření".
Problém spočívá v tom, že termín OOP postrádá smysl, takže jeho definice je libovolná. Přesto se vrhám do propasti a nabízím
svůj seznam vlastností, které tvoří základ OOP.
Zapouzdření - sseskupení souvisejících idejí do jedné jednotky, na kterou se lze odkazovat názvem. Takovým zapouzdřením může být i obyčejný podprogram.
Objektově orientované zapouzdření - zabalení operací a atributů představující nějaký stav do jednoho typu objektu. Daný stav je přístupný či upravitelný pouze skrze rozhraní.
Skrývání informací a implementace - omezení externí viditelnosti určitých informací nebo implementačních detailů, která jsou pro strukturu zapouzdření interní. Jinými slovy, nikomu nic není do toho jak dělám to co dělám, v krajním případě ani do toho co dělám. Něco jako černá skříňka se vstupy a výstupy.
Z další vlastností to mohou být:
zachování stavu, identita objektů, zprávy, třídy, dědičnost, mnohotvarost, obecnost.