Heim  >  Artikel  >  Java  >  Objektorientierte Programmierung ist nicht das, was Sie denken, oder zumindest war sie nicht dafür gedacht

Objektorientierte Programmierung ist nicht das, was Sie denken, oder zumindest war sie nicht dafür gedacht

王林
王林Original
2024-08-22 06:38:07564Durchsuche

Object-Oriented Programming is Not What You Think It Is, or at Least It Wasn’t Meant to Be

„Als ich den Begriff ‚objektorientiert‘ geprägt habe, muss ich Ihnen sagen, dass ich nicht an C++ gedacht habe. Die große Idee ist ‚Messaging‘ … Der Schlüssel zum Erstellen guter und erweiterbarer Systeme liegt viel mehr darin Entwerfen, wie Ihre Module miteinander kommunizieren, und nicht so, wie ihre internen Eigenschaften und Verhaltensweisen sein sollten.“
„Ich bedauere, dass ich den Begriff ‚Objekt‘ schon vor langer Zeit zu diesem Thema geprägt habe, weil er die Leute dazu bringt, sich auf die kleinere Idee zu konzentrieren. Die große Idee ist ‚Messaging‘.“
— Alan Kay, Schöpfer der Smalltalk-Sprache.

Wenn wir objektorientiertes Programmieren lernen, wird uns als Erstes die Idee gezeigt, dass ein Auto Eigenschaften wie Türen und Räder hat, dass ein Fernseher das Verhalten hat, sich ein- und auszuschalten, dass ein Haus Fenster hat, die das können öffnen und schließen. Aber echte Systeme sehen bei weitem nicht so aus.
Sie sehen ein Objekt namens HTTPRequest, aber kein Objekt namens Television. Sie werden auf logMessage stoßen, aber nicht auf house1Joao. Oder auch Ressourcenverwaltung, Dateisystem usw. Und nun, welches Verhalten sollten diese „Objekte“ haben?

Die Idee von Objekten als Darstellungen realer Objekte tauchte bereits vor Alan Kay mit der Simula-Sprache auf. Die Schöpfer der Sprache, Ole-Johan Dahl und Kristen Nygaard, entwarfen eine Sprache, die für Simulationen der Realität, wie Warteschlangen, Netzwerkverkehr, Herstellungsprozesse usw., verwendet werden sollte. Die prozedurale Programmierung war zur Lösung dieser Art von Problemen nicht geeignet.

Hier beginnt der Bedarf an einer Form der Programmierung, die es Ihnen ermöglicht, sich auf das Wesentliche zu konzentrieren und die Implementierung unter der Haube zu belassen. Stellen Sie sich vor, Sie müssten beim Aufbau eines robusten und großen Systems mehr über die Details des Codes als über das Problem selbst nachdenken. Ganz zu schweigen davon, dass die Anzahl der Funktionen, die ein Code haben könnte, groß genug war, um ein verwirrendes und undurchsichtiges Gewirr zu bilden.

Sie haben den ersten Schritt unternommen, um unnötige Konzepte in der Programmierung zu abstrahieren.

„Aber das ist doch genau modernes OOP!“ Du schreist vielleicht. Nun, ja und nein. Die Implementierung der Simula-Sprache für dieses Paradigma war anders. Der Fokus lag nicht auf wiederverwendbaren und flexiblen Systemen, sondern auf der Modellierung von Ereignissen und Prozessen.
Die Vererbung war einfach. Der Fokus lag auf der Verfeinerung und Spezialisierung von Abläufen und nicht auf Flexibilität und Hierarchien.
Die Kapselung war einfach. Es gab kein Konzept für Zugriffsmodifikatoren wie privat, öffentlich und geschützt.
Im Grunde bestand die Idee darin, das Code-Chaos in Paketen mit klareren Definitionen zu organisieren.

Einige Zeit später kam Alan Kay bei Xerox auf seine Idee von Nachrichten. Gleichzeitig entwickelte Xerox Computergrafiken und Smalltalk.
Seine Idee bestand im Wesentlichen darin, sich Objekte als Lebewesen vorzustellen, jedoch nicht als Tiere oder Menschen, sondern als Zellen. (Alan Kay war ausgebildeter Biologe.)
Lebendes Gewebe funktioniert dank der Kommunikation zwischen Zellen perfekt. Ihre Funktionen sind sehr gut definiert und sie wissen, wie sie auf die „Nachrichten“ reagieren sollen, die sie von anderen Zellen erhalten.
Die Idee bestand darin, Objekte zu schaffen, deren Funktion darin bestand, auf Nachrichten auf ihre eigene Weise zu reagieren. Es ist nicht notwendig und sollte es auch nicht sein, zu wissen, wie die Antwort des Objekts implementiert wird. Sie müssen lediglich wissen, welche Art von Nachricht das Objekt versteht. (Tatsächlich wird der Satz von Nachrichten, den Sie an das Objekt „senden“ können, als Schnittstelle bezeichnet.)
Was erwarten Sie beispielsweise vom Summenobjekt, wenn Sie die Nachricht „2 + 2“ senden?
Ah ja. Im Smalltalk ist alles ein Objekt, auch Nachrichten.
Ja, ich weiß, es ist verrückt. Objekte kommunizieren über Objekte, die andere Objekte enthalten. Aber das ist die Idee.
„Okay, und wie hilft das dabei, wiederverwendbare und erweiterbare Systeme zu schaffen?“
Softwaresysteme ähneln eher einer Verkabelung als einer Datei. Und das ist die Unterscheidung, die Alan Kay macht.
Für ihn sollten Sie sich darum kümmern, ob die Drähte an den richtigen Polen angeschlossen sind und nicht darum, wie eine Datei organisiert ist.

Fazit

Bei der objektorientierten Programmierung, wie sie von Alan Kay konzipiert wurde, ging es nicht nur darum, Code in Strukturen zu organisieren, die die reale Welt nachahmen, sondern auch darum, Systeme zu schaffen, die effizient über Nachrichten kommunizieren. Obwohl sich das moderne OOP aus den ursprünglichen Ideen von Simula entwickelt hat und mit Sprachen wie C++ und Java an Popularität gewonnen hat, wurde der wahre Fokus dieses Ansatzes, nämlich die Kommunikation zwischen Objekten, oft verwässert.

Das Verständnis von Kays ursprünglicher Vision kann uns dazu veranlassen, zu überdenken, wie wir heute Software entwerfen und erstellen. Anstatt uns nur auf die interne Struktur von Objekten und Klassenhierarchien zu konzentrieren, sollten wir auch die Einfachheit und Flexibilität schätzen, die eine gut gestaltete Kommunikation zwischen Modulen mit sich bringen kann.

Die Rückkehr zu den Wurzeln von OOP kann uns dabei helfen, belastbarere, modularere und einfacher erweiterbare Systeme zu entwickeln. Wie Kay uns erinnert, ging es bei der „großen Idee“ schließlich nicht um die Objekte selbst, sondern um die Art und Weise, wie sie kommunizieren.


Quellen:

  1. Alan Kay, „The Early History of Smalltalk“, in History of Programming Languages, 2. Auflage, herausgegeben von Thomas J. Bergin und Richard G. Gibson, Addison-Wesley, 1996, S. 511-578.
  2. Kristen Nygaard und Ole-Johan Dahl, „The Development of the SIMULA Languages“, in History of Programming Languages, 1. Auflage, herausgegeben von Richard L. Wexelblat, Academic Press, 1981, S. 439-493.
  3. Bjarne Stroustrup, The C++ Programming Language, Addison-Wesley, 2013, Vorwort und Kapitel 1.
  4. Kay, Alan. „Die Bedeutung von ‚objektorientierter Programmierung‘.“ E-Mail an Stefan Ram, 2003.

P.S.: Dieser Artikel wurde von Moisés Cristiano geschrieben und von ChatGPT bearbeitet.

Das obige ist der detaillierte Inhalt vonObjektorientierte Programmierung ist nicht das, was Sie denken, oder zumindest war sie nicht dafür gedacht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn