Ist OOP das dominierende Programmiermodell in der realen Welt?

20

Objekte niemals? Kaum jemals

In der VIEWPOINT-Sektion von Communications of The ACM fand ich einen interessanten Artikel mit dem Titel " Objects Never? Well, Hardly Ever ". Es ist eine radikal andere Perspektive als Objekte zuerst oder Objekte spät. Er schlägt "Objekte - nie" oder vielleicht "Objekte - Graduiertenschule" vor.

Der Autor sprach über OOP und stellte eine Frage zur Verwendung von OOP in realen Programmierumgebungen. Er glaubt, dass OOP nicht das vorherrschende Programmiermodell ist. Beispielsweise würden 70% der Programmierungen für eingebettete Systeme durchgeführt, für die OOP nicht wirklich geeignet sei.

Wenn einige Universitätsprofessoren über die Vorteile von OOP sprechen möchten, sprechen sie über die Wiederverwendung von Code. Als weiteres Beispiel behauptet er erneut, dass dies in der realen Welt nicht der Fall ist. Die Wiederverwendung von Code ist schwieriger als an Universitäten behauptet:

Ich behaupte, dass die Verwendung von OOP nicht so verbreitet ist, wie die meisten Menschen glauben, dass es nicht so erfolgreich ist, wie seine Befürworter behaupten, und dass daher sein zentraler Platz im CS-Lehrplan nicht gerechtfertigt ist.

Es ist interessant für mich zu wissen, wie die Leute im Stapelüberlauf darüber denken. Ist OOP aus Sicht der Programmierer das dominierende Programmiermodell?

Wenn ich nur einen Ansatz wählen / lernen / anwenden sollte, ist es OOP oder nicht? Warum?

Ehsan
quelle
26
"70% der Programmierungen werden für eingebettete Systeme durchgeführt"? Gilt das pro Projekt, pro Entwickler oder pro LOC? Ich habe das Gefühl, dass 70% aller "Programmierungen" in Excel durchgeführt werden. Auch Nicht-Programmierer programmieren Tabellenkalkulationen.
LennyProgrammers
1
@ Lenny222: Wenn Sie meine Vermutung haben wollen, sind 70% der verteilten Kopien von Programmen in eingebetteter Software oder so ähnlich. Nun werden einige eingebettete Dinge in C ++ ausgeführt, und häufig handelt es sich um eine heruntergekommene Version, die C und Objekte verlässt. Daher scheint es unaufrichtig zu sein, zu argumentieren, dass eingebettet niemals objektorientiert ist.
David Thornley
9
Ich denke, das vorherrschende Programmiermodell war und ist der große Schlammball.
Whatsisname
Dieser Artikel macht eine bizarre Unterscheidung zwischen "Klassen" und "Subsystemen", die ich nicht einmal aus der Ferne verstehe. Es geht darum, wie DiskBrake extends BrakeOOP für ein Auto nicht gut ist, denn in der "realen Welt" wird diese Kommunikation "durch Netzwerksignale und Busprotokolle" implementiert - wie DiskBrake implements BrakeInterface?! Vielleicht ist es meine eigene Erfahrung von << 43 Jahren, aber die Beispiele, die ich mir vorstelle, stützen die Behauptung des Autors überhaupt nicht.
ABl. Vom
2
Der Link befindet sich jetzt hinter einer Paywall. OOP ist sowieso zum größten Teil unterdefiniert und überbewertet. Aber sagen wir einfach "die meisten" neuen Programme, die es gibt, werden wahrscheinlich auf Java-inspirierte OOP-artige Weise mit Gettern und Setzern und Klassen namens SessionManager
Charles Salvia

Antworten:

19

Im VIEWPOINT-Bereich von Communications of The ACM

Wenn Sie an praktischer Programmierung interessiert sind , ist das Vorgehen von ACM und ähnlichen die letzte Quelle, die Sie lesen möchten. Dies sind oft [pseudo-] wissenschaftliche Veröffentlichungen, die in der realen Welt keine Anwendung finden. Dies sind oft unorthodoxe Meinungen, die für die Öffentlichkeit gemacht wurden, damit der Schriftsteller sich von der Masse abheben und seine eigene Person fördern kann.

