Veröffentlicht am 30-03-2019

Objektorientierte Programmierung ist tot

Lang lebe objektorientierte Programmierung!

(Dies ist eine Antwort auf Wiedersehen, objektorientierte Programmierung.)

Das einzige definierende Merkmal von OOP ist, wie wir alle wissen sollten, Polymorphismus. Und ich glaube nicht, dass dieser Artikel diese Säule in irgendeiner Weise "zerbrochen" hat. „Auf Wiedersehen, Polymorphismus, Hallo Interface-basierter Polymorphismus“ ist, wie ich es sehe, nur ein Spiel mit Worten: Der Autor sagt überhaupt nicht „Auf Wiedersehen“, sondern erkennt nur an, dass sich der Weg zur richtigen Umsetzung des Polymorphismus geändert hat. Wie alle Dinge schließlich auch OOP.

Ironischerweise hat sich OOP zu etwas verändert, das dem ursprünglichen Zustand näher kommt. Vor all diesen von C ++ inspirierten, statisch typisierten, objektorientierten Sprachen gab es Sprachen wie Smalltalk, Self und Objektsysteme wie CLOS. CLOS zum Beispiel hat die Einkapselung überhaupt nicht erzwungen; es hatte auch mehrere Versandarten (wie die Multi-Methoden von Clojure). Das Selbst hatte keinen Unterricht (natürlich war JavaScript stark davon inspiriert). Sie waren alle „objektorientiert“, obwohl sie nicht wie C ++, C # oder Java aussahen.

OOP ist zu einer Art Tabu geworden, wie es scheint. Wie eine Art Perversion. Aber ich bin mir nicht sicher, warum ich das verstehe. Vielleicht auch wegen dieser falschen Dichotomie zwischen Objekten und Funktionen: Funktionale Programmierung erscheint wie ein Hauch frischer Luft in einer Welt, die von der explosiven Kombination aus veränderlichem Gedächtnis, zwingender Programmierung und parallelen Prozessen zerstört wird. Da wir all diese schlechten Entscheidungen mit Objekten wie den Kindern, die wir sind, umgesetzt haben, haben wir uns entschlossen, diese Erzählung der großen, schlechten, objektorientierten Sprachen im Gegensatz zu den reinen, funktionalen Retter zu erstellen. Aber das ist im besten Fall eine Übertreibung und im schlimmsten Fall eine einfache Lüge. Ein Marketing-Stunt.

Imperativ sein, Mutation, statische Typisierung, Verkapselung und sogar Klassen verwenden: Sie haben niemals Merkmale der OOP definiert. Von allen Kritikpunkten gibt es nur eine, die auf den Punkt trifft: Vererbung skaliert nicht. Und zwar nicht. Obwohl wir herausgefunden haben, wie schlecht eine Konzeptvererbung ist, definieren wir immer noch Hierarchien. Wir haben gelernt, beide Konzepte sozusagen zu „entkoppeln“. Hierarchien zu haben, ist auch ein bestimmendes Merkmal von OOP.

Trotz allem, was so viele sagen, ist OOP immer noch da. Wiederum ironisch, am besten vertreten durch Sprachen, die behaupten, NICHT so viel objektorientiert zu sein: Go (Polymorphismus durch Schnittstellen), Rust (Generika, Merkmale), Clojure / Elixir (Protokolle, Multi-Dispatch), JavaScript (auf Prototypen basierend), Swift ( vielleicht das beste Beispiel für eine moderne Sprache in der SmallTalk-Tradition), und sogar Haskell ist eindeutig von der Objektorientierung inspiriert.

Aber wenn es wie OOP läuft und wie OOP Quacksalber, ist es immer noch OOP, egal wie wir es nennen.

Siehe auch

DAS GEBÄUDE VON DUBAI: Enyimba Economic City; Geschichte zweier Städte.Die Gefahr der Bewertung von Meritokratie.Co-Working Space: 5 großartige Fakten zu Co-Working SpacesUmfassende Analyse des Software-Defined Wide Area Network-Markts 2019–2026Vergleich von Dokumentenverfolgungssoftware und Suche nach der besten OptionWie fühle ich mich mit der Apple Kreditkarte?