Objektorientierte Programmierung: Warum „orientiert“?

14

Ich bin den größten Teil meines Studiums im Programmieren von Spielen. Dies ist kein Informatik-Abschluss, daher wird ein Großteil der Theorie zugunsten des praktischen Portfolioaufbaus und des JIT-Lernens gemieden, was in der Spielebranche anscheinend wichtiger ist. Das erste Thema war "Einführung in die objektorientierte Programmierung".

Dieser Satz hat mich nicht gestört, bis ich etwas über die verschiedenen Programmierparadigmen erfahren habe (diese Liste erhalte ich von https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • Imperativ
  • Funktional
  • Verfahrens
  • Strukturiert
  • Ereignisgesteuert
  • Objektorientierten
  • Deklarativ
  • Automatenbasiert

Ich verstehe, dass dies keine vollständige Liste ist und dass nicht alle dieser Konzepte gleich sind und die meisten von ihnen nicht einmal exklusiv sind, aber ich verstehe nicht, warum die meisten von ihnen nur ein Wort haben - Imperativ; funktionell; deklarativ - aber wenn wir über das Programmieren mit Objekten sprechen, müssen wir klarstellen, dass wir uns an diesen Objekten orientieren. Können wir nicht einfach verwenden Objekte? Kann nicht nur wir haben Objekte? Warum müssen sie uns als Leitstern ausrichten ?

Wenn Sie hier nachsehen ( https://en.wikipedia.org/wiki/Object-oriented_programming ), wird der Begriff "orientiert" nirgends als eigener Begriff verwendet. Es wird nur "Objekt" erklärt.

Außerdem kann ich aus praktischen Gründen nachvollziehen, warum Event-Driven verwendet wird, da die Ereignisprogrammierung bereits bei der Ausführung einer Konferenz erfolgt und die automatische Programmierung so klingt, als würden Sie eine Roboterproduktionslinie einrichten. daher ist es hilfreich, dort zusätzliche klärende Worte zu haben.

Was macht die Objektprogrammierung als Ausdruck nicht genug, um zu beschreiben, was wir tun, wenn wir Objekte in unserer Programmierung verwenden?

Von meinem Ton her mag ich das Wort "orientiert" natürlich nicht so sehr. Es erinnert mich an meine Zeit als Gerichtsreporter, als ich Anwälten zuhöre, die den Satz "in Bezug auf" als eine Art verbales Häkchen verwenden. Es hatte nichts zu bedeuten; Es war nur ein Begriff, den sie benutzten, um die Luft zu füllen, während sie versuchten, darüber nachzudenken, was sie als nächstes sagen sollten. Ich versuche jedoch nicht, einen Sprachwechsel zu befürworten, ich frage nur, warum es so ist, wie es ist. Wenn jemand weiß, warum es aus rein historischen Gründen auf diese Weise bekannt wurde, dann ist das die Antwort. Es wird Munition sein, wenn ich jemals beschließe, meine Zeit für einen Sprachwechsel zu verschwenden.

Auf der anderen Seite, wenn es tatsächlich ein nützlicher Grund , warum eine Sprache oder ein Stück Code muss , ist darauf zu Objekten, unter Ausschluß aller anderen Richtungen, im Gegensatz zu nur sie in seinem toolbelt mit, wie Werkzeuge , würde ich wirklich sein interessiert, darüber zu lernen. Ich mag es, nützliche Dinge zu lernen.

Exkrubulent
quelle
11
Ich denke, "objektiv" oder "anstößig" würde nicht den richtigen Eindruck davon vermitteln, was wirklich gemeint ist ;-)
Doc Brown
Ich dachte über "objektiviert" nach, entschied aber, dass dies auch die falsche Stimmung auslösen könnte.
Excrubulent
1
Ich denke, "Objekt" ist der Fehler, nicht "orientiert". Was wir objektorientiert nennen, ist normalerweise klassenorientiert.
Steve314
1
Alle Phoenix Wright-Fans möchten es einfach "OBJECTION !! Programming" nennen?
Katana314

Antworten:

24

Ich glaube, Sie lesen viel zu viel in einem einfachen grammatikalischen Konstrukt. Schauen Sie sich Ihre Paradigmenliste an, die aus einem Grund, den wir in Kürze behandeln werden, unterschiedlich sortiert ist:

  • Imperativ
  • Funktional
  • Verfahrens
  • Strukturiert
  • Deklarativ
  • Ereignisgesteuert
  • Automatenbasiert
  • Objektorientierten

Was haben die Wörter gemeinsam? Sie sind alle Adjektive, weil sie das Wort "Programmierung" modifizieren sollen. Mit Ausnahme von "imperativ" sind sie alle keine "natürlichen" Adjektive, sondern "adjektivierte" Substantive - Substantive, die tatsächlich den Kern des Paradigmas beschreiben: Funktion, Struktur, Automaten und Objekt.

Es gibt zwei verschiedene Arten, wie die Substantive adjektiviert werden: durch ein Suffix wie -al oder -ed oder durch das Erstellen eines zusammengesetzten Wortes unter Verwendung eines Bindestrichs. Nun, wie Doc Brown betont hat, haben die Suffixe, die zur Adjektivierung von "Objekt" verwendet werden könnten, eine andere Bedeutung. Was Zusammensetzung hinterlässt.

Und ich behaupte, dass es reiner Zufall oder Geschmack ist, dass Alan Kay "orientiert" für sein zusammengesetztes Adjektiv "objektorientiert" gewählt hat. Es hätte genauso gut "objektgesteuert" oder "objektbasiert" sein können, und Sie könnten auch zu viel in diese hineinlesen. Klingt "getrieben" nicht nach einer ungesunden Besessenheit?

Michael Borgwardt
quelle
1
Hervorragender Punkt (obwohl ich denke, Sie meinen Adjektive, nicht Adverbien - "Programmierung" ist in diesem Kontext ein Substantiv).
JW01
@ JW01: Hoppla, du hast Recht
Michael Borgwardt
Dies ist eigentlich ein sehr guter Punkt - das Wort "orientiert" gibt der Phrase eine andere Bedeutung als "Objektprogrammierung", da das Wort "Objekt" an sich kein Adjektiv ist. Eigentlich würde ich sagen, der Grund, warum "orientiert" gewählt wurde, war für die Alliteration. Außerdem habe ich nichts hineingelesen, ich habe übertrieben, um zu betonen, dass es dieses Wort "orientiert" gibt, das dort völlig unerklärt und unbestritten in der Literatur steht, was mich fragte, ob es tatsächlich etwas unternimmt, um sich seinen Platz zu verdienen . : P
Excrubulent
Ich frage mich, warum er sich nicht für objektbesessen entschieden hat ... oh ja, das sind nur die Eiferer, die nicht wissen, wann sie aufhören sollen. ;-)
Deduplizierer
Es gibt ein Buch des polnischen Autors Jerzy Grębosz mit dem Titel "Symfonia C ++" ("Die Symphonie in C ++"), in dem der Autor versucht, diesen Satz auf interessante Weise zu verstehen: Er sagt, er heißt "Symfonia C ++". objektorientiert ", weil der Code sich" an dem Objekt orientieren "kann, mit dem er gerade arbeitet (polymorphes Verhalten). Er unterscheidet dies von den Sprachen, in denen es nur ein Konzept von "Objekten" als Daten gibt. Es gibt keine historischen Beweise dafür, dass dies die ursprüngliche Bedeutung war, aber es ist durchaus erklärend, auch als post-factum Erklärung.
BarbaraKwarc
18