Ich behaupte, dass die Verwendung von OOP nicht so verbreitet ist, wie die meisten Menschen glauben, dass es nicht so erfolgreich ist, wie seine Befürworter behaupten, und dass daher sein zentraler Platz im CS-Lehrplan nicht gerechtfertigt ist.

Ich neige dazu, mit Ihrem Standpunkt nicht einverstanden zu sein. OOP ist weit verbreitet und funktioniert gut. An der Zahl haben OOP-basierte Projekte wahrscheinlich die Entwicklungen anderer Strategien übertroffen (sprechen wir über die moderne Zeit, 15 bis 20 Jahre).

Allerdings ist OOP keine Wunderwaffe. Es funktioniert für einige Entwicklungen, nicht für andere. Genau wie bei jedem anderen Ansatz.

Eine Sache, die ich erwähnen muss, ist, dass ein Lehrplan Wissen über verschiedene Ansätze vermitteln sollte. Wenn es OOP-basiert ist, ist es falsch. Wenn es FP-basiert ist, ist es falsch. Es sollte sie alle abdecken oder dieses Thema überhaupt nicht berühren.

PS Warum ist es wichtig, was dominant ist und was nicht? Nehmen Sie einfach das für das jeweilige Projekt Passende und überlassen Sie die Zahlen den "Forschern".


quelle
3
Es handelt sich um Forschungsarbeiten auf dem Gebiet des Computing, die sich noch nicht etabliert haben. Akademiker brauchen viele Jahre, um sich in die reale Welt einzugliedern, obwohl dies regelmäßig der Fall ist.
Orbling
4
@DeveloperArt: Bitte beachten Sie, dass der Papierautor 43 Jahre Erfahrung in der Softwareentwicklung hat!
Ehsan,
6
Alan Kay fügt unter cacm.acm.org/magazines/2010/9/… einen Kommentar hinzu : „Im Gegensatz dazu habe ich nie gedacht, dass die meisten Systeme, die sich selbst als" objektorientiert "bezeichnen, meiner ursprünglichen Bedeutung sogar nahe kommen der Begriff.' - was tangential zu meinem Beitrag passt - "OO? Wessen OO?"
Frank Shearar
9
@Developer Art: Was mich (ein bisschen) an Ihrem Beitrag reizt, ist der Teil "Forscher". Diese verdammten Akademiker. Was haben sie jemals für uns getan? Oh. Lambda - Kalkül, Verschlüsse, Objekte, funktionale Programmierung, ... Aber andere als das, was haben die Wissenschaftler jemals für uns getan?
Frank Shearar
4
-1 Informatiker brauchen Angstzitate? Die ACM veröffentlicht Pseudowissenschaft? Ernst?
Jprete
17

Wenn OOP das einzige Paradigma ist, das Sie kennen, sollten Sie vielleicht mehr lernen. Aber was bedeutet eigentlich OOP? Bedeutet das Java oder C ++? Bedeutet das Smalltalk? Bedeutet dies, dass Slots und Schließungen mit einstellbaren Werten möglich sind? (Hallo, Schema!) Bedeutet es, dass eine Nachricht gesendet wird? (Hallo Erlang!)

Kurz gesagt, es scheint eine uninteressante Frage zu sein. "Ist OO nützlich ?" ist eine bessere Frage. Und so scheint es auch. (Sicher ist es für mich.)

Frank Shearar
quelle
6
+1 Ich vermute, dass OOP in der Praxis aufgehört hat, etwas anderes zu bedeuten als "eine gute Art, Code zu schreiben, der Dinge verwendet, die Objekte genannt werden".
Larry Coleman
Der genannte Artikel ist nicht der Ansicht, dass die Verwendung einer OO-Sprache eine Garantie für die Verwendung von OO ist, und fragt, ob es überhaupt Paradigmen geben sollte, da sie in anderen technischen Disziplinen nicht existieren.
JeffO
Vielleicht sollte der Autor William Cook und Matthias Felleisen lesen, die viel Zeit damit verbringen, darüber zu sprechen, was in der Programmierung dasselbe ist und was nicht.
Frank Shearar
9

