Izolace problému v objektu se principiálně neliší od izolace problému v modulu u jakéhokoli typu návrhu, neboli to není nic nového, co by přišlo až s OOP.
Samotná izolace ne, ale objekty jsou mnohem víc! Jsou to izolované výpočetní jednotky, kterých si za běhu můžete jednoduše vytvořit, kolik chcete, a zase je smazat, jednoduše na ně ukazovat, nebo je naopak skrýt zapouzdřením, aby se viděly jen některé. To už je kurva novinkou!
...jazykovými prostředky, které to zapoudření zabezpečují i fakticky, což je podle mě celkem zbytečná věc.
Jasně, zapouzdření je přece na hovno. V ložnici přece taky nebudeme věšet záclony, aby nebylo dovnitř vidět, jak (a s kým) tam šukáte, stačí na okno napsat "NEKOUKAT". Nebo zamykání baráku. Taky na hovno, opět stačí napsat "NEPOVOLANÝM VSTUP ZAKÁZÁN" a už vám to nikdo nemůže vybrabčit. Nebo na kino stačí pověsit cedulku "Bezezbraňová zóna" a diváci jsou v bezpečí. Vždyť je to tak jednoduché!
To je spíš jen otázka organizace struktury programu. V neobjektovém návrhu mi nic nebrání vytvářet, mazat a ukazovat na proměnné, představující vzájemně izolovaná data, nad nimiž operují příslušné procedury. Zásadní je rozbití vazby mezi jménem procedury a konkrétním typem dat a odložení svázání s konkrétní procedurou až na poslední chvíli, tím vzniká polymorfismus. Ale to lze realizovat i jinak, třeba v Lispu se to dělá pomocí generických funkcí, které nejsou součástí žádné třídy, ale podle typu objektů, na které je volám, poznají, jakou konkrétní metodu mají zavolat. Třída je pak jen seznam jmen atributů a metod, její instance seznam konkrétních dat. Polymorfní to celé je, ale zapouzdřené? Sémanticky ano, technicky vůbec. À propos - znáš hodně lidí, kteří třeba v C pitvají útroby struktury FILE, jen protože jim v tom nic nebrání? Takovéhle operace jsou jak střelit se do vlastní nohy. Určitý smysl by to dávalo jen u objektů uchovávajících citlivá data, jež nejsou určena mně. Ale pokud by jejich zabezpečení mělo záviset na zapouzdření (v tom technickém smyslu), tak by byla zabezpečená dost mizerně. Proto v tom technickém znepřístupnění nevidím nic zásadního. Pokud by bylo myšleno to zapouzdření v sémantickém smyslu, tak to by bylo něco jiného. Ale taky nic až tak zásadního.
Ovšem polymorfismus ... realizovaný ... pomocí generických funkcí (u nichž zase ztrácí smysl zapouzdření, jak ho chápou jazyky jako Java).
Generické funkce jsou taková ta omrdávka typového systému, pamatuju si to dobře, ne? Jak ale souvisejí se zapouzdřením, mi musíte vysvětlit.
Nikoliv. Viz výše. To jsem se jen špatně vyjádřil.
...nezbytný rozsáhlý aparát na obcházení té časné vazby, proto jsou vymýšlený různé idiomy, jak typový systém obejít, a.k.a design patterns. A proto je většina programů v Javě nebo v C++ ve skutečnosti jen pramálo objektová.
Z návrhových vzorů řešících nedostatky v implementaci OOP si z hlavy vybavuju pouze dekorátor, což je ovšem typický příklad řešící chybějící pozdní vazbu v jazycích s podtypovým kvazipolymorfismem.
A taky všechny možné factory, proxy, mediátory, state, template method... To jsou všechno obraty v dynamicky typovaných jazycích jednoduché jak facka, takže nikoho nenapadlo je nějak pojmenovávat, ale teprve u těch statických se muselo přijít na idiomy, jakými se to chování známé z těch dynamických nasimuluje.