Wenn wir jedoch über das Programmieren mit Objekten sprechen, müssen wir klarstellen, dass wir uns an diesen Objekten orientieren. Können wir nicht einfach Objekte verwenden? Können wir nicht einfach Gegenstände haben?

Ehrlich gesagt, ist es ein Überbleibsel der Geschichte. Funktionale Programmierung ist wirklich funktionsorientierte Programmierung, deklarative Programmierung ist wirklich deklarationsorientierte Programmierung ... verwenden wir schließlich nicht einfach Funktionen? Können wir nicht einfach Funktionen haben?

"Objektorientiert" rollt besser von der Zunge und ist historisch verwurzelt.

Die "Orientierung" kommt, weil wir nicht über Programmierung sprechen, sondern über Design. Nur weil wir Objekte oder Funktionen oder Ereignisse verwenden, bedeutet dies nicht, dass unsere Entwurfsmethodik durch Modellierung aller drei erfolgt. Durch die Angabe der Ausrichtung der Entwurfsmethodik wird Programmierern mitgeteilt, wie sie diesen Entwurf interpretieren und erweitern sollen - wie der Modellierungsfokus die Implementierung färbt.

Telastyn
quelle
Es klingt also so, als würden Sie sagen, dass "objektorientiert" eine Art Richtlinienaussage mit redundanter Formulierung ist. Genau wie "proaktiv" im Wesentlichen die gleiche Bedeutung wie "aktiv" hat, muss nur ein redundantes Präfix hinzugefügt werden sicher, dass der Zuhörer die Bedeutung nicht übersieht.
Excrubulent
1
Ich denke, Sie haben es wirklich verstanden: Wir entwerfen objektorientiert, und deshalb sind die Sprachen objektorientiert - damit wir dieses Design zum Ausdruck bringen können.
K.Steff
1
@Excrubulent Nein, das Hinzufügen von "orientiert" macht es spezifischer. "Objektorientiert" bedeutet, dass wir nicht auf Besonderheiten beim Programmieren von Objekten eingehen, sondern vielmehr darauf, wie Programme so gestaltet werden, dass sie Objekte auf sinnvolle Weise verwenden. "Objektprogrammierung", "Funktionsprogrammierung" oder "Deklarationsprogrammierung" würde sich darauf beziehen, spezifisch über diese spezifische Konzeptimplementierung anstatt über Entwurfsprinzipien zu sprechen. "Funktional" und "deklarativ" sind Wörter mit Suffixen, die versuchen, die gleiche Bedeutung zu vermitteln, aber für Objekte "objektiv" oder "objektiv" nicht viel Sinn machen.
Ilari Kajaste
Und wie Michael Borgwardt antwortete , ist das Wort "orientiert" in keiner Weise besonders. Es könnte genauso gut "angetrieben" oder "gegründet" werden. Der wichtige Punkt ist, dass es nicht "Objektprogrammierung" sein kann. (Nun, Laguange ist immer flüssig, also könnte es sein , aber es wäre nicht so beschreibend.)
Ilari Kajaste
Ich habe die Antworten gewechselt, weil die Antwort von Michael Borgwardt tatsächlich die Bedeutung des Wortes erklärt und wie es die Phrase modifiziert.
Excrubulent
2

