Unter welchen historischen Bedingungen wurde objektorientierte Programmierung zu einem wichtigen Programmierparadigma?

14

Was waren einige der wirtschaftlichen (und anderen historischen) Faktoren, die dazu geführt haben, dass objektorientierte Programmiersprachen Einfluss hatten? Ich weiß, dass Simula den Anfang gemacht hat, aber war die Einführung von OOP-Sprachen auf die ständig wachsenden Geschäftsanforderungen zurückzuführen? Oder lag die Annahme eher an den neuen Möglichkeiten, die mit OOP-Sprachen realisiert werden konnten?

Bearbeiten Ich bin wirklich am meisten interessiert , ob es einige Faktoren , gehen außerhalb der Sprache selbst , dass erlauben sie zu greifen.

ihtkwot
quelle
Das macht Sinn, aber ich glaube, ich war mehr an den äußeren Umständen interessiert, die sich während der Entwicklung abspielten. Es kann durchaus sein, dass sich externe Faktoren nur begrenzt auswirken.
Ich garantiere Ihnen, dass programmers.stackexchange auch bei Fragen zu externen Faktoren ein besserer Veranstaltungsort ist. Es gibt eine Menge Leute, die aktiv in der Branche arbeiten, und viele, die seit dem Start der Branche arbeiten. Sie werden dort viel eher eine Person finden, die eine hervorragende Antwort auf Ihre Frage hat als hier.
Opt
2
Smalltalk hat es nicht gestartet. Simula schuf die Grundkonzepte der Objektorientierung. Was Smalltalk tat, war, diese Ideen aufzugreifen und sie in ein ganz anderes Modell zu verwandeln und den Namen passend zu machen. Es ist jedoch erwähnenswert, dass keine Sprache, die dem Smalltalk-Modell von OO folgt, jemals für die Erstellung von Programmen sehr erfolgreich war. (Mit Ausnahme von Objective-C, einem Sonderfall: Apple schiebt es allen auf die Seite, aber niemand außerhalb des Apple-Ökosystems verwendet es.) Alle erfolgreichen OO-Sprachen: C ++, Delphi, Java, C #, Verwenden Sie das Simula-Modell.
Mason Wheeler
1
Lego-Spielzeug-Steine ​​könnten als externer Einfluss passen ...
Jamie F
1
@Mason: nicht sicher, was die Modelle Simula und Smalltalk unterscheidet. Wo würdest du Ruby hinstellen? LUA? Python? Javascript?
Kevin Cline

Antworten:

10

Kurze Antwort

Ich denke, es war die Abwanderung von Softwareprojekten vor OO-Tagen. OO half durch das Hinzufügen des grundlegend kritischen Konzepts - Modellieren Sie die reale Welt .


Die erste objektorientierte Programmiersprache war Simula im Jahr 1967. Zu dieser Zeit befand sich die Softwareentwicklung im Allgemeinen jedoch noch in den Labors und die meisten Paradigmen waren noch näher am Hardware- Fall.

Über ein ganzes weiteres Jahrzehnt wuchs die Entwicklung von Software für Unternehmensanwendungen, andere kommerzielle Anwendungen und die Softwareentwicklung insgesamt nahm in den gesamten 1970er Jahren zu. Sprachen, die bis heute in jenen Jahren (vor 1980) überlebt haben, waren C, Cobol, Fortran und ähnliche andere. Die meisten dieser Sprachen sind prozedural. Lisp gab es auch seit diesem Tag - ich bin mir jedoch nicht sicher, ob dies eine der wichtigsten Allzwecksprachen für die kommerzielle Entwicklung war. Der berühmte Begriff Wasserfallmodell wurde auch in den frühen 1970er Jahren geprägt.

In den meisten kommerziellen Umgebungen war das Projektmanagement das wichtigste Element in der Softwareentwicklung. Es war dringend erforderlich, knappe und zumindest vorhersehbare Budgets und Verwaltungsanforderungen einzufrieren, um sicherzustellen, dass das Projekt die Ziellinie ordnungsgemäß erreicht. In dieser Zeit war auch einer der Mythical Manmonths im Jahr 1975.

Ich glaube, Ende der 70er Jahre waren die Leute ausgebrannt - da die Verfahrenssprachen diese Versprechen nicht einhielten. Und ein neues Paradigma, das objektorientiert ist und seitdem existiert, hat es groß gemacht. Auch wenn die Leute anderer Meinung sein mögen, denke ich, dass das C ++, das die Vertrautheit und nachgewiesene Erfahrung mit C fördert, und das Versprechen der Objektorientierung (ursprünglich mit dem Namen C with Classes) aus dem Jahr 1983 ein Eckpfeiler für den Erfolg der objektorientierten Programmierung waren.