Wo machen alle Entwickler diese "70% der Programmierungen"? Von allen Entwicklern, die ich kenne, arbeiten weniger als 1% an eingebetteten Systemen.

Wir haben also drei Möglichkeiten:

  1. Ich bin einzigartig und alle deine Freunde programmieren wirklich eingebettet
  2. Es gibt Armeen von Entwicklern, die irgendwo in einem Keller eingesperrt sind und diese 70% erledigen.
  3. Diese Statistik ist erfunden und der Artikel ist Bullshit

Wenn ich keine Beweise dafür sehe, dass Option 1 oder 2 tatsächlich zutrifft, gehe ich zu Option 3.

(Übrigens, ich halte moderne mobile Entwicklung nicht für eingebettetes Programmieren, und mobile Entwicklung ist oft OO, nachdem Apple Sie dazu zwingt, * Objective * C für die Entwicklung für das iPhone zu verwenden.)

Nir
quelle
FWIW, ich habe ein paar Sekunden gebraucht und mir ein halbes Dutzend mögliche Maßnahmen für "70% der Programme" ausgedacht. Der Autor hat wohl eine siebte verwendet. (Embedded-Programmierer gibt es auch, sie tendieren einfach nicht dazu, an den gleichen Orten
David Thornley
1
@ David Thornley - Lügen mit Statistiken ist immer noch Lügen, der Autor behauptet eindeutig, dass die überwiegende Mehrheit der Programme auf der Welt heutzutage für eingebettete Systeme ist - und ich sage, das ist total verrückt Maßnahme, die zeigt, dass die meisten Programmierungen der Welt in dem Raum ausgeführt werden, in dem ich mich gerade befinde (den ich mit nur einem anderen Entwickler teile) - aber jede Schlussfolgerung, die ich auf dieser Beobachtung aufbaue, ist ebenso wertlos wie die erfundene Maßnahme .
Nir
1
Ich bin ein eingebetteter Typ. Ich habe mehrere Berichte gesehen, dass ungefähr 99% der produzierten / ausgelieferten Prozessoren für eingebettete Systeme sind (wenn es wirklich notwendig ist, kann ich zurückkommen und die Berichte zitieren). Trotzdem bin ich mir sicher, dass bei weitem nicht annähernd 70% aller Programmierungen für eingebettete Systeme durchgeführt werden. Ich denke, dass ungefähr 50% aller ausgelieferten Prozessoren 4-Bit- und 8-Bit-Prozessoren sind, aber diese machen wahrscheinlich 0,1% (oder weniger) der gesamten Programmierung aus. Wie David sagte, gibt es viele Möglichkeiten, "70% der Programme" zu entwickeln. Ich wäre nicht überrascht, wenn die Zahl 20-25% betragen würde.
Radian
+1 für „Lügen mit Statistik lügt immer noch“; so wahr, so wahr ...
Donal Fellows
8

Ich habe keine Fakten, die ich verfolgen könnte, aber OOP ist nicht das vorherrschende Programmiermodell. Stellen Sie sich vor, Sie haben alle hausinternen Apps von jemandem entwickelt, der an einem Kurs für visuelle Grundlagen teilgenommen oder Makroprogramme in Excel erstellt hat.

Viele Anwendungen führen nur eine zwingende Programmierung durch, bei der die gesamte Logik in einer einzigen Klasse oder Ansicht zusammengefasst ist. Dies ist wahrscheinlich die überwiegende Mehrheit der internen einfachen Anwendungen, die unternehmensweit ausgeführt werden.

Daran ist nichts auszusetzen, es gibt verschiedene Möglichkeiten, das gleiche Problem zu lösen. Einige sind besser geeignet als andere.

Wie Sie bereits betont haben, ist OOP nicht für alle Szenarien geeignet. Es gibt auch andere Modelle.

Morten
quelle
Andererseits könnte sich die Frage stellen, was als das dominierende Modell zu bezeichnen ist. Handelt es sich um "die Menge der mit Modell X entwickelten Apps" oder um "die Menge des mit Modell X entwickelten Codes"? So oder so denke ich immer noch, dass OOP nicht das dominierende Modell sein wird.
Morten
1
+1 Um den Punkt vorzustellen, dass OOP zwar bei geschulten Fachleuten nahezu allgegenwärtig ist, die Industrie weltweit dies jedoch nicht ganz widerspiegelt, und es gibt eine Menge direkter Imperativ-Codes.
Orbling
5

Ob OOP das dominierende Programmiermodell ist oder nicht, ist irrelevant. Setzen Sie einfach unterschiedliche Modelle für unterschiedliche Fälle ein.

Es gibt keine Silberkugel.

Worüber Moti Ben Ari argumentiert, ist eine akademische Behauptung, die bereits bedeutungslos ist. Er gibt jedoch selbst an, dass er OOP nie als "sinnvoll" empfunden hat, offensichtlich für Tausende von Entwicklern und Software-Ingenieuren und wurde in vielen, vielen Systemen verwendet ...

Aber der eigentliche Punkt meiner Antwort ist: Was nützt es, zu behaupten, dass das eine oder das andere Modell dominant ist oder nicht, ist das dann ein guter Grund, es blind zu benutzen? Natürlich nicht.

ocodo
quelle
Wenn viele Leute behaupten, ein Modell zu verwenden und nicht, ist das ein Problem. Die Frage ist so weit verbreitet wie es scheint und nicht, ob man dominant oder besser ist.
JeffO
4

Dies ist tatsächlich eine schwierig zu beantwortende Frage. Der Hauptgrund sind Leute wie ich, die in kundenspezifischen Inhouse-Anwendungen arbeiten, bei denen der Code unser Gebäude nie verlässt. Verwenden wir hier OO? Ich sage nicht. Wie viele andere Programmierer haben ähnliche Jobs? Sie sagen es auch nicht. Wir haben zwar Job-Websites, aber nicht alle Jobs sind veröffentlicht, und nicht alle Buchungen sind für echte Jobs bestimmt, im Gegensatz zu Personalbeschaffern, die versuchen, Namenslisten zu sammeln.

Auch wenn ich gesagt habe, wir verwenden OO, wo ich arbeite, bedeutet das die traditionelle Definition aus dem verknüpften Artikel: Objekte, Klassen, Vererbung? Oder bedeutet das, dass ich Objekte hauptsächlich zum Organisieren von Code verwende? Oder heißt das, dass ich wirklich nur auf Schnittstellen programmiere und kaum Vererbung nutze? Ich sage immer noch nicht, aber was von diesen zählt wirklich als OO?

Es ist nicht einmal sinnvoll zu fragen, ob OO nützlich ist, bis die obigen Fragen beantwortet wurden, geschweige denn dominant.

Larry Coleman
quelle
2

Natürlich, denn es ist das neueste Schlagwort, an das sich das Management gehalten hat. Es bietet auch eine bessere Kapselung und Abstraktion als das imperative Programmieren, daher denke ich, dass der Sprung von OOP zu dem, was als nächstes kommt, noch länger dauern könnte, als es das Imperative dauerte.

PS2: Wenn ich nur einen Ansatz wählen / lernen / anwenden sollte, ist es OOP oder nicht? Warum?

Wenn Sie nur eines lernen möchten, sollten Sie ein anderes Fach auswählen.

Sie sollten sich mit den Typen und der Kapselung sowie allen anderen Vorteilen von OOP vertraut machen und anschließend lernen, wie Sie dieselben Aufgaben mit einem funktionalen Programmierstil ausführen.

Josh
quelle
+1 für den Kommentar zum Auswählen eines anderen Felds, wenn Sie einen Ansatz erlernen möchten. Das ist verrückt.
Mat Nadrofsky
1

OOP ist definitiv eines der dominantesten Programmiermodelle in der realen Welt.

Seien wir ehrlich, sogar Leute, die digitale Hardware entwerfen, die Chip-Designer selbst, machen einen Übergang zum Duo von SystemVerilog und SystemC. Dies sind objektorientierte Programmiersprachen.

Wo würde OOP nicht verwendet werden? Nun, wenn Sie Gerätetreiber codieren, ist es schwer vorstellbar, warum Sie eine generische Programmierung oder Mehrfachvererbung benötigen, ODER wenn Sie AI-funktionale Programmiertechniken anwenden, wird dies für den Kopf viel einfacher. Es gibt auch eine Menge anderer Situationen, obwohl OOP ein ziemlich mächtiger Ort ist, um in einer oligopolistischen Programmierwelt zu sein.

Fanatic23
quelle
1

Ich würde nein sagen.

Ich verstehe, dass es eine große Menge Code gibt, der in einer 'objektorientierten' Sprache geschrieben ist, aber im Allgemeinen stelle ich fest, dass der Code nur prozedural in Klassen verpackt ist. (nicht, dass dies unbedingt eine schlechte Sache ist). Der Code, den ich gesehen habe und der in diesen Sprachen für mehr OO geschrieben wurde, ist in der Regel ein schreckliches Durcheinander von Abhängigkeiten zwischen Klassen, das normalerweise nicht gewartet werden kann.

Bei OO soll es sich um die Weitergabe von Nachrichten zwischen vollständig in sich geschlossenen Objekten handeln, und das sehen wir im heutigen Code, aber auf einer viel detaillierteren Ebene - dh wir sehen diese Objekte als DLLs, Assemblys oder COM-Objekte implementiert. "Komponenten", wie ich sie beschrieben habe.

Daher denke ich, dass es eigentlich egal ist, ob OO verwendet wird oder nicht - wenn der Code während seiner Lebensdauer gewartet werden kann, in dem Maße wiederverwendbar ist, wie er entworfen wurde und sich schnell entwickelt, ist es mir egal wenn es rein prozedural oder semi-objektorientiert oder vollständig OO ist. Ich bezweifle, dass Ihnen jemand sagen kann, ob der vorherrschende Stil einer dieser Stile ist, aber ich würde eine Vermutung anstellen, dass der prozedurale Stil der häufigste sein wird, auch wenn er in Klassen anstatt in Funktionen zerlegt wird.

gbjbaanb
quelle
0

Ich denke, dass es wichtig ist, eine Lösung zu differenzieren, die durch Anwendung eines objektorientierten Ansatzes und einer Lösung, die unter Verwendung des objektorientierten Paradigmas implementiert wurde, erhalten wird. Meine Meinung zu einer guten objektorientierten Software ist, beide Lösungen zu kombinieren. Wenn Sie in Objekten denken und die Objektdefinitionen und Interaktionen respektieren und Ihr Problem an die Verwendung dieser Struktur angepasst werden könnte, verfügen Sie über einen Code, der flexibel und robust ist. Wenn Sie jedoch Objekte verwenden, um einen Code mithilfe eines prozeduralen Paradigmas zu lösen, werden Sie eine böse Mischung erhalten, die die Vorteile von Objects nicht ausnutzen wird.

Ich bevorzuge wirklich, dass mein Code objektorientiert ist, und mir ist klar geworden, dass es anfangs etwas ärgerlicher sein könnte, eine gute Struktur zu erstellen, aber wenn ich mich mit der Flexibilität und den Flash-Anforderungen von Kunden von heute befasse, denke ich, dass es das wert ist Anstrengung.

Guiman
quelle
0

Ich gebe nicht vor, die genauen Zahlen zu kennen oder auch nur eine grobe Vermutung anzustellen, aber es gibt viele Programmierprojekte, die keine OOP beinhalten. Ich arbeite mit Industrierobotern. Die Programme sind in der Regel recht einfach und unkompliziert. Das tatsächliche Betriebssystem des Roboters ist noch mehr.

Viele unserer "Tools" basieren auf OOP, laufen jedoch auf PCs und nicht auf der Robotersteuerung. Dazu gehören Editoren, Simulationen und Dienstprogramme.

Jim C
quelle