Vorteile von OOP (Objektorientierter Programmierung)?

6 Antworten

Sämtliche Merkmale von OOP findest Du exakt genauso realisierbar in anderen "Dialekten".

  • Kapselung: Machst Du exakt genau so in Datenstrukturen, Funktionen, Namespaces, Modulen in Form von Dateien, Modulen in Form von Paketen. Kapselung mit den spezifischen Ausdrucksmöglichkeiten der OOP ist nur ein Detail unter den vielfältigen Ausdrucksmöglichkeiten zur Kapselung insgesamt.

  • Wiederverwendung von Code: Macht selbst jeder Maschinenprogrammierer. Machst Du mit restlos jeder noch so abgehangenen und ausgeleierten Programmiersprache. Ist eine Erfindung aus der Zeit der allerersten Rechenmaschinen. Hat mit OOP genau Null Komma Nichts spezifisches zu tun. Es leiert sich aber als Spruch aus dem Munde eines Lehrers, der SONST keine Ahnung hat, so schön Eindruck schindend daher - besonders wenn die Zuhörer kein Rückgrat zum Hinterfragen haben und alles glauben, was man ihnen hinschmeißt.

  • Vererbung: Neben der speziellen syntaktischen Variante der OOP war Vererbung ebenfalls mit verschiedensten Organisationsformen lange vor der Einführung von OOP gebräuchlich - unter anderem durch includes. Verschiedene Programmiersprachen bringen verschiedene Instrumente zur Organisation vom Äquivalent von Vererbung mit. Die OOP hat hier den Vorteil (den ich in diesem Fall auch anerkenne), daß sie die Formulierung der Vererbung vereinfacht.

Ich gebe mal zu bedenken, daß die ersten OOP-Systeme in C++ nicht mit OOP-fähigen Compilern aufgesetzt wurden, sondern mit der Verarbeitung von Preprozessor-Definitionen. Die OOP ist so AUCH MÖGLICH und mitnichten weniger leistungsfähig. Indem sie in die Sprache integriert wird, werden aber die Möglichkeiten des Compilers verbessert, die Zusammenhänge der betreffenden Konstrukte zu prüfen.

Die OOP ist zunächst mal nichts weiter als ein Dialekt mit Unterschieden analog denen zwischen Russisch und Deutsch/Englisch: Bei der OOP geht man von einer primären Stellung eines Objektes im Satzbau aus (alias daß man das Subjekt in der Umgangssprache immer an den Anfang des Satzes stellen würde). Bei der sonst alternativ üblichen Variante der "funktionsorientierten" Programmierung stellt man dagegen eine Funktion (alias das Verb des Satzes) an den Anfang bzw. in den Fokus der Formulierung.

So wie Du in RESTLOS JEDER Sprache der Welt restlos jedes Etwas beschreiben bzw. ausdrücken kannst, so kannst Du es mit "FOP" haargenauso wie mit "OOP". Und auch die beiden sind nur die MEIST üblichen Dialekte. Es gibt noch weitere Varianten mit eigenen Besonderheiten - wie zum Beispiel axiomatisch orientierte Programmierung alias sogenannte "Funktionale" Programmierung, die an dem Denken orientiert ist, wie man es in Mathe und Physik und Chemie ab der Mittelstufe in der Schule lernt -, die allesamt ebenso grennzenlos alles zu formulieren gestatten.

Der Vorteil von OOP liegt also MITNICHTEN (!) darin, irgendwelche der hier in den anderen Antworten angeführten Eigenschaften bereitzustellen. OOP hat absolut gar keinen VORTEIL in dieser Beziehung. Es ist GLEICH-WERTIG (!) mit dem Rest der Programmiersprachen.

Es stellt schlicht und ergreifend eines unter vielen möglichen grammatikalischen Modellen des formellen Satzbaus beim Programmieren dar.

