...Středobodem OOP není dědění ani zapouzdření, jak se s oblibou omílá jako mantra, ale polymorfismus, k němuž je nezbytná pozdní vazba...
Tak pozor, zapouzdření JE jednou z klíčových vlastností OOP, protože tím zajišťuje izolaci problému v objektu, ale dohadovat se tu o tom nemíním, to už tu bylo.
Polymorfismus pochopitelně, ale ten je vlastně pouze důsledkem té pozdní vazby, ne vytvořený překladačem jako u podtypového kvazipolymorfismu.
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. Tak se člověk snažil programovat i v BASICu na 8bitech v rámci možností, které ten jazyk nabízel, tj. při absenci lokálních proměnných. Na "zapouzdřené" funkční moduly se dělí i samotný počítač, ale třeba i rádio, nejde-li o nějakou reflexní konstrukci. U OOP se to začalo zdůrazňovat hlavně v souvislosti s jazykovými prostředky, které to zapoudření zabezpečují i fakticky, což je podle mě celkem zbytečná věc.
Odvozování podtříd pomocí dědění je zase spíše taková zkratka, jak zrecyklovat existující kód, ale není v ničem významnější než třeba kompozice, která se tak zdaleka nezdůrazňuje.
Ovšem polymorfismus, to je něco, na čem OOP stojí a padá - ať už realizovaný na základě zpráv, nebo pomocí generických funkcí (u nichž zase ztrácí smysl zapouzdření, jak ho chápou jazyky jako Java). A ten zase stojí a padá s pozdní, přesněji velmi pozdní vazbou. Nechci se hádat o tom, co je předpokladem čeho, já chápu pozdní vazbu jako technické řešení polymorfismu a pojem polymorfismus za výstižnější, protože přesně popisuje, oč tu jde - o mnohotvárnost v typech objektů, jež se mohou vyskytnout na těch samých místech v různých okamžicích běhu programu. Časná vazba u statického typování je v příkrém rozporu s tímto přístupem, proto je tak obtížné toho polymorfismu ve staticky typovaných jazycích dosáhnout, proto je k tomu 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á.