Was ist dran an objektorientierter Programmierung?



  • Man hat Objekte mit Datenkapselung (Information Hiding) und dann noch Vererbung und Polymorphie. Und das wars dann. Eigentlich doch garnichts besonderes, oder?



  • jokar schrieb:

    Man hat Objekte mit Datenkapselung (Information Hiding) und dann noch Vererbung und Polymorphie. Und das wars dann. Eigentlich doch garnichts besonderes, oder?

    Vom Compiler her gesehen ist das so. Nur ein wenig syntaktischer Zucker.
    Vom Programmierer aus steckt da noch ein wenig mehr drin, nämlich eine ganz neue Sichtweise auf die Programmiersache.



  • Das Konzept der motorisierten Fortbewegung besteht auch nur aus Fahrzeugen und Straßen, hat aber trotzdem unsere Welt entscheident verändert.



  • Was ist denn so neu an der Sichtweise bzw. wie war sie früher? Haben da alle die ganzen Daten wild durcheinander gemishct und nix gekapselt?



  • jokar schrieb:

    Was ist denn so neu an der Sichtweise bzw. wie war sie früher? Haben da alle die ganzen Daten wild durcheinander gemishct und nix gekapselt?

    Es ist *nicht* die Datenkapselung, die OO so toll macht. Aber erwarte am besten nicht, daß sich hier jemand entblödet, hier auch nur Ansatzweise eine Denkrichtung auszubreiten, nur damit fricky alles wieder kaputt macht. Dieses ist durch mangelnde Pflege vertrollt und umgekippt. Für ernsthafte Diskussionen über OO mußt Du ein anderes Forum suchen.



  • ?!?
    Wieso denn so verbittert?!?

    Interessant ist das Thema doch wohl...

    (Aus Sicht eines Lesers, der sich für die Standpunkte anderer zu diesem Thema interessiert hätte)



  • Abstraktion ist imo auch ein wichtiges Thema, welches durch die OOP geprägt wurde.

    Man macht sich immer weniger Gedanken um das WIE, sondern einfach nur, was man davon hat, wenn man ein Objekt rein benutzt.



  • Datenkapselung ist kein integraler Bestandteil der objektorientierten Programmierung! Es gibt viele Sprachen in denen es keine oder nur eine schwache Kapselung gibt!

    Was die OOP nach meiner Ansicht vor allem ausmacht, dass man den Code "um die Daten herum" gestaltet. In dem Sinne kommt sicher auch die Datenkapselung zu tragen, dass man die Daten vom restlichen Programmcode trennt. Und entsprechend auch die Polymorphie, als Weiterführung des Gedankens.



  • rüdiger schrieb:

    Datenkapselung ist kein integraler Bestandteil der objektorientierten Programmierung! Es gibt viele Sprachen in denen es keine oder nur eine schwache Kapselung gibt!

    Doch ist es, aber Datenkapselung != public/private.



  • jokar schrieb:

    Was ist denn so neu an der Sichtweise bzw. wie war sie früher? Haben da alle die ganzen Daten wild durcheinander gemishct und nix gekapselt?

    ich finde an oop am bestn, dass man objekte zusammensetzen, erweitern und/oder daraus wiederum andere objekte machen kann (klassen ableiten, komposition, aggregation, usw). das macht oo-code ziemlich flexibel. ähnliches kann mit prozeduralem code ziemlich fummelig werden, wenn man nicht vorausschauend genug geplant hat. ausserdem kommt oop der menschlichen denkweise etwas näher (viele dinge aus der realität lassen sich objektorientiert modellieren), als das gefummel mit befehlen, die ein computer versteht. allerdings darfste dich von der mächtigkeit der oop nicht blenden lassen. in manchen fällen ist oop zu 'ausschweifend'.
    🙂



  • volkard schrieb:

    ...nur damit fricky alles wieder kaputt macht....
    Für ernsthafte Diskussionen über OO mußt Du ein anderes Forum suchen.

    an was dachtest du dabei? javacore.de oder so? da bin ich tatsächlich nicht zugegen.
    🙂



  • wie kommst du eigentlich zu deinem nick, kommt fricky von frickeln
    (ist nicht wertend gemeint oder so.)?
    🙂



  • 🙂



  • frag0r schrieb:

    wie kommst du eigentlich zu deinem nick, kommt fricky von frickeln...?

    weiss ich auch nicht mehr, jedenfalls gibts mindestens zwei, die diesen nick verwenden. der echte (ich) lästert nur über c++, während der andere manchmal einigermassen sinnvolle sachen schreibt.
    🙂



  • Letztendlich ist OO Programmierung nur eine Erleichterung für den Programmierer.
    Der Code wird durch den Compiler sowieso in Maschinencode übersetzt und dort gibt es nunmal keine "Objekte" in dem Sinne mehr.
    Das ist auch immer dann das Manko, wenn man auf Geschwindigkeitsvergleiche zwischen imperativen Sprachen und Objektorientierten und compilierenden Sprachen trifft.
    Das ist dann immer abhängig wie der Compiler bei der Begradigung in die Maschinensprache optimiert.



  • jokar schrieb:

    Man hat Objekte mit Datenkapselung (Information Hiding) und dann noch Vererbung und Polymorphie. Und das wars dann. Eigentlich doch garnichts besonderes, oder?

    Nope, das ist eine Implementierung von OOP, in C++, C#, Java.

    OOP ist das fuer was OOP steht, Object Orientierte Programmierung. Man hat nicht mit Codebloecken zu tun (wie bei der Prozeduralen Programmiering), sondern mit diskreten Objekten, die untereinander Nachrichten austauschen und aus anderen Objekten aufgebaut sein koennen.

    In Python hast du z.B. keine Datenkapselung, in JS keine Vererbung, usw.



  • Das Problem an OOP ist, dass viel Neulinge meinen jeden Scheiss in Klassen verpacken zu müssen, obwohl es gar nichjt angebracht ist.



  • sdfsdfsd schrieb:

    Das Problem an OOP ist, dass viel Neulinge meinen jeden Scheiss in Klassen verpacken zu müssen, obwohl es gar nichjt angebracht ist.

    Schlimmer noch, die meisten Neulinge glauben das allein die Benutzung von Klassen ihren Code bereits objektorientiert macht.



  • DEvent schrieb:

    jokar schrieb:

    Man hat Objekte mit Datenkapselung (Information Hiding) und dann noch Vererbung und Polymorphie. Und das wars dann. Eigentlich doch garnichts besonderes, oder?

    Nope, das ist eine Implementierung von OOP, in C++, C#, Java.

    OOP ist das fuer was OOP steht, Object Orientierte Programmierung. Man hat nicht mit Codebloecken zu tun (wie bei der Prozeduralen Programmiering), sondern mit diskreten Objekten, die untereinander Nachrichten austauschen und aus anderen Objekten aufgebaut sein koennen.

    In Python hast du z.B. keine Datenkapselung, in JS keine Vererbung, usw.

    Das was da steht hat garnichts mit C++, C# oder Java zu tun. Das mit den Objekten, die untereinander Nachrichten austauschen stimmt zwar, aber ist zu wenig. Datenkapselung hast du natürlich auch in Python, wenn du objekt orientiert programmierst. Datenkapselung hat auch nichts mit Compilerprüfungen ob public oder private zu tun. Dass das hier immer falsch verstanden wird liegt glaub ich an der schlechten Übersetzung von Information Hiding bzw. Encapsulation. Es geht einfach darum, dass das Objekt eine Schnittstelle anbietet und jeder kann die verwenden, ohne wissen zu müssen was intern passiert. Das Objekt versteckt/kapselt die Information über die internen Daten/Implementierung usw.

    Ich kenn mich zwar mit JS nicht aus, aber laut wikipedia hat es Vererbung, auch wenn es keine Klassen hat.
    http://de.wikipedia.org/wiki/JavaScript#Vererbung_.28Die_Eigenschaft_.2Cprototype.E2.80.98.29

    Vererbung (Die Eigenschaft ,prototype‘) [Bearbeiten]

    Jede Funktion, d. h. jedes vom Function-Prototyp abgeleitete Objekt verfügt über eine Eigenschaft prototype. Diese übernimmt eine wichtige Aufgabe, wenn die Funktion als Konstruktor benutzt wird, um neue Objekte zu initialisieren. Die Eigenschaft prototype definiert in diesem Falle gemeinsame Eigenschaften aller Objekte, die mit dem Konstruktor erstellt werden. Man spricht von prototyp-basierter Vererbung. Auf diese Weise ermöglicht JavaScript mehrstufige Vererbung:...



  • <>------<>--- schrieb:

    Datenkapselung hat auch nichts mit Compilerprüfungen ob public oder private zu tun. Dass das hier immer falsch verstanden wird liegt glaub ich an der schlechten Übersetzung von Information Hiding bzw. Encapsulation. Es geht einfach darum, dass das Objekt eine Schnittstelle anbietet und jeder kann die verwenden, ohne wissen zu müssen was intern passiert. Das Objekt versteckt/kapselt die Information über die internen Daten/Implementierung usw.

    Und jetzt streichen wir noch das Wort "Objekt", da könnte auch Übersetzungseinheit, Modul, Funktion, Prozedur, Sub, Funktionensammlung, Struktur, Klasse, Record, Datenbanktabelle, Programm, Treiber oder irgend was anderes stehen.
    So, wie Du es schreibst, scheint Datenkapselung automatisch zur Objektorientierung zu führen, das ist nicht der Fall. http://www.computerwoche.de/heftarchiv/1988/13/1154579/


Anmelden zum Antworten