Unter BESTIMMTEN Bedingungen KANN es von Vorteil sein, die Grammatik der Formulierung auf OOP zu setzen: Nämlich genau dann, wenn

  • das zu implementierende Problem von sich aus eh schon in einer an objekt-orientierten Beschreibung vorliegt
  • das Denken der beteiligten Programmierer auf OOP eingeschossen ist (die Leute das also gewöhnt sind)

Als Informatik-Professor kann man allerdings genauso gut seinen Studenten befehlen, daß die zum Training ihres Abstraktionsvermögens und damit sie endlich einsehen, daß tatsächlich Dogmen a la "DAS geht aber NUR mit OOP" totaler Schwachsinn sind, ein Programm in "Brainfuck" zu schreiben (google hilft).

Na, na, na, WhiteGandalf.

Natürlich KANN man Kleidung auch mit dem Spinnrad und dem Handwebstuhl herstellen. Und selbstverständlich wärmt auch das speichelgegerbte Fell des handerlegten Bären. Allerdings liegen in der Produktionswelt Welten zwischen dem, was du postulierst, und dem, was "produktiv sinnvoll" ist. ;)

Allein die Tatsache, dass man einen Nagel auch mit einer Glasflasche in die Wand schlagen kann, macht aus der Flasche immer noch keinen Hammer.

Wir können gern in einem Feldversuch testen, wie es beispielsweise mit Wartbarkeit und Wiederverwendbarkeit aussieht. Und nicht nur dort spielen die 4G - nicht ganz grundlos - in einer ganz anderen Liga. ;)

Allein schon der Test BrainFuck vs. C# bei einer einfachen CD-Verwaltung (und erst recht bei einer anschließenden Funktionserweiterung) würde deine eigenen Argumente ad absurdum führen. Und nur allein "weil es möglich ist", heißt es noch lange nicht, dass es deshalb "keine Vor- bzw. Nachteile" hat.

Und auch die Kapselung hat in der OOP grundlegend feinere Granulate, und damit eine exorbitant höhere Produktionsperformance, als sie die anderen Hilfs- und Notkonstrukte, die du aufzählst, bieten können.

So wie Du in RESTLOS JEDER Sprache der Welt restlos jedes Etwas beschreiben bzw. ausdrücken kannst ...

Nicht ganz: Es gibt bis heute afrikanische Dialekte, die das Wort "Schnee" nicht beinhalten. Diese Menschen haben schlicht kein Wort für etwas, das sie nicht kennen. Im Gegenzug haben einige Dialekte der Inuit sogar bis zu 36 Wörter für "Schnee"... Bis vor wenigen Jahrzehnten galt ähnliches auch in vielen anderen Sprachen für "Rakete", "Astronaut" und eine Vielzahl weiterer Dinge, die schlicht nicht Gegenstand des Sprachgebrauchs waren und/oder sind.

In der Folge fehlen dir dann Mittel, auszudrücken, was du zu sagen hast. (Versuche mal, Schnee zu erklären, ohne das Wort "Schnee" und ohne solche Dinge, wie "Frost" u. ä. zu benutzen. Der Aufwand kann erheblich steigen - und unwirtschaftlich ist es obendrein, denn selbst für jene, die es vielleicht verstanden hätten, bliebe es reine Theorie.)

Du siehst: Allzu starke Abstraktion ist nicht wirklich realistisch. Und ebenso, wie die "natürlichen Sprachen" sind auch Programmiersprachen zu speziellen Zwecken gemacht. Natürlich kannst du dann trotzdem noch den Aufwand in Kauf nehmen und dich mit einer "unpraktischen" Sprache auszudrücken versuchen. Allerdings steigen - und hier schließt sich der Kreis wieder - auch die Fehleranfälligkeit und der Aufwand in der Wiederverwendung; um nur auf den genannten zwei Punkten herumzureiten.

0

Für mich ist ein persönlicher Vorteil, dass es durch Vererbung und Objekte wesentlich übersichtlicher ist, also wie gesagt, das kann jeder denken, wie er will, aber so sehe ich das ;)

Datenkapselung wäre z.B. ein wichtiger Vorteil.

Was möchtest Du wissen?