Ich habe die Popularität von C immer auf die Notwendigkeit einer universellen Assemblersprache zurückgeführt. Die Kombination aus Spezifität auf Maschinenebene, Standardisierung und extremer Portabilität ermöglicht es C, de facto als universelle Assemblersprache zu fungieren , und aus diesem Grund gehe ich davon aus, dass seine Rolle dort auf unbestimmte Zeit fortbestehen wird.
Ich sollte erwähnen, dass ich immer ein bisschen überrascht bin, wenn OOP in Programmierkursen als eine Art "Endmodell" präsentiert wird, das der einzig mögliche Endpunkt für eine gute Programmierung ist. Wie viele andere Aspekte der Programmierung ist der Wert von OOP ein Kompromiss zwischen vielen konkurrierenden Faktoren, einschließlich der Art und Weise, wie das menschliche Gehirn Informationen organisiert, wie gesellschaftliche Gruppen Software langfristig unterstützen, und im Fall der objektorientierten Programmierung einigen ziemlich tiefen Aspekten wie das Universum selbst funktioniert.
Und dieser letzte Punkt ist es wert, ein bisschen gehämmert zu werden. Lesen Sie weiter, wenn Sie sich für eine Untersuchung auf physikalischer Ebene interessieren, warum es bestimmte Programmierstile gibt, wie sie zusammenarbeiten und wohin die Welt in Zukunft gehen könnte, wenn wir solche Konzepte weiter ausbauen ...
Ein Objekt in der Physik ist alles, was im Laufe der Zeit erkennbare Kohärenz bewahrt. Das wiederum ermöglicht einfachen Kreaturen wie uns, das Objekt nur mit einer geringen Anzahl von Bits darzustellen, ohne unser Überleben zu gefährden. Aber in Bezug auf die Physik im Großen ist die Anzahl der Dinge, die Sie genau richtig machen müssen, um diese Art der Vereinfachung einfach und gebräuchlich zu machen, bemerkenswert groß. Als Menschen denken wir nicht so viel darüber nach, denn ehrlich gesagt wären wir nicht hier, wenn es nicht wahr wäre.
Hört sich zu abstrakt an? Das ist es wirklich nicht. Stellen Sie sich zum Beispiel vor, Sie würden versuchen, die Straße zum Haus Ihres Freundes zu navigieren, wenn Sie anstelle von Autos auf schnell oszillierende Plasmafelder und kurzzeitige Verdichtungen von Materie stoßen, die sich mit einem enormen Geschwindigkeitsbereich bewegen. Ein solches Szenario könnte die Möglichkeiten der Sozialisierung ziemlich stark einschränken, ja? Wir brauchen Objekte, wir sind Objekte, und die Existenz von Objekten bietet uns ein enormes und kritisch wichtiges Maß an Vereinfachung der Umwelt um uns herum.
Lassen Sie uns all das auf Software zurückführen. Was sagen Objekte in der realen Welt über Objekte in Bezug auf die Programmierung?
Zum einen bedeutet dies, dass das, was ein "gutes" Objekt in der Software definiert, wirklich sein sollte, ob die Art der Daten, die Sie verarbeiten, die Idee einer erkennbaren Persistenz über die Zeit hinweg unterstützt oder nicht .
Mit der Definition sind die einfachsten Formen von OOP leicht zu erkennen. Sie sind diejenigen, die ein wenig damit fertig werden, indem sie nur Daten verwenden, die bereits "angehängt" oder durch ein reales, wirklich physisches Objekt wie eine Person, ein Haus oder ein Auto definiert sind. Dies ist auch heute noch zu oft die einzige Definition von Objekten, die Menschen in Software-Kursen erhalten. Das ist schade, denn auch triviale objektorientierte Programme brauchen eine umfassendere Definition.
Die zweite und weitaus interessantere Kategorie von Objekten besteht aus dem, was ich als unsterbliche reale Ereignisse bezeichne . Mit "unsterblich" meine ich Dinge, die zumindest kurzzeitig als genau definierte Einheit oder Sammlung in der realen Welt existieren, die sich dann auflösen und nicht mehr als physikalisch bedeutsame Sammlungen existieren. Ein Symposium ist ein gutes Beispiel: Das Symposium existiert für eine kurze Zeit als eine dezent definierte Sammlung von Orten und Personen. Aber leider müssen auch die besten Konferenzen enden, und die einzelnen Teile, aus denen sie bestehen, müssen sich anderen Aktivitäten widmen.
Aber durch Computer und Netzwerke verwenden, können wir so machen ein vorübergehendes Symposium scheint wie eine langfristige Aufgabe durch die Erfassung und eine Erinnerung an mich als Software - Objekt zu halten. Viele Dinge, die wir mit Computern und Datenbanken tun, laufen auf diese Art der Unsterblichkeit vorübergehender Ereignisse hinaus, bei der wir versuchen, unser reales Universum reicher zu machen, indem wir es auf eine Weise erfassen und erweitern, die physikalisch unmöglich existieren kann. Hast du in letzter Zeit eine echte Pandora gesehen? Solche Aufnahmen und Erweiterungen von realen Objekten tragen dazu bei, unser eigenes Leben, unsere Wirtschaft und unsere Entscheidungen auf bemerkenswerte Weise zu bereichern und zu erweitern. Dies ist für mich das Kernland der objektorientierten Programmierung, der Ort, an dem sie die bemerkenswertesten Auswirkungen hatte und auch weiterhin hat.
Eine letzte Kategorie von OOP besteht aus Objekten, die keine enge Verbindung zu externen Ereignissen haben, sondern die Infrastruktur darstellenbenötigt, um unsere ständige Erweiterung der Realität mit unsterblichen Objekten aus der realen Welt zu unterstützen. Hier können Sie bis zum (Halb-) Metall des Computers hinabsteigen und Stücke von beständiger Realität schaffen, die wie die chemischen Elemente der realen Welt schnell und auf interessante Weise kombiniert werden können, um neue innere Welten aufzubauen. Mobile Computing hat das Wachstum dieses hochrekombinatorischen Ansatzes gefördert, der die rekombinatorischen Merkmale der physischen Welt in vielerlei Hinsicht nachahmt. Es ist auch schwierig: Was nach einer guten Wahl aussieht, kann sich im Laufe der Zeit als unerwartet schlecht herausstellen, normalerweise, weil es Vielfalt und Expansion blockiert, anstatt sie zu unterstützen.
Diese letzte Kategorie weist auch auf die Risiken der Verwendung nur eines Modells für die Programmierung hin, da programmierte Welten wie die reale Welt auch Prozesse benötigen, die dies nicht tunkorrespondieren gut mit relativ unveränderlichen Objekten. Die Erde ist voll von Objekten, aber die Sonne ist voll von hochdynamischen Energieflüssen, die letztendlich benötigt werden, um die Objekte und Aktivitäten auf der Erde mit niedrigerer Energie "anzutreiben". In ähnlicher Weise gibt es beim Erstellen von Computerwelten Fälle, in denen Sie sich mit Flüssen und Transformationen und sich schnell ändernden Kontexten auseinandersetzen müssen, die zwar an sich nicht sehr objektähnlich sind, aber dennoch von entscheidender Bedeutung sind, um die einfacheren, menschlicheren Objekte auf höheren Ebenen zu ermöglichen . Es ist kein Zufall, dass ein Großteil der Programmierung auf Kernel-Ebene nicht auffällig objektorientiert ist oder dass Sprachen wie C eher verarbeitungsorientiert sind. Dies sind die tieferen Bereiche, die die faszinierende Vielfalt ergänzen, die wir in computergenerierten Welten sehen.
Der andere Bereich, in dem OOP schief gehen kann, konzentriert sich zu sehr auf alte Objektkonzepte.
Objekte in der realen Welt und insbesondere lebende Objekte verfügen über eine erstaunliche Fähigkeit, auf komplexe und subtile Weise mit ihrer Umgebung zu interagieren. Zusammensetzbare Widgets, die sich gegenseitig überblicken, Kompatibilitäts- und Vernunftsprüfungen durchführen und möglicherweise sogar neue Interaktionsmöglichkeiten finden, die dem realen biologischen Konzept von Objekten sehr nahe kommen als die einfachen Frameworks und Vererbungsschemata, die wir pflegen auf der Code-Ebene zu konzentrieren (in der Regel aus Notwendigkeit!). Dies ist einer der Wachstumsbereiche für Objekte in der Cyberwelt, die eher agentenähnlichen Ansätzen entsprechen, bei denen die Reaktivität gegenüber der Umgebung selbst innerhalb der Programmierung die Norm ist.
Und so viel zu meiner "Kritik" an OOP! Dennoch hoffe ich, dass ich darauf hingewiesen habe, warum die Schaffung einer reichhaltigeren Cyberwelt bedeutet, die Vielfalt der Programmierstile einzubeziehen , anstatt davon auszugehen, dass "nur eine" alles ist, was benötigt wird. Mein Gefühl ist, dass das wirklich interessante Zeug noch kommen wird, egal wie banal viel von dem ist, was wir jetzt tun!