Mluvim o tom, ze se najednou rozhodnete zmenit objektovy model (mapovani veci z realneho sveta na jednotlive objekty/tridy). Tohle proste rozumne nejde, nebo to stoji strasne moc usili, protoze toto uz neni uvnitr zapouzdreneho objektu, ale je to zmena rozhrani, na ktere jsou uz vsichni ostatni prizpusobeni.
Nemáte pravdu. Zaprvé, pokud je potřeba změnit model, pak je jasné, že někdo špatně udělal analýzu, špatně věc vymodeloval. Ano stává se to, většinou lidi příjdou o prémie. Práce s tím je jak v C, tak v C++. V C++ se to většinou řeší wrapováním objektu. Původní třída zůstane, ale emuluje staré rozhraní na nové třídě. Takhle třeba funguje kompatibilita v DirectX. DirectX10 poskytuje objekty DirectX9, které jsou pouze emulují rozhraní a samy volají DirectX10. Podobně DirectX8 emuluje rozhraní přes DirectX9. Atd. Pokud byste dneska psal program v DirectX3, tak je (teoreticky možné), že požadavky zaslané na DirectX3 jsou poslány na objekty 4, ty je posílají na objekty 5... až to končí u 10, která to provede. Prakticky to není tak horrible, bude tam spoustu zkratek. Kompatibilita je zaručena, nové programy stejně vznikají na nové rozhraní.
Nic předělávat nemusíte, pouze vytvoříte znova a starou funkcionalitu emulujete. Právě že díky tomu, že objekt je černá krabička se vůbec nemusíte starat o to, jestli ta černá krabička poskytuje funkcionalitu přímo, nebo je pouhou emulací nové verze.
Ale kde v realnem svete (snad krome grafickeho rozhrani, jehoz vznik primo souvisi se vznikem OO programovani) nejakou dedicnost realne vyuzijete, aby vam usetrila ten duplicitni kod?
Každých deset minut.