Pamatuju se na podobnou diskuzi, kde někdo psal, že OOP není přirozené pro naše myšlení, ale já jsem opačného názoru. Když přemýšlím nad tím, jak vytvořit abstrakci něčeho, tak přemýšlím nad chováním a nad vlastnostmi - v řeči OOP je to něco třída, chování vyjádřeno metodami a vlastnosti pomocí datových členů.
To jsem byl možná já. Jo, nad chováním a nad vlastnostmi přemýšlíš, ale vytvářet z nich hierarchie je spíš záležitost školní než něco z reálného života. Víš, že psa i kočku můžeš drbat, ale nevytváříš si nějaký mentální model abstraktní skupiny Drbable

A pokud s nějakými vlastnostmi pracujeme jako s konstituenty nějakých množin, tak z nich nevytváříme hierarchie. Spíš vnímáme, že určité úplně rozdílné (nesouvisející) věci mají nějaké společné vlastnosti, jako třeba že ta věc je sešroubovaná šroubky, takže se dá otevřít pomocí šroubováku. A zároveň máš úplně jinou množinu věcí, které jsou třeba kovové. Obě vlastnosti konstituují nějakou abstraktní množinu (Šroubable a RedThings), ale nevytvářejí žádnou hierarchii a ani tu hierarchii nemůžeš vytvořit i kdybys chtěl.
Proto si myslím, že je daleko přirozenější pracovat s volně kombinovatelnými rozhraními/protokoly než s hierarchiemi tříd. Jediné, kde se s hierarchiemi extenzivně pracuje, je biologie: strunatci => savci => ... V normálním životě se to ale obvykle nedělá.