Buďto jazyk konstrukce OOP umí, pak umí vytvářet objekty a je objektový, nebo je neumí, pak to nejsou objekty. Co je na tom tak složitého?
S tím bych moc nesouhlasil. Objektové paradigma se dá realizovat různě - viz Java vs. Smalltalk vs. Common Lisp. "Objekt" je abstraktní pojem a jeho konkrétní implementace v tom kterém jazyce je věcí jinou. Nadto i ten abstraktní pojem znamená i v těch výše jmenovaných jazycích pokaždé něco trochu jiného. Objekt v pojetí CLOS se dost liší od Javy i Smalltalku, vlastně je to analogie prachsprostého záznamu a polymorfismu se dosahuje pomocí generických funkcí. Celé je to implementované "jen" v Common Lispu, tedy jazyku neobjektovém. Podobně se dá udělat objektová nadstavba třeba u Forthu. A jako protipříklad bych použil C++, jež sice objekty jakože umí, ale v mých očích to nikdy objektový jazyk nebyl (aby se předešlo různým flamům a nedorozuměním, tak předesílám, že pokud jde o OOP, tak jsem odkojenec Smalltalku).
Podobně např. Assembler je typický špagetový jazyk, ale je-li kompilátor vybaven dobrým makroprocesorem, dá se v něm solidně programovat i strukturovaně.
Takže s pomocí pár procedur a maker bych si asi dokázal napsat cosi, s čím bych mohl vyrábět objekty a programovat objektově i v normálním, neobjektovém C. Ostatně Objective C přesně takto začínalo a přitom jde o rozhodně víc objektový jazyk než C++ (opět v tomto místě raději připomínám svou vazbu na Smalltalk).
A pokud jde o pochopení/nepochopení dědění a jeho praktického používání, tak na základě svých celoživotních zkušeností to vidím zhruba tak, že na papíře v učebnicích to vždycky vypadá všechno krásně jasně, přehledně, elegantně, jakoby tam skoro nebyl žádný problém. Ale když má člověk upravit cizí program, tak musím konstatovat, že myšlenkové pochody, jež vedly zrovna k takové konkrétní hierarchii tříd, jsou mi mnohdy velkou záhadou a logiku celého programu rozhodně neosvětlují, ale spíše zatemňují, a práci rozhodně nešetří, ale přidělávají, protože většinu času netrávím implementací požadované funkcionality, ale přemýšlením, jak to do toho všeho vlastně zašroubovat, aniž bych to musel celé přepsat, nebo aniž bych to tam dobastloval stylem šroub zatlučený kombinačkami.
Základní antagonismus OOP spatřuji v tom, že bylo zamýšleno k zjednodušení a zpřehlednění programu, k usnadnění práce a k zamezení "prasení". Jenže toto vše více-méně funguje jen tehdy, když 80% práce udělá opravdový fachman a ostatní už to jen k sobě skládají (opět, viz Smalltalk nebo třeba COCOA). Pokud na tu zelenou louku přijde psát from scratch objektový program někdo průměrný nebo dokonce podprůměrný, efekt objektového návrhu bude přesně opačný.