Während einige Objekte, die ich erstelle, Objekte der realen Welt modellieren, würde Pre-OOP-Code nicht dasselbe tun?
Der größte Unterschied zwischen OOP- und Pre-OOP-Code besteht darin, dass ersterer eine reale Situation als eine Gruppe unterschiedlicher Entitäten modelliert, die miteinander interagieren, wobei jede über eine begrenzte "Macht" verfügt, was sie kann, und auch in der Lage ist, darauf zu "reagieren" externe Ereignisse mit eigenen Aktionen. Letzteres modelliert alles als einen großen Datenblock, der nichts für sich tut, während die Berechnung "Dinge darstellt, die passieren" und einige oder alle von ihnen beeinflussen kann.
Ob es die reale Welt besser modelliert oder nicht, hängt wirklich davon ab, welche Facetten der Welt Sie modellieren. Eine physikalische Simulation, bei der Sie beispielsweise die Auswirkungen beschreiben möchten, die ein angezündetes Feuer auf die umgebenden Objekte haben würde, würde besser durch einen "traditionellen" Ansatz dargestellt werden, da sowohl Licht als auch Wärme gut sind. Definierte Prozesse, die sich sowohl auf den externen als auch auf den internen Zustand anderer Objekte auswirken und sich nicht nach dem Verhalten der einzelnen Objekte richten, sondern nur von deren Eigenschaften abhängen.
Wenn Sie andererseits verschiedene Komponenten modellieren, die interagieren, um das gewünschte Verhalten zu erzielen, kann es einfacher sein, sie als Agenten anstelle von passiven Dingen zu behandeln, ohne etwas zu verpassen. Wenn ich meinen Fernseher einschalten möchte, drücke ich einfach die Taste. Wenn das Netzkabel abgezogen ist, TV.turnOn
wird dies für mich überprüft. Es besteht also kein Risiko, ein Zahnrad zu drehen und zu vergessen, das andere zu drehen, das es berührt, da sich das Zahnrad selbst (wenn es richtig programmiert ist) um die sekundären Wechselwirkungen kümmert, die sich aus dem primären ergeben.
Aber bei OO geht es wirklich darum, wie man Dinge modelliert, und diese Modellierungsmethode scheint mir nicht von der realen Welt inspiriert zu sein.
Ich glaube, es hat mehr damit zu tun, wie wir die Welt wahrnehmen, als wie die Welt tatsächlich ist. Man könnte argumentieren, dass alles nur eine Ansammlung von Atomen (oder Energie oder Wellen, was auch immer) ist, aber das hilft uns nicht bei der Bewältigung der Probleme, mit denen wir konfrontiert sind, indem wir die Umwelt um uns herum verstehen und zukünftige Ereignisse vorhersagen ( oder frühere beschreiben). Wir machen also "mentale Modelle" der Welt, und oft finden diese mentalen Modelle eine bessere Übereinstimmung mit OO als die data + process-Modelle - die wohl "besser" modellieren, wie die reale Welt tatsächlich funktioniert.
Es ist auch interessant festzustellen, dass die meisten Leute OOP als Synonym für "klassisches OOP" ansehen, bei dem wir taxonomisch Mengen und Teilmengen von Dingen erstellen und Objekte eindeutig in eine ganz bestimmte Menge einordnen. Dies ist sehr nützlich, um wiederverwendbare neue Typen zu erstellen , aber nicht so gut, wenn die zu modellierende Entität ziemlich eigenständig ist und wenn sie Interaktionen mit anderen Objekten initiiert, ist sie selten, wenn überhaupt, das Ziel einer Interaktion. Oder schlimmer, wenn es nur wenige (vielleicht nur eine) Instanzen dieser Entität gibt oder die Instanzen in ihrer Zusammensetzung, ihrem Verhalten oder in beidem stark variieren.
Es gibt jedoch auch ein "prototypisches OOP", bei dem ein Objekt beschrieben wird, indem ein ähnliches ausgewählt und die Aspekte aufgezählt werden, bei denen sie sich unterscheiden. Ich würde diesen Aufsatz für eine gute und nicht allzu technische Erklärung des Denkprozesses vorschlagen (der ganze Beitrag ist zu groß, selbst für Steve Yegges Standards, also verweise ich auf den relevanten Abschnitt: P). Auch dies ist eine gute Übereinstimmung mit unseren mentalen Modellen, wenn wir uns unbekannte Instanzen im Vergleich zu einer bekannten vorstellen, aber nicht unbedingt, wie die reale Welt "funktioniert" ... (zwei Kühe sind tatsächlich völlig voneinander getrennte Einheiten, auch wenn wir sie wahrnehmen in vielerlei Hinsicht "gleich" sein)