Kritik an OOP



  • Hi, ich habe mit gerade den Artikel auf Wikipedia über OOP durchgelesen und mich würde interessieren wie die Profis hier zu den einzelnen Kritikpunkten stehen.

    http://de.wikipedia.org/wiki/Objektorientierte_Programmierung

    OOP und Kontrollfluss
    Häufig genannte Vorzüge des OOP Paradigma sind eine verbesserte Wartbarkeit und Wiederverwendbarkeit des statischen Quellcodes.[3] Hierzu werden jedoch die Kontrollflüsse und das dynamische Laufzeitverhaltens den Daten/Objekten im allgemeinen untergeordnet, abstrahiert und weggekapselt. Die Kontrollflüsse bilden sich nicht mehr für den Entwickler transparent direkt in den Codestrukturen ab (wie z.B. bei prozeduralen Sprachen), eine Umsetzung in dieser Hinsicht wird dem Compiler überlassen. Hardware-nähere Sprachen wie das prozedurale C oder Assembler bilden den echten Kontrollfluss und das Laufzeitverhalten transparenter ab.[4] Mit der wachsenden Bedeutung von paralleler Hardware und nebenläufigem Code wird jedoch eine bessere Kontrolle und Entwickler-Transparenz der komplexer werdenden Kontrollflüsse immer wichtiger – etwas, das schwierig mit OOP zu erreichen ist.[5][6]

    Laufzeitverhalten und Energieeffizienz
    Die Effektivität des Laufzeitverhaltens von Anwendungen, die auf OOP-Techniken basieren, wird seit jeher kontrovers diskutiert. Alexander Chatzigeorgiou von der Universität Makedonien verglich die Laufzeiteffektivität und die Energieeffizienz von typischen Algorithmen (Gauß-Jordan-Algorithmus, Trapez-Integration und QuickSort) von prozeduralen Ansätzen und OOP-Techniken, implementiert als C- und C++-Software. Auf dem verwendeten ARM-Prozessor ergab sich für drei Algorithmen im Mittel eine um 48,41 % bessere Laufzeiteffektivität mit den prozeduralen C-Algorithmusvarianten. Es ergab sich außerdem eine im Mittel um 95,34 % höhere Leistungsaufnahme der C++-Varianten zu den C-Varianten.[8] Für Anwendungen auf mobilen Geräten, wie Handys oder MP3-Spielern mit begrenzten Leistungs- und Energiespeichervermögen, sind diese Unterschiede signifikant. Als Grund für den Unterschied in Effektivität und Energieeffizienz werden in dem Artikel generelle Abstraktions-Leistungseinbußen und die deutlich größere Anzahl von Zugriffen auf den Arbeitsspeicher durch OOP-Techniken genannt.

    • Luca Cardelli untersuchte für das DEC Systems Research Center die Effizienz von OOP-Ansätzen in dem Paper Bad Engineering Properties of Object-Oriented Languages mit den Metriken Programmablaufgeschwindigkeit (economy of execution), Compilegeschwindigkeit (economy of compilation), Entwicklungseffizienz für große und kleine Teams (economy of small-scale development und economy of large-scale development) und die Eleganz des Sprachumfangs selbst (economy of language features).[9]
    • Richard Stallman schrieb 1995: „Hinzufügen von OOP zu Emacs ist ganz klar keine Verbesserung; ich verwendete OOP bei der Arbeit am Fenstersystem der Lisp-Maschine und ich stimme dem häufig gehörten‚ ‚der überlegene Weg zu programmieren‘ nicht zu.“[10]
    • Eine Studie von Potok et al. [11] zeigte keine signifikanten Produktivitätsunterschiede zwischen OOP und prozeduralen Ansätzen.
    • Alexander Stepanow schlug vor, OOP beschreibt eine mathematisch-begrenzte Betrachtungsweise und nannte sie „fast einen genauso großen Schwindel wie die künstliche Intelligenz (KI)“.[12]


  • Scherzkeks!
    Was soll den ein objketorientiertes Quicksort sein?

    class Quicksort:public Sort{
    virtual ~Quicksort(){...
    

    Klar, wenn er Müll programmiert, muß er auch Müll messen.



  • volkard schrieb:

    Klar, wenn er Müll programmiert, muß er auch Müll messen.

    Nicht ganz so schlimm, aber fast:
    http://people.redhat.com/bkoz/benchmarks/tests/oopack_v1p8.cc

    Das ist der verwendete Code.

    Prinzipiell ist das nur ein Test ob der Compiler gut inlinen und optimieren kann.



  • An OOP kann man eine Menge kritisieren, aber die aufgeführten Punkte scheinen mir alle nicht besonders viel Nährwert zu haben.


  • Mod

    Shade Of Mine schrieb:

    volkard schrieb:

    Klar, wenn er Müll programmiert, muß er auch Müll messen.

    Nicht ganz so schlimm, aber fast:
    http://people.redhat.com/bkoz/benchmarks/tests/oopack_v1p8.cc

    Das ist der verwendete Code.

    Prinzipiell ist das nur ein Test ob der Compiler gut inlinen und optimieren kann.

    Tja. Nun habe ich mit g++ für den OO-Code deutlich bessere oder gleichschnelle Ergebnisse (besonders bei "Matrix" mit einem Faktor 0.7) und beim Intel-Compiler überall Faktor 1.0 (das heißt beide Paradigmen sind gleich schnell)*. Was will mir das jetzt sagen? Eigentlich komplett widerlegt der Punkt mit der Energieeffizienz würde ich sagen. Intel und GCC sind nun wirklich keine exotischen Compiler.

    *: Der Intel Compiler kann hier anscheinend deutlich besser optimieren. Der resultierende Code ist beim Intel um über einen Faktor 2 ⚠ schneller! Hier liegt wohl ein Programm vor, welches sehr viel Optimierungspotenzial hat (sprich: schlecht programmiert) und der intel stellt sich dabei einfach geschickter an.



  • nachgefragt schrieb:

    Hi, ich habe mit gerade den Artikel auf Wikipedia über OOP durchgelesen

    Dort steht vieles was nichts taugt oder nur persönliche Meinungen sind.



  • ~john schrieb:

    Dort steht vieles was nichts taugt oder nur persönliche Meinungen sind.

    Man kann über Wikipedia sagen was man will, aber DAS trifft auf die Deutsche mit ihrer absoluten Belegpflicht nicht zu. Da muss man sogar Trivialitäten wie: "Dieser Ansatz hat Vor- und Nachteile" belegen.



  • Na und? Die Meinungen sind halt durch Belege untermauert, aber das macht die Meinungen ja nicht objektiv, da es für gegensätzliche Positionen auch Belege gibt.



  • Kingdom of Nouns trifft die Probleme von OOP wesentlich besser.



  • maximAL schrieb:

    Kingdom of Nouns trifft die Probleme von OOP wesentlich besser.

    Nee, das trifft nur Versuche wie

    class Quicksort:public Sort{ 
    virtual ~Quicksort(){...
    


  • Was soll es denn für Probleme mit OOP geben? Wenn ich es brauche setzte ich es ein wenn ich es nicht brauche programmiere ich prozedural oder generetisch oder sonst was. Nicht umsonst ist C++ eine Multiparadigmensprache die sogar noch C mit im Kasten hat, wenn man es denn unbedingt braucht.

    Gruß Blue-Tec



  • volkard schrieb:

    maximAL schrieb:

    Kingdom of Nouns trifft die Probleme von OOP wesentlich besser.

    Nee, das trifft nur Versuche wie

    class Quicksort:public Sort{ 
    virtual ~Quicksort(){...
    

    Du solltest mal einen Wochenendausflug nach Javaland machen... 😉



  • Die Sprache die eine Firma aufgekauft hat und den Entwickler entlassen hat. 😃



  • Bashar schrieb:

    Na und? Die Meinungen sind halt durch Belege untermauert, aber das macht die Meinungen ja nicht objektiv, da es für gegensätzliche Positionen auch Belege gibt.

    Das ist auch wiederrum nur ne Meinung.

    Im Großen und Ganzen is die Qualität der Wiki Artikel sehr, sehr gut.



  • this->that schrieb:

    Bashar schrieb:

    Na und? Die Meinungen sind halt durch Belege untermauert, aber das macht die Meinungen ja nicht objektiv, da es für gegensätzliche Positionen auch Belege gibt.

    Das ist auch wiederrum nur ne Meinung.
    Im Großen und Ganzen is die Qualität der Wiki Artikel sehr, sehr gut.

    Es gibt Bereiche, die sind besser und welche, die sind schlechter. Zum Beispiel Krankheiten und Astronomie sind gut. Und der Tiefpunkt könnte bei http://de.wikipedia.org/wiki/Extreme_Programming liegen.



  • this->that schrieb:

    Bashar schrieb:

    Na und? Die Meinungen sind halt durch Belege untermauert, aber das macht die Meinungen ja nicht objektiv, da es für gegensätzliche Positionen auch Belege gibt.

    Das ist auch wiederrum nur ne Meinung.

    Nö.

    Im Großen und Ganzen is die Qualität der Wiki Artikel sehr, sehr gut.

    Kann sein, dazu hab ich nichts gesagt.



  • ~john schrieb:

    nachgefragt schrieb:

    Hi, ich habe mit gerade den Artikel auf Wikipedia über OOP durchgelesen

    Dort steht vieles was nichts taugt oder nur persönliche Meinungen sind.

    Das liegt daran, dass du eigentlich nie was richtig verstehst.



  • otze schrieb:

    ~john schrieb:

    Dort steht vieles was nichts taugt oder nur persönliche Meinungen sind.

    Man kann über Wikipedia sagen was man will, aber DAS trifft auf die Deutsche mit ihrer absoluten Belegpflicht nicht zu.

    Gerade das deutsche wikipedia ist in einigen Themenbereichen sehr stark von persönlichen Sichtweisen bestimmt. (die Quellen sind genauso subjektiv wie der wikipedia Artikel selbst) Das widerspricht einer Enzyklopädie deutlich. Diese ewigen Vergleiche zwischen verschiedenen Programmiersprachen sind meist vollkommen sinnlos. Da der jeweilige Autor meist nur eine der verwendeten Programmiersprachen wirklich beherrscht und den Rest nur mehr oder minder gut kennt. Die Ergebnisse sind dann entsprechend nichtssagend. Wenn man die Studie aus dem Zitat von Wikipedia zur Hand nähme, dann sehe man wahrscheinlich ziemlich schlechten C++ Code. Ich erinnere mich an eine Artikelserie in der c't, bei der C++, Delphi und Java verglichen wurden. Man konnte den Artikel entnehmen, daß der Autor nicht wirklich Ahnung von C++ und Java hatte, und so verwunderte es nicht, daß Delphi in den meisten Fällen am schnellsten war bzw bei den beiden anderen Sprachen massive Optimierungspotentiale vorhanden waren.

    Muß man so einen Quark in eine Enzyklopädie aufnehmen?



  • ~john schrieb:

    otze schrieb:

    ~john schrieb:

    Dort steht vieles was nichts taugt oder nur persönliche Meinungen sind.

    Man kann über Wikipedia sagen was man will, aber DAS trifft auf die Deutsche mit ihrer absoluten Belegpflicht nicht zu.

    Gerade das deutsche wikipedia ist in einigen Themenbereichen sehr stark von persönlichen Sichtweisen bestimmt. (...)

    Beispiele bitte, ansonsten kannst du viel erzählen wenn der Tag lang ist.



  • Gate schrieb:

    Beispiele bitte, ansonsten kannst du viel erzählen wenn der Tag lang ist.

    Hier wurde Wikipedia zitiert, und oh Wunder man kann zwar den Artikel des Autors im Netz kostenfrei bekommen, aber der Sourcecode ist nicht erhältlich, da es sich um ein kommerzielles Produkt handelt. Ohne Sourcecode sind solche Aussagen relativ witzlos.

    Wenn man sich nämlich http://shootout.alioth.debian.org/ anschaut, sieht die Welt anders aus. Hier ist der jeweilige Sourcecode erhältlich.

    Entscheidend ist in erster Linie, welcher Algorithmus verwendet wurde, erst danach kommen Optimierungen ins Spiel.


Anmelden zum Antworten