Einige Hinweise für mehr Perspektive - http://journal.thedacs.com/issue/43/88

Warum also OO?

Ich denke, in jenen Tagen (wenn Sie sich die Perspektive des Projekterfolgs ansehen) hat es Sinn gemacht, dass das, was Sie besser verstehen können, besser handhabbar ist. Objektorientierte Methodik mit dem Versprechen "Alles im Leben ist ein Objekt" schien mehr wie gesunder Menschenverstand zu sein, noch bevor sich herausstellte , dass es sinnvoll ist. Der praktische Erfolg dieses Faktors war der Gedanke, die reale Welt und das vorliegende Problem ausreichend zu modellieren, bevor man die Waffe springt - was meiner Meinung nach etwas grundlegend Neues ist, das OO angeboten hat, das bis zu diesem Zeitpunkt kein anderes Paradigma bot. Und auf jeden Fall, da dieses Paradigma Sie gezwungen hat, etwas nachzudenken, bevor Sie mehr als nur prozedurale Sprachen codieren , hat es sichtbaren Erfolg bei den eingesetzten Softwareprojekten gezeigt, und seitdem haben sie sich durchgesetzt!

BEARBEITEN
Ich möchte auch hinzufügen, dass sich Programmiersprachen parallel zu solchen grundlegenden Konzepten (OO-Paradigma, Aspekt, virtuelle Maschinen) gleichzeitig entwickelten. Jedes neue Konzept und jedes neue Denken entstand erst, als eine neue Programmiersprache es beherrschte - nur Vertrautheit bewahren, aber Grundlagen ändern Ader! Gleichzeitig sind dieses neue Konzept und die neuen Sprachen erst aufgrund neuer geschäftlicher Probleme entstanden. 1980er Jahre - OO für große Software, 1990 Java im Internetzeitalter, PHP / ASP und viele andere für das Web. Innovationen in den Programmiersprachen wurden auch hauptsächlich durch die diskontinuierlichen Marktbedürfnisse vorangetrieben.

Zusammenfassend war Anfang der 80er Jahre das Zeitalter, in dem größere kommerzielle Software auf den Markt kam - während Projekte mit prozeduralen Sprachen ihre Probleme hatten, zeigte OO das bessere Licht und machte Projekte erfolgreicher.

Dipan Mehta
quelle
Was waren die Merkmale der Schicht und wohin sollte sie gehen? Ende der 70er Jahre. Was hat Entwickler dazu gebracht zu verstehen, dass es Zeit ist zu gehen? Müde von verfahrenstechnischen, ja, aber es muss von Vettern Alternativen ben?
Unabhängige
@Jonas - ok - hat die Antwort geändert.
Dipan Mehta
In Bezug auf den historischen Erfolg, den wir bewerten, können wir definitiv sagen, dass Vertrautheit eine Rolle spielt. C (war Nachfolger von B), C ++ war ein besseres C, obwohl OO angeblich ein Paradigmenwechsel war. Sogar Java war ein fertiger Sprung von C ++ (was eher wie C ++ ohne C ++ - Probleme war, z. B. Speicher und Portabilität). Die meisten dieser Sprachen durchkreuzten Abgründe, indem sie vorhandenen Raum effektiver erlangten, obwohl sie etwas grundlegenderes in sich hatten. Dies gilt umso mehr, als jede Sprache einige Programmierer anzieht, die bereits einige andere Programmiersprachen beherrschen. ABER das mag nicht immer wahr sein!
Dipan Mehta
1
Ich möchte auch hinzufügen, dass sich die Programmiersprachen parallel zu solchen grundlegenden Konzepten (OO-Paradigma, Aspekt, virtuelle Maschinen) gleichzeitig entwickelten. Jedes neue Konzept und jedes neue Denken entstand erst, als eine neue Programmiersprache es beherrschte - nur die Vertrautheit bewahren, aber die Grundlagen von Grund auf ändern ! Gleichzeitig sind dieses neue Konzept und die neuen Sprachen erst aufgrund neuer geschäftlicher Probleme entstanden. 1980er Jahre - OO für große Software, 1990 Java im Internetzeitalter, PHP / ASP und viele andere für das Web. Innovationen in den Programmiersprachen wurden auch hauptsächlich durch die diskontinuierlichen Marktanforderungen vorangetrieben.
Dipan Mehta
1
"Die reale Welt modellieren" klingt schlüssig, aber in den meisten Fällen passiert es nicht. Die CustomerKlasse nicht Methoden wie eatLunch, goToWorkoder sleep, wenn dies ist , was Kunden in dem tun reale Welt . Die ProductKlasse verfügt über mehrere Methoden, obwohl die meisten Produkte in der realen Welt überhaupt kein Verhalten aufweisen . Daher würde ich argumentieren, dass das OO-Modell nur (mehr oder weniger) in Bezug auf Eigenschaften, aber überhaupt nicht in Bezug auf das Verhalten mit der realen Welt übereinstimmt. Sie benötigen OO jedoch nicht, um ein Datenmodell zu haben, das realen Objekten entspricht. Datensatztypen sind alles, was es braucht.
user281377
6

Ich denke, der Hauptgrund war der Erfolg von grafischen Benutzeroberflächen wie X und Windows. Eine GUI besteht aus mehreren Objekten, die ein eigenständiges Verhalten aufweisen, das OO genau darstellen kann.

Auf der anderen Seite folgt eine textbasierte Benutzeroberfläche (die nicht versucht, einer GUI zu ähneln) häufig einfach einem Befehlsantwortmuster, das leicht in einer prozeduralen Sprache implementiert werden kann. Geschäftsregeln und ähnliches wurde jahrzehntelang ohne allzu viele Probleme mit prozeduralen Sprachen implementiert, und noch heute sind viele OO-Programme für Geschäftsanwendungen eher prozedurale; mit dummen Objekten, die die Daten enthalten, und zustandslosen Objekten, die die Geschäftsregeln enthalten; Das erste könnten Aufzeichnungen in einer prozeduralen Sprache sein, das zweite könnten Prozeduren sein.

user281377
quelle
4

Ich sehe OOP als einen natürlichen Evolutionsschritt aus dem Verfahrenscode heraus:

  1. Verfahrenscode: Fordern Sie die Maschine auf, A und dann B auszuführen.
  2. OOP: Packen Sie die prozeduralen Anweisungen in sehr wiederverwendbare Blöcke, indem Sie Schnittstellen / Ein- / Ausgänge definieren. (Warnung: Vereinfachung.)

Ich bin mir sicher, dass sich jemand mit einer breiteren Sicht einschalten wird, aber es scheint, als wäre dies ein logischer Fortschritt gewesen, Programmierern einfach die Möglichkeit zu geben, Code schneller zu produzieren: dh eine größere Wiederverwendung von Code zuzulassen.

Aus dieser Sicht war der größte externe Faktor die Reduzierung der Prozessorleistung (im Vergleich zu den Arbeitskosten für Entwickler zum Erstellen typischer Programme): Der Rechenaufwand bei der Verwendung von OOP-Klassen wurde weniger bedenklich als die Zeitersparnis für Entwickler. (Der gleiche Kompromiss zwischen CPU-Kosten und Programmierkosten hat viele andere Aspekte der Programmierung beeinflusst.)

Jamie F
quelle
2

Am Anfang war zwingende Programmierung (wenn man es so nennen könnte). Einfache Anweisungen, die dem Mainframe mitteilten, was und wie er berechnen soll. Diese Programmiersprachen verwendeten bedingungslose Sprünge und andere "unstrukturierte" Anweisungen, von denen die meisten nach heutigen Maßstäben exotisch sind.

Dann hat sich jemand Strukturen für die Programmierung ausgedacht. Das für eine Weile tun, während und für jede, die wir heute kennen. Es war eine große Innovation, da jetzt Anwendungen mit relativ komplexem Ablauf leicht geschrieben und verstanden werden konnten. So wurde strukturierte Programmierung geboren.

Dann kamen einige andere Leute, die sagten, dass Sie hier und da eine Menge Code wiederholen müssten, und es war ein Albtraum, einen Weg zur Wiederverwendung von Code zu finden. Die Leute entwickelten Prozeduren und Funktionen, um wiederverwendbare Code-Teile abzugrenzen. Dies brachte auch die Prinzipien der Kapselung und der Einzelverantwortung hervor.

Dann sagten einige Wissenschaftler, dass die Funktionalität eng mit den Daten gekoppelt sein sollte, an denen gearbeitet wird. Dann fügten sie die Vererbungskonzepte für die Wiederverwendung von Code und den Polymorphismus hinzu, um sie an die logische Art und Weise anzupassen, wie die Klassifizierung im wirklichen Leben funktioniert. So wurde die dritte Generation von Programmiersprachen und OOP geboren.

linkerro
quelle