OOP: soll man jetzt alles in ne Klasse packen oder watt?



  • Gregor schrieb:

    Ich habe übrigens keine eigene Definition gebracht. Ich habe nur aus ner externen Seite zitiert.

    <a href= schrieb:

    http://en.wikipedia.org/wiki/Object-oriented_programming">
    There is not a single, widely-agreed upon definition of object-oriented programming. However, a survey of nearly 40 years of computing literature by Deborah J. Armstrong[2] identified a number of "quarks," or fundamental concepts, identified in the strong majority of definitions of OOP.

    Wenn du nun die "Quarks" durchgehst wirst du feststellen dass z.B. Java nach dieser Definition keine OO-Sprache ist. Würdest du dem auch zustimmen?

    <a href= schrieb:

    http://en.wikipedia.org/wiki/Object-oriented_programming">
    The idea behind object-oriented programming is that a computer program may be seen as comprising a collection of individual units, or objects, that act on each other, as opposed to a traditional view in which a program may be seen as a collection of functions, or simply as a list of instructions to the computer.



  • Shade Of Mine schrieb:

    es gibt keine definition von OOP.

    Oh, es gibt tausende Definitionen von OOP. Such mal mit Google. 😉 Deine Argumentation kommt mir ungefähr so vor: Es gibt keine allgemein gültige Definition der natürlichen Zahlen, weil einige meinen, die 0 sei natürlich und andere das anders sehen. ...also nutze ich die reellen Zahlen und sage einfach, es seien die natürlichen Zahlen.

    Es geht mir nicht darum, dass es Konzepte zur OOP gibt, die in gewissen Definitionen nicht vorkommen. Es geht mir darum, dass Du weiter vorne ein Design als OOP bezeichnet hast, das einfach nicht mit der Idee hinter der objektorientierten Programmierung in Einklang zu bringen ist. Das ist nicht eine Frage der Auslegung, ob jetzt ein bestimmtes Konzept noch dazu gehört oder nicht. Du hast etwas als OOP bezeichnet, was IMHO völlig gegensätzlich zur OOP ist.

    Shade Of Mine schrieb:

    allgemein halten alle java fuer 100% OO. was die mehrheit sagt stimmt noch lange nicht.

    Unglaublich, wie oft hier "Java" in den Mund genommen wird. Liegt das daran, dass ich in diesem Thread bin? Ich habe das Gefühl, dass ich zu den Leuten gehöre, die Java hier am wenigsten im Thread erwähnt haben.



  • Shade Of Mine schrieb:

    aber zugriffskontrolle != kapselung
    javascript hat zB keine privaten member.

    Als Datenkapselung (englisch: encapsulation) bezeichnet man in der Programmierung das Verbergen von Implementierungsdetails. Der direkte Zugriff auf die interne Datenstruktur wird unterbunden und erfolgt statt dessen über definierte Schnittstellen. Z.B. ist eine Deklaration von Daten nur innerhalb eines Programmmoduls eine Form von Kapselung.

    Private Eigenschaften erstellen
    Wenn es öffenliche Eigenschaften gibt, muß es logischerweise auch private, nicht öffentlich zugängliche, Eigenschaften in einer Klasse geben. Um solche privaten Eigenschaften zu definieren verwendet man das vorangestellte Wort var:

    function Person() {
    	this.vorname = "Hans";
    	this.nachname = "Müller";
    	this.geschlecht = "männlich";
    	var alter = 30;
    }
    

    Wenn man nun versuchen würde auf diese Eigenschaft in einem erstellten Objekt zuzugreifen, würde man dies nicht tun können:

    var neuePerson = new Person();
    alert(neuePerson.alter); //liefert undefined zurück
    

    Quellen:
    http://de.wikipedia.org/wiki/Datenkapselung_(Programmierung)
    http://webmatze.de/webdesign/javascript/javascript_oop_part_one.htm

    Wir sollen wir und auf neues konzentrieren, wenn wir bei das was vorhanden nicht einig sind?



  • Gregor schrieb:

    Oh, es gibt tausende Definitionen von OOP. Such mal mit Google. 😉 Deine Argumentation kommt mir ungefähr so vor: Es gibt keine allgemein gültige Definition der natürlichen Zahlen, weil einige meinen, die 0 sei natürlich und andere das anders sehen. ...also nutze ich die reellen Zahlen und sage einfach, es seien die natürlichen Zahlen.

    ich hab keinen bock auf diese kinderkacke.

    rede ordentlich mit mir oder lass es.

    Es geht mir nicht darum, dass es Konzepte zur OOP gibt, die in gewissen Definitionen nicht vorkommen. Es geht mir darum, dass Du weiter vorne ein Design als OOP bezeichnet hast, das einfach nicht mit der Idee hinter der objektorientierten Programmierung in Einklang zu bringen ist.

    erklaer mir warum.

    darum geht es. du sagst nur "es ist nicht oo". aber du kannst es nicht erklaeren.

    was fehlt dem tastatur beispiel?
    ich kann einfach den eingabetyp von tastatur auf maus aendern.
    ich kann neue typen hinzufuegen. das ganze mit statischer polymorphie. wenn ich multimethods haette, koennte ich das auch mit dynamischer.

    und dynamische oder statische polymorphie ist im prinzip das selbe.

    was fehlt dir? vererbung? das ist ein konzept. javascript hat keine vererbung.

    aber wozu brauche ich vererbung? code reuse?
    ich nehme an du wirst sagen fuer polymorpie - aber fuer statische brauche ich das nicht. da brauche ich vererbung nur fuer code reuse - wie JS zB super zeigt. dort ist vererbung nur fuer code reuse gut, und wird dort dadurch simuliert dass du den kompletten inhalt einer klasse in eine andere kopierst.

    Unglaublich, wie oft hier "Java" in den Mund genommen wird. Liegt das daran, dass ich in diesem Thread bin? Ich habe das Gefühl, dass ich zu den Leuten gehöre, die Java hier am wenigsten im Thread erwähnt haben.

    wenn ich eine andere sprache als beispiel nehme kapiert das ja keiner. schau dir die lisp und js beispiele an. ihr kennt nur java und c++. alles was nicht java oder c++ ist, wird ignoriert.



  • finix schrieb:

    <a href= schrieb:

    http://en.wikipedia.org/wiki/Object-oriented_programming">
    The idea behind object-oriented programming is that a computer program may be seen as comprising a collection of individual units, or objects, that act on each other, as opposed to a traditional view in which a program may be seen as a collection of functions, or simply as a list of instructions to the computer.

    Damit stimme ich voll und ganz überein. 😉



  • Zeus schrieb:

    Als Datenkapselung (englisch: encapsulation) bezeichnet man in der Programmierung das Verbergen von Implementierungsdetails. Der direkte Zugriff auf die interne Datenstruktur wird unterbunden und erfolgt statt dessen über definierte Schnittstellen. Z.B. ist eine Deklaration von Daten nur innerhalb eines Programmmoduls eine Form von Kapselung.

    ok. c++ kann keine kapselung.

    java uebrigens auch nicht. ich kann per unsafe an den internen sachen rumfummeln.

    das "wird unterbunden" ist nicht genau definiert. man verbietet es einfach und gut ist. wenn man durch tricks dann doch daran rum frickelt, dann ist das einfach undefiniertes verhalten.

    zB in PHP hat man die laengste zeit gesagt: wenn das ding mit einem _ beginnt, dann ist es private und du darfst es nicht nutzen.

    zugriff unterbunden. passt.

    technisch kann ich mir in c++ helfen indem ich private schreibe - laesst sich aber problemlos umgehen.



  • Der Punkt ist aber das C++ die Sprachmöglichkeit bietet OO zu programmieren ein Objektorientiert Design zu implementieren. Und das tut es. Ob es nun mit seinen Mittel auch es aushebeln kann. Ok es kann es, aber das hintert dich auch nicht daran Objektorientiert zu Programmieren.

    btw Präprozessor-Direktiven sind keine C++ Sprechmittel sondern ein C++ Werkzeug, oder?



  • Gregor schrieb:

    finix schrieb:

    <a href= schrieb:

    http://en.wikipedia.org/wiki/Object-oriented_programming">
    The idea behind object-oriented programming is that a computer program may be seen as comprising a collection of individual units, or objects, that act on each other, as opposed to a traditional view in which a program may be seen as a collection of functions, or simply as a list of instructions to the computer.

    Damit stimme ich voll und ganz überein. 😉

    Und wo genau list du da jetzt raus dass es zwangsläufig Methoden sein müssen mit denen man auf anderen Objekten operiert? Und was sagst du zu dem Rest?



  • Zeus schrieb:

    Der Punkt ist aber das C++ die Sprachmöglichkeit bietet OOP zu programmieren ein Objektorientiert Design zu implementieren. Und das tut es. Ob es nun mit seinen Mittel auch es aushebeln kann. Ok es kann es, aber das hintert dich auch nicht Objektorientiert zu Programmieren.

    finde ich sehr schwach diese definition von kapselung.
    kapselung ist fuer dich dann halt wenn die sprache minimalste zugriffkontrolle bietet. und wenn sie keine bietet ist es keine kapselung?

    kapselung ist ein konzept. ich kann es auch ohne schutzmechanismen machen. eine sprache muss ein mittel nicht unbedingt unterstuetzen damit ich es dort verwenden kann...



  • Ob die Sprache ein Feature bietet zu kapselt oder ein Schlüsselwort bietet ist nebensächlich (ledenfalls für mich, möge andere geben für die wichtig ist.)
    Das Ziel ist, was von OOP verfolgt wird, dass der Programmier gezwungen wird Schnittstelle zu definieren, und die Daten von Außen nicht zu sehen sind.



  • Die einzige Definition von OOP die ihr gebracht habt ist die: "Ich denkte das es OOP ist, also ist es OOP".

    double sqrt(void* x);
    

    So, was ist hier das Objekt ? Ich kann sqrt jetzt für ein beliebieges Objekt benutzen, also ist sqrt() eine Nachricht an alle Objekt die es gibt/je geben wird ?

    private gibt es auch in c++ nicht.
    #define private public und schon ist zugriffskontrolle weg.

    Alles klar. Mit einem Textparser willst du mir also Beweisen das es in C++ keine Kapselung gibt ? Mit genügent defines kann ich auch PROLOG in C++ programmieren.

    ist das etwa deine art zu argumentieren?

    dir ist schon klar dass du hier nicht mit irgendwelchen moechte gern noobs redest, oder?

    Mit deinem #define private public hast du dich irgendwie in diese Richtung bewegt.



  • DEvent schrieb:

    Die einzige Definition von OOP die ihr gebracht habt ist die: "Ich denkte das es OOP ist, also ist es OOP".

    weil man OOP nicht so einfach definieren kann.

    mach dich mal etwas schlau und schau dir vorallem mal andere sprachen an. es macht keinen sinn mit dir zu reden, du siehst nur deine kleine java oder c++ welt.

    double sqrt(void* x);
    

    So, was ist hier das Objekt ? Ich kann sqrt jetzt für ein beliebieges Objekt benutzen, also ist sqrt() eine Nachricht an alle Objekt die es gibt/je geben wird ?

    du kannst in einer zeile code nicht sehen ob sie objekt orientiert ist.

    moeglich dass x ein objekt ist. ich weiss es nicht.

    genausowenig wie du sagen kannst ob

    foo.bar(baz);
    

    objekt orientiert ist.

    private gibt es auch in c++ nicht.
    #define private public und schon ist zugriffskontrolle weg.

    Alles klar. Mit einem Textparser willst du mir also Beweisen das es in C++ keine Kapselung gibt ? Mit genügent defines kann ich auch PROLOG in C++ programmieren.

    der praeprozessor gehoert zu c++.

    sorry. das habe ich mir nicht ausgedacht.

    Mit deinem #define private public hast du dich irgendwie in diese Richtung bewegt.

    sorry, aber ich denke ich kann weit mehr sprachen als du und ich denke auch dass genug leute hier im forum dir bestaetigen werden dass ich genug ahnung von programmierung habe.

    ich rede doch sowieso 90% der zeit von sachen die du nicht verstehst. alles was du nicht kapierst ignorierst du. also mach mich nicht bloed an.

    ich fuer meinen teil denke doch dass wenn volkard, bashar, kingruedi und ich einer meinung sind, es doch sehr wahrscheinlich ist, dass es stimmt.

    du siehst nur deine kleine welt.

    ich rede mit dir nicht mehr darueber bist du dir javascript und lisp angesehen hast und das objekt modell dort verstanden hast.

    dann koennen wir weiter reden.



  • DEvent schrieb:

    Die einzige Definition von OOP die ihr gebracht habt ist die: "Ich denkte das es OOP ist, also ist es OOP".

    Weil es keine allgemeingültige OOP-Definition gibt.
    Vor allem aber ist OOP ein Konzept, eine Herangehensweise, die durchaus in verschiedenen Ausprägungen daher kommen kann; nicht die Featurelist einer Programmiersprache.

    DEvent schrieb:

    double sqrt(void* x);
    

    So, was ist hier das Objekt ? Ich kann sqrt jetzt für ein beliebieges Objekt benutzen, also ist sqrt() eine Nachricht an alle Objekt die es gibt/je geben wird ?

    Du wirst lachen, aber das kann durchaus hochgradig oo sein - wahrscheinlich ist dir einfach der Unterschied zwischen "Nachricht" und "Methode" nicht ganz klar.



  • finix schrieb:

    DEvent schrieb:

    Die einzige Definition von OOP die ihr gebracht habt ist die: "Ich denkte das es OOP ist, also ist es OOP".

    Weil es keine allgemeingültige OOP-Definition gibt.
    Vor allem aber ist OOP ein Konzept, eine Herangehensweise, die durchaus in verschiedenen Ausprägungen daher kommen kann; nicht die Featurelist einer Programmiersprache.

    Du wieder Sprichst dir schon selbst. Ein Konzept hat genau Ausprägung also eine Beschreibung.

    OOP ist mindestens die Zusammenfassung von Daten und Funktionen, mit den Zugriff über Schnittstellen.
    Das JavaScript-Beispiel erfüllt es, weil private Eigentschaften möglich ist.



  • Zeus schrieb:

    OOP ist mindestens die Zusammenfassung von Daten und Funktionen, mit den Zugriff über Schnittstellen.

    das habe ich aber.

    ich habe die daten in einer struct und ich habe funktionen die auf diesen daten operieren.

    Das JavaScript-Beispiel erfüllt es, weil private Eigentschaften möglich ist.

    private ist zwingend noetig fuer OOP?
    ich habe bereits bewiesen dass private ein illusion ist. sowohl in java als auch in c++ kann ich es umgehen...

    btw: javascript kennt ebenfalls kein private. JS kann keine kapselung laut deiner definition. Man simuliert das ganze ueber nested functions die es erst seit js 1.2 gibt.

    aber gut, was du sagst ist, dass ich in C nicht objekt orientiert programmieren kann?

    findest du es nicht komisch festzulegen ob etwas OO ist indem du ein bestimmtes sprach feature als unabdingbar definierst dass extrem leicht auszuhebeln ist?

    zB kann man mit php4 wunderschoene java like OOP betreiben. obwohl es keine access controls gibt. in php5 kann ich die access controls auch total leicht umgehen...

    und dennoch definiert sich OO dadurch dass es access controls fuer die daten gibt?



  • Komm du mal runter, nur weil du und volkrat und noch ein paar miteinader einer Meinung ist, heist es nicht das sie stimmt.

    findest du es nicht komisch festzulegen ob etwas OO ist indem du ein bestimmtes sprach feature als unabdingbar definierst dass extrem leicht auszuhebeln ist?

    Ich finde es komisch das du ein Sprachfeature hackst und dann behauptest das es nich gibt.

    Der Präprozessor ist ein einfacher Textersetzer, hat mit der Sprache C++ nicht viel zu tun. Erst wird alles durch die #defines ersetzt, dann erst kriegt der C++-Compiler den Code, den er kompiliert.



  • int zahl;
    
    void set(int a)
    {
        zahl = a;
    }
    
    int get()
    {
        return zahl;
    }
    
    #include <iostream>
    #include "lol.h"
    int main()
    {
        zahl = 1;
        std::cout << zahl;
    	std::cout << "Hello world!" << std::endl;
    	return 0;
    }
    

    Tolles OOP....

    Ausserdem hab ich schon auf Javasvript aufgezeigt, dass es Datenkapseln kann. Du hingegen kommst wieder und behauptest das Gegenteil davon.



  • @Shade: Auf Seite 11 sagst Du:

    Shade Of Mine schrieb:

    math.sqrt ist nichts anderes als std::sqrt. Kein bisschen OO der ansatz, aber halt praktisch.

    Und auf Seite 15 sagst Du wohl in bezug auf sqrt(a):

    Shade Of Mine schrieb:

    Es ist Objektorientiert.

    Was denn nun?

    ...und drehen wir die Diskussion doch mal um: Bisher wurde argumentiert, dass es nicht objektorientiert ist. Was spricht denn dafür, dass es sich um objektorientierte Programmierung handelt? Welche Kriterien werden diesbezüglich erfüllt, welche müssen erfüllt werden?



  • Shade Of Mine schrieb:

    Zeus schrieb:

    OOP ist mindestens die Zusammenfassung von Daten und Funktionen, mit den Zugriff über Schnittstellen.

    das habe ich aber.

    ich habe die daten in einer struct und ich habe funktionen die auf diesen daten operieren.

    Trotzdem kann jeder uneingeschränkt auf deine Daten zugreifen

    Das JavaScript-Beispiel erfüllt es, weil private Eigentschaften möglich ist.

    private ist zwingend noetig fuer OOP?
    ich habe bereits bewiesen dass private ein illusion ist. sowohl in java als auch in c++ kann ich es umgehen...

    Nein du hast ein C++ Werkzeug missbraucht.
    Man kann alles umgehen, aber das ist auch nicht der Punkt der Diskussion
    Für OOP muss deine Code paar Aspekte erfüllen, wie das nun eine Sprache hand habt ist total egal, deswegen versteh ich nicht warum du dich an die Accessspezifikationen aufhaltest.

    btw: javascript kennt ebenfalls kein private. JS kann keine kapselung laut deiner definition. Man simuliert das ganze ueber nested functions die es erst seit js 1.2 gibt.

    Du wiedersprichst mir, aber hab schon im post über mir geschrieben

    aber gut, was du sagst ist, dass ich in C nicht objekt orientiert programmieren kann?

    C,Pascal und Visual Basic bis 6 sind prozeduale Programmiersprachen

    findest du es nicht komisch festzulegen ob etwas OO ist indem du ein bestimmtes sprach feature als unabdingbar definierst dass extrem leicht auszuhebeln ist?

    Ich kann in Java OOP aushelben, trotzdem gilt die Sprache als der Vertreter von OOP. Objektorientiung findet in Design statt und dieses braucht Mechanismen in der Sprache um es zu unterstützen, sei is durch private datamember (c++/java/c#), __datamember(PHP-like) oder irgendeinen anderen.

    zB kann man mit php4 wunderschoene java like OOP betreiben. obwohl es keine access controls gibt. in php5 kann ich die access controls auch total leicht umgehen...

    und dennoch definiert sich OO dadurch dass es access controls fuer die daten gibt?

    Nun bitte ich dich mal OOP zu erklären, und alle Definitionen dazu und wie es sich von prozeduale Programmierung unterscheidet.



  • Zeus schrieb:

    aber gut, was du sagst ist, dass ich in C nicht objekt orientiert programmieren kann?

    C,Pascal und Visual Basic bis 6 sind prozeduale Programmiersprachen

    Trotzdem kann ich mit C objektorientiert programmieren. Was willst du uns sagen?


Anmelden zum Antworten