Nennen wir es, um zu erklären, dass Objekte ein sehr wichtiger Teil des Paradigmas sind.

Die objektorientierte Programmierung hat ihre Wurzeln in Simula , das im Wesentlichen ALGOL und einige neue Funktionen zur Objektprogrammierung war. Und im Einklang mit dieser Geschichte ist es auch heute in vielen Sprachen (sogar in den "reinen OO-Sprachen") durchaus möglich, etwas zu codieren, das im Wesentlichen nur ein prozedurales Programm mit einigen darin enthaltenen Objekten ist. Aber dies wird von erfahreneren Entwicklern als schlechter Stil angesehen.

Tatsächlich unterscheidet sich etwas, das "objektorientiert" ist, sehr von "prozedural". Das wichtigste Konzept ist die Verwendung von Vererbung und Polymorphismus. Wenn Sie die Funktionsweise von Klassen und virtuellen Methoden wirklich verstehen und verinnerlichen , ist dies eine aufschlussreiche Erfahrung, die in vielen Fällen die Art und Weise ändert, wie Sie Code schreiben. Dies ist ein echter Paradigmenwechsel. (Angenommen, Sie haben zuerst mit dem Schreiben von Prozedurcode begonnen. Viele Studenten verwenden heutzutage direkt Java oder C # als Muttersprache, und IMO verpassen sie es, die Vorteile von OO wirklich zu verstehen.)

Wir nennen es objektorientierte Programmierung, weil ein im OO-Stil geschriebenes Programm nicht nur Objekte enthält. Die Struktur des gesamten Programms basiert auf ihnen und ihrer Arbeitsweise.

Mason Wheeler
quelle
Dies ist eine ähnliche Antwort wie Telastyns, außer dass Sie den Eindruck erwecken, dass sich der Begriff "objektorientierte Programmierung" grundlegend von "Objektprogrammierung" unterscheidet. Können Sie erklären, wie sie unterschiedlich sein könnten? Ich meine, es scheint mir, dass OOP ein Begriff ist, der locker genug ist, dass OP die gleiche Funktion genauso gut erfüllen würde.
Excrubulent
2
Heutzutage wechseln viele Studenten direkt zu Java oder C # als Muttersprache, und IMO verpassen sie es, die Vorteile von OO wirklich zu verstehen, wenn sie dies tun. - Eigentlich habe ich mit C ++ angefangen und bei meiner ersten Aufgabe eine Mischung aus Objekten und Funktionen verwendet, die ich jedoch für die Verwendung von Funktionen herabgesetzt habe. Einige dieser Funktionen waren rein funktional und profitierten überhaupt nicht von der Einkapselung in ein Objekt, aber andere, die Zeiger auf Variablen benötigten, um zu funktionieren (dh modifizierte Statusinformationen), wurden viel einfacher zu erstellen und aufzurufen, sobald sie vorhanden waren In einem Objekt habe ich also beide Seiten gesehen.
Excrubulent