![]() |
Argumente für Objekt orientierte Programmierung
Hallo,
ich habe einen Kollegen, der einer der qualifiziertesten Mitarbeiter bei uns ist. Er ist aber ein Verfechter der prozeduralen Programmierung mit z.B. Perl oder der funktionalen Programmierung mit z.B. Lisp. Welches sind die stichhaltigsten Argumente um die Vorteile von OOP in der Diskussion mit solch einem Kollegen herauszustellen? Ich höre von ihm immer: Dafür brauche ich keine Objekte, das kann ich in Perl auch auslagern. Gibt es sowas irgendwo im Internet? |
Re: Argumente für Objekt orientierte Programmierung
Hi,
ich muss ehrlich sagen, dass es keine großartigen Argumente gibt, die für (oder eben gegen OOP) sprechen. Ob du etwas mittels OOP löst oder funktional, prozedural, logisch, sonst wie hängt sehr sehr stark von der eigentlichen Problematik ab. Zudem sind die einzelnen Herangehensweisen nicht völlig disjunkt zueinander. Wenn er einer der herausragenden Kollegen ist, dann hat dass sicherlich seinen Grund. Die Vorteile der OOP liegen in den Regeln der OOP, aber dabei kommt es dann auch wirklich auf die Einhaltung an. Es heißt auch nicht, dass es nicht anders geht, der Aufwand ist nur unterschiedlich groß. Wenn du bei Wikipedia (oder den google Treffern) nach OOP schaust, sollte eigentlich ganz gut erklärt werden wo die Vorteile von Kapselungen, Vererbungen und vorallem Abstraktion liegen. Das imho Schönste ist, dass du halt sehr gut "komponentenartig" mit Objekten arbeiten kannst. Ist nur ihre Schnittstelle bekannt, so kannst du das konkrete Objekt leicht gegen ein anderes (z.B. effizienteres oder robusteres) austauschen ohne etwas am restlichen Code verändern zu müssen. Somit verdankst du der Abstraktion von einem konkreten Objekt die Wiederverwendbarkeit. Wichtig ist halt, dass nicht jeder Code der OOP ist auch gleich alle Vorteile bietet (oder im gleichen Maße). Wichtig ist es halt immer, dass der jenige der den Code erzeugt überhaupt weiß was er tut. Gruß Der Unwissende |
Re: Argumente für Objekt orientierte Programmierung
Zitat:
Argumente sind: Wiederverwendbarkeit Ich haeb hier eine Log-Klasse von einem Kollegen, die er in einem anderen projekt schon mal benutzt hat. Einfach die Klasse eingebunden und benutzt, fertig. höhere Übersichtlichkeit Prozedurale Programmierung resultiert in Spaghetti Code und somit geht die Übersichtlichkeit schenll verloren. einfachheres Refactoring Muss etwas geändert werden, kann ich die entsprechende Methode ändern. Und so lange die Schnittstellen sich nicht ändern, muss ich an keiner anderen Stelle etwas ändern. Optimiert der Kollege seine Log-Klasse, kann ich einfach die neue Klasse einbinden und fertig. Ich muss nicht an zich Stellen im Code was ändern. Bzw. ich habe sie erweitert und er könnte sie jetzt einfach in alten Projekten einbinden ohne dass er etwas am Code in den alten Projekten ändern muss und er hat trotzdem die neue Funktionalität verstecken von Funktionalität Ich als Endanwneder der Klasse muss mich nicht darum kümmern, wie etwas gemacht wird. Ich stecke vorne was rein und bekomme hinten das gewünschte Ergebnis raus. Was die Klasse macht oder wie sie das Ergebnis produziert sehe ich nicht und muss mich auch nicht interessieren, so lange ich die Klasse nicht verbessere oder erweitere. |
Re: Argumente für Objekt orientierte Programmierung
Zitat:
Aber wenn du dir Teile des amerikanischen Militärs nimmst (die Entwickeln auch mal größere Projekte), siehst du dass es ebend auch anders geht. Dort wurde wohl mal eine Raketensteuerung funktional programmiert (gut, die Rakete stürzte wegen einem Stackoverflow ab). Wie gesagt, es gibt Dinge die man mit OOP besser machen kann. Wenn ich aber keine Schnittstellen definiere oder wenigstens abstrakte Klassen, dann ist einfach nichts mit austauschen und alles läuft. Zudem gibt es mehr als Prozedural vs OOP, was ist mit der erwähnten funktionalen bzw. logischen Programmierung? Ich denke nicht dass es Konzepte gibt, die einfach nur der Vielfalt wegen existieren (ok, einige schon). Aber die die sich länger halten, werden sicherlich ihre Rechtfertigung haben (und dafür muss sie mir nicht bekannt sein) |
Re: Argumente für Objekt orientierte Programmierung
Zitat:
Wenn man nicht nur Daten von A nach B schieben muss sondern in einem größeren Projekt mit vielen Mitarbeitern zusammenarbeitet bemerkt man auch, dass die Komponenten-Strukur der Klassen die Zusammenarbeit erleichtert. Ausserdem kann man sich in der Objektorientierung auf eine höhere logische Ebene begeben. Man macht nicht mehr etwas mit Daten, sondern man deligiert Aufgaben an Objekte, die Ihren eigenen Status kennen und die Aufgaben verrichten können. Aber: * Man muß mehr kommunizieren (Schnittstellen spezifizieren, modellieren, ..) * Durch die benötigte Programm-Struktur wird die Programmierung komplexer (wer bräuchte sich sonst Gedanken über private, protected, override oder Vererbung zu machen) * Die erforderliche Qualifikation der Mitarbeiter ist höher |
Re: Argumente für Objekt orientierte Programmierung
Früher wurde alles ohne OOP programmiert und das funktionierte auch.
Es ist also nicht so, dass es Dinge gibt, die man ohne OOP nicht programmieren kann. Das das Raketenprogramm mit einem Stackoverflow abgestürzt ist, kann auch mit OOP passieren. Was ich persönlich bei OOP mag, ist die Vererbung. Man hat ein schickes Basis-Objekt, dass alles wichtige mitbringt. Davon leite ich ab und muss mich nur noch um die Spezialfunktionen kümmern. Alles andere funktioniert ja schon. Bemerke ich einen Fehler im Basis-Objekt, kann ich das korrigieren und die Kinder bekommen die Änderung gleich mit. Sowas kann man auch prozedural lösen, ist aber meistens viel aufwändiger. Die Argumente deines Kollegen sind typisch für Programmierer, die "schon immer so" programmiert haben und nichts Neues lernen wollen. Auch ich habe eine Funktionen-Sammlung, bei denen sich ein Objekt nicht lohnt, aber ein großes Projekt ohne OOP kann ich mir heute nicht mehr vorstellen und möchte ich auch nicht mehr machen. Solche Kollegen kann man nur überzeugen, wenn man denen zeigt, dass man Projekte schneller und besser entwickeln kann, als er, wenn man OOP einsetzt. Aber es gibt auch die ewig unbelehrbaren. |
Re: Argumente für Objekt orientierte Programmierung
Der Ansatz für die OO-Technologien lag und liegt gar nicht so sehr bei der OO-Programmierung, als in der OO-Analyse bzw. im Design. Die Erfahrung ist die, dass die Funktionlität eines Projekts sich im Laufe der Zeit sehr grundsätzlich ändern kann. Es ist offensichtlich, dass damit das Fundament eines Systems kippen kann, wenn dieses an den Funktionen (->prozedural) aufgehängt ist. Ein an den "Main playern" (deusches Wort fällt mir gerade nicht ein), orientiertes Design ist dagegen oft robuster, da diese "Objekte" sich nicht so rasch ändern. So oder so ähnlich waren die Kerngedanken, die dann zur Abkehr von den prozeduralen und der Entwicklung von objekt orientierten Systemen geführt hat.
Es ist dann natürlich nur folgerichtig, wenn ein OO Design auch imt OO Programmierung umgesetzt wird. Vieleicht helfen diese Gedanken ja weiter. Ansonsten gilt natürlich: Lesen bildet! (Ad hoc fällt mir G.Booch: "Object orientated design with applications" ein) Gruß PMM |
Re: Argumente für Objekt orientierte Programmierung
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Ich könnte weitere Argumente nennen, die nicht so einfach zu wiederlegen sind, zum Beispiel ein ![]() In eine objektorientierten Sprache mit Templates (in .NET: Generics) kann man beispielsweise sowas schreiben:
Code:
Und das ohne Typecasting und ohne überladene Funktionen. Sogar folgendes ist möglich:
SomeListClass<int> myList;
myList.Add(42); SomeListClass<float> myOtherList; myOtherList.Add(2.4);
Code:
Das wird ihm mit Perl nicht so leicht gelingen, ohne Typecasts, bei denen er sich selbst um die Typsicherheit kümmern muss. In meinen Beispielen *garantiert* dir der Compiler, daß *du* nichts falsches machst.
SomeListClass<SomeOtherClass*> yetAnotherList;
SomeOtherClass *someObject = new SomeOtherClass(); yetAnotherList.Add(someObject); Zitat:
Wenn es bei euch nur darum geht, von A nach B zu kommen, wirst du immer den kürzeren ziehen. Umgekehrt wird einer, der versucht, dir prozedurale Programmierung einzuflößen, ebenfalls immer den kürzeren ziehen. Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz