Alle Programmierer glauben, dass C ++ OOP unterstützt, mit Ausnahme des Autors von OOP

    Kürzlich fielen mir Artikel zum Thema „OOP ist cool und prozedurale Programmierung ist schlecht“ und „OOP ist schlecht und prozedurale Programmierung ist schlecht“ und „OOP und prozedurale ist schlecht und Zukunft für XYZ-Prinzipien“ auf, in denen XYZ eine Art modisches neues Konzept ist.

    Bild

    Das Lustigste an diesen Artikeln ist, dass viele Leute OOP als ein Prinzip verstehen, das einmal in C ++ verankert war. Und kaum jemand versteht wirklich, was OOP ist. Plötzlich schien es mir, dass 99% der Programmierer im Allgemeinen nicht verstehen, was OOP ist. Aber vielleicht irre ich mich? Mal sehen ...

    Der Zweck des Artikels ist nicht ein Holivar, sondern ein Versuch, eine andere Sichtweise auf das Konzept von OOP zu verwirklichen. Die Sichtweise ist nicht meine, sondern die des Autors. Das Schlimmste ist, dass meine Sichtweise der des Autors näher kommt, aber weit davon entfernt ist, was die meisten Programmierer unter diesem Begriff verstehen.

    Schauen wir uns den Wortlaut von OOP an


    OOP = Objektorientierte Programmierung. Mit anderen Worten, eine Programmierung, die auf der Erstellung bestimmter Objekte basiert. Und jemand hat entschieden, dass wir über Klassen sprechen. Aber wer hat das entschieden? Wann? Und warum?

    Auf den Bänken der Schüler können Sie die Geschichte ansprechen und herausfinden, dass einer der ersten, der die Prinzipien von OOP implementiert und der Masse zugänglich gemacht hat, C ++ ist.

    Alles, was weiterging, hat genau dieses Konzept geerbt. Alles wäre nichts, aber es gibt ein Problem. Jeder denkt, dass C ++ OOP unterstützt und damit in Verbindung steht, mit Ausnahme des Autors des OOP-Konzepts.

    Hier ist sein Zitat:
    Ich habe den Begriff „objektorientiert“ geprägt und versichere Ihnen, dass ich damit nicht C ++ gemeint habe

    - Alain Kay.

    Es gibt viele weitere interessante Zitate aus den folgenden Links:

    1. Ein interessanter Artikel über Habré hier

    2. Eine Auswahl von 15 Zitaten, von denen einige hier sehr interessant sind

    Einige dieser Zitate werden später verwendet, um das Bewusstsein zu wenden.

    Wenn C ++ nicht das OOP ist, das der Autor im Sinn hatte, welches dann?


    Der Autor behauptet, dass dies SmallTalk ähnelt. Und ermutigt alle, LISP zu lernen. Aber wie viele Leser kennen diese Sprachen? Wenn es Leute gibt, die mit diesen Sprachen tief vertraut sind und Erfahrung in der Lösung von wirklich angewandten Problemen haben, dann freue ich mich sehr über die Kommentare zu diesem Artikel.

    Meine Aufmerksamkeit galt jedoch einer Reihe seiner Zitate zum Thema:

    1. „Ich bedaure, dass ich den Begriff„ Objekte “vor vielen Jahren geprägt habe, weil sich die Leute auf kleine Ideen konzentrieren. Die wirklich große Idee sind die Botschaften. “

    2. "Der Schlüssel zum Erstellen großer und erweiterbarer Systeme besteht darin, sich darüber Gedanken zu machen, wie die Module miteinander kommunizieren, und sich nicht um ihre internen Eigenschaften und ihr Verhalten zu kümmern."

    3. "Ich stellte mir Objekte als lebende Zellen oder als separate Computer in einem Netzwerk vor, die Nachrichten austauschen."

    4. „Eine der Schlüsselideen ist die Schaffung von Systemen, die während des Testens und insbesondere während Änderungen weiter funktionieren. Selbst große Änderungen müssen inkrementell sein und dürfen nicht länger als eine Sekunde dauern, bevor sie wirksam werden. “

    5. PLO für mich diese Nachricht, die lokale Speicherung und Schutz, in der Lage zu verstecken und spät in all verbindlich. Dies kann in Smalltalk und in LISP erfolgen.

    Und noch eine Reihe für den Denkdruck:
    Es tut mir leid, dass ich vor langer Zeit den Begriff „Objekt“ für dieses Thema verwendet habe, da sich viele Menschen aus diesem Grund auf weniger Ideen konzentrieren. Die große Idee, die modernen statisch typisierten OO-Sprachen fehlt: Die große Idee sind „Botschaften“. Der Schlüssel zur Schaffung gut skalierbarer Systeme besteht darin, die Mechanismen der Modulkommunikation und nicht ihre internen Eigenschaften und ihr Verhalten zu erarbeiten.

    In diesen Zitaten möchte ich die folgenden Merkmale erwähnen:

    1. Es geht nicht um Programmiersprachen, sondern um den Ansatz.
    2. Der Fokus liegt nicht auf Objekten, und Objekte sind nicht allgemein anerkannt.
    3. Objekte sind Module oder Komponenten des Systems (möglicherweise sogar getrennte Computer und Server).
    4. Der Punkt liegt nicht in den Objekten selbst, sondern in der Fähigkeit dieser Zellen, miteinander zu kommunizieren mittels Botschaften

    Und jetzt sind wir nahe dran, das Wesen des OOP-Konzepts umzukehren.

    OOP ist eine Anwendungsarchitektur


    Es geht nicht um Programmiersprachen. Und über die Fähigkeit des Systems, Objekte zu erstellen und effektive Nachrichten zwischen ihnen und der Interaktion bereitzustellen. Es ist auch erwähnenswert, dass es im Prinzip keine solchen Sprachen gibt. Es gibt nur Plattformen, die dieser Ideologie teilweise näher gekommen sind.

    Es schien mir, dass ich die Essenz dieser Idee begriff, als ich nach einer Plattform suchte, die flexibel genug war, um große komplexe Systeme zu verwalten, deren Anforderungen sich täglich änderten.
    Und ich habe es geschafft.

    Diese Plattform weist eine Reihe von Übereinstimmungen mit dem Konzept von OOP in der Autorenversion auf:

    1. In diesem System tauschen die Komponenten Nachrichten miteinander aus und ermöglichen so, das Verhalten der anderen zu ändern. Eine Komponente kann das Verhalten anderer Komponenten ändern. (passendes Zitat # 1).

    2.Der springende Punkt dieser Plattform ist, dass die Module miteinander interagieren können. Darüber hinaus können innerhalb des Moduls selbst schrecklich krumme Hände eines dummen Juniors geschrieben werden (passendes Zitat Nummer 2). Und diese Plattform hat die weltweit größte Anzahl an Modulen im Vergleich zu anderen Plattformen. Wahrscheinlich nur aus dem Grund, dass dieses Prinzip in dieser Plattform besser gemacht wird als anderswo.

    3. Die Komponente in diesem System ähnelt eher Zellen, die in Sekundenbruchteilen hinzugefügt oder entfernt werden können. Es gibt Zehntausende von ihnen. Aus ihnen baut man ein System auf. Zusätzlich kann jede solche Zelle Nachrichten mit anderen austauschen.

    4.Darüber hinaus ist jede Komponente ziemlich autonom und kann häufig getrennt und repariert werden, ohne das gesamte System anzuhalten. (passendes Zitat # 4). Es kann in wenigen Sekunden im laufenden Betrieb aktualisiert werden. Innerhalb des Systems können mehr als 100 solcher Komponenten vorhanden sein, von denen jede von einem separaten Entwicklungsteam aktualisiert wird.

    5. Das System enthält zunächst Nachrichtenkanäle. Und ihr Haufen kann später sein. Jederzeit später bei Bedarf. Heute weiß ich nicht, wie spät es ist und wann, wo und welche Komponente ich in Zukunft ändern muss. Aber ich verstehe, dass ich das mit hoher Wahrscheinlichkeit tun kann. Sobald ich verstehe, welchen Status und welches Verhalten von welcher Komponente ich ändern muss, kann ich dies entweder sehr einfach oder relativ einfach tun.

    Es schien mir, dass diese Plattform dem Konzept von OOP am nächsten kam. Wahrscheinlich aus diesem Grund hat diese Plattform den Markt erobert. Wurde die Nummer 1 in der Welt für eine Reihe von Indikatoren. Über 25% der Standorte weltweit und in der Russischen Föderation arbeiten auf dieser Plattform. Dies ist ein absoluter Weltrekord. Ich denke, viele haben bereits erraten, worum es ging :) Dies ist WordPress.

    Ich denke, dass es andere Plattformen auf der Welt gibt, die es geschafft haben, die Prinzipien von OOP so umzusetzen, wie es der Autor des Konzepts gesehen hat. Dem Marktanteil von WP nach zu urteilen, war dies jedoch ein klarer Erfolg. PHP ist nur eine Programmiersprache. An sich gibt er keine OOP. OOP wird nur durch eine Schicht gebildet, die die erforderlichen Methoden für die Interaktion von Komponenten (oder Objekten im Konzept des Autors des Konzepts) bereitstellt.

    Eine andere Plattform, auf der ich diese Funktionen zu haben schien, ist Backbone.js. JavaScript bietet wie PHP nicht die erforderlichen Methoden für OOP, Backbone.js jedoch bereits. Außerdem können Sie Objekte erstellen und effiziente Nachrichten zwischen ihnen senden.

    Oder nehmen Sie ein neueres Microservice-System, das über RESTfull API & Webhooks kommuniziert. Jeder solche Webdienst ist von Natur aus ein Objekt im Konzept von OOP, wie es der Autor sieht.

    Zusammenfassung


    Dies ist kein Versuch, die eigene Sichtweise durchzusetzen. Dies ist ein Versuch zu verstehen, wer und wie diese Ideologie sieht. Ich liebe OOP, wie es in PHP akzeptiert wird. Ich benutze Klassen. Gleichzeitig bin ich nicht gegen prozedurale Programmierung und denke, dass dies für viele Aufgaben gut ist. Ich respektiere den Ansatz mit REST API und Webhooks. Ich halte jedoch nicht jede Methode für eine absolute Wahrheit und schätze es, wenn jedes Werkzeug für den vorgesehenen Zweck verwendet wird.

    Noch mehr gefällt mir das WordPress-Hook-System, mit dem Sie wirklich komplexe Systeme mit Hunderten von Komponenten erstellen können, die zu jedem Zeitpunkt der Entwicklung des Systems hinzugefügt oder entfernt werden können. So konnten wir sehr komplexe Systeme zur Verwaltung von Geschäftsprozessen oder Aggregatoren mit der Organisation vieler Prozesse und Personen erstellen. Sehr komplexe Analoga, die auf dem Markt nur schwer zu finden sind. Und nach den Zitaten des Autors des OOP-Konzepts ist der Hook- und Filter-Mechanismus von WordPress dem ursprünglichen Konzept von OOP viel näher als das, was normalerweise als Klassen in PHP und C ++ geschrieben wird.

    Wer denkt darüber nach? Wem ist dieses Verständnis von OOP nahe? Warum? Wer hält diesen Unsinn? Warum? Sprich mit mir ... :)

    Upd. 20160811


    Hoppla! Es stellt sich heraus , alles , was ich hier beschrieben habe bereits gut bekannt und hat sogar einen Wikipedia - Beweis .
    Und sogar die Tatsache, dass OOP in klassenorientierte und komponentenorientierte Programmierung unterteilt ist. Mit anderen Worten, die OOP, die sie normalerweise bedeuten, ist klassenorientiert, und dies wurde in C ++ erfunden, und die in diesem Artikel diskutierte ist komponentenorientiert, und dies wurde von Alain Kay erfunden.

    In dem Artikel habe ich fälschlicherweise gesagt, dass 99% der Programmierer nicht wissen, was OOP ist. Diejenigen, die diese Idee für Unsinn hielten, haben sich in den Kommentaren geirrt. Irgendwie so.

    Jetzt auch beliebt: