Přijde mi že skoro všechny matematické objekty "dědí" způsobem, že se přidávají nějaké podmínky a ubývají stupně volnosti. Naproti tomu běžné dědění umí stupně volnosti spíš přidávat a přidávání podmínek jde taky dost blbě. Minimálně pokud ten objekt není invariantní. I u reálných objektů mi přijde, že vztah je spíš přidává další a další omezení.
Na tohle mi daleko víc pasují classy v Haskellu. Čtverec je immutable, takže se nedá rozbít i když se s ním pracuje jako s obdélníkem. Classy nemají žádná data ale jenom "metody" respektive funkce. V podstatě je to dědičnost omezená na interfacy.
Jak nad tím tak přemýšlím, tak v C++ už dlouho používám public dědičnost jen pro abstraktní třídy (interfacy) a privátní dědičnost jako implementační hack.