Man kann oft hören, dass OOP natürlich der Art und Weise entspricht, wie Menschen über die Welt denken. Ich würde dieser Aussage jedoch stark widersprechen: Wir (oder zumindest ich) konzipieren die Welt in Bezug auf Beziehungen zwischen Dingen, denen wir begegnen, aber der Fokus von OOP liegt auf der Gestaltung einzelner Klassen und ihrer Hierarchien.
Beachten Sie, dass im täglichen Leben Beziehungen und Aktionen hauptsächlich zwischen Objekten bestehen, bei denen es sich in OOP um Instanzen nicht verwandter Klassen gehandelt hätte. Beispiele für solche Beziehungen sind: "Mein Bildschirm befindet sich oben auf der Tabelle"; "Ich (ein Mensch) sitze auf einem Stuhl"; "Ein Auto ist unterwegs"; "Ich tippe auf der Tastatur"; "Die Kaffeemaschine kocht Wasser", "der Text wird im Terminalfenster angezeigt."
Wir denken in zweiwertigen (manchmal dreiwertigen, wie zum Beispiel in "Ich gab dir Blumen") Verben, bei denen das Verb die Aktion (Relation) ist, die auf zwei Objekte wirkt, um ein Ergebnis / eine Aktion zu erzielen. Der Fokus liegt auf der Aktion, und die zwei (oder drei) [grammatikalischen] Objekte sind gleich wichtig.
Vergleichen Sie dies mit OOP, bei dem Sie zuerst ein Objekt (Substantiv) finden und es anweisen müssen, eine Aktion für ein anderes Objekt auszuführen. Die Denkweise wird von Aktionen / Verben, die mit Substantiven arbeiten, zu Substantiven, die mit Substantiven arbeiten, verschoben - es ist, als würde alles mit passiver oder reflexiver Stimme gesagt, z. B. "der Text wird im Terminalfenster angezeigt". Oder vielleicht "der Text zeichnet sich selbst im Terminalfenster".
Der Fokus wird nicht nur auf Substantive verlagert, sondern einem der Substantive (nennen wir es grammatikalisches Subjekt) wird eine höhere "Wichtigkeit" beigemessen als dem anderen (grammatikalisches Objekt). Man muss sich also entscheiden, ob man terminalWindow.show (someText) oder someText.show (terminalWindow) sagt. Aber warum Menschen mit so trivialen Entscheidungen ohne operative Konsequenzen belasten, wenn man wirklich Show meint (terminalWindow, someText)? [Konsequenzen sind betrieblich unbedeutend - in beiden Fällen wird der Text im Terminalfenster angezeigt -, können jedoch beim Entwurf von Klassenhierarchien sehr schwerwiegend sein, und eine "falsche" Auswahl kann zu verwickeltem und schwer zu wartendem Code führen.]
Ich würde daher argumentieren, dass die gängige Art, OOP (klassenbasiert, Einzelversand) durchzuführen, schwierig ist, weil sie UNNATURAL ist und nicht der Art entspricht, wie Menschen über die Welt denken. Generische Methoden von CLOS kommen meiner Denkweise näher, aber leider ist dies kein weit verbreiteter Ansatz.
Wie / warum ist es angesichts dieser Probleme dazu gekommen, dass der derzeitige Mainstream-Ansatz der OOP so populär wurde? Und was kann getan werden, um es zu entthronen?