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



  • Zeus schrieb:

    Es ist eine Funktion die als Paramter eine Datenstruktur aufnimmt.
    Was soll daran OOP sein?

    Es ist eine Nachricht (Methode), die an ein Objekt gesendet wird. Was soll daran nicht OOP sein? Widerspricht der Definition in keinster Weise. Ansonsten zeig es mir auf.



  • Zeus schrieb:

    Nur weil man als Bezeichner obj wählt, macht es automatisch eine OOP.

    welchen aspekt den du unter OOP verstehst widersprichst dieser code?



  • rüdiger schrieb:

    Zeus schrieb:

    DEvent schrieb:

    double eingabe(tastatur t) { return tastatureingabe; };
    
    double sqrt(double x) { return wurzel aus x; }; 
    
    double ausgabe(double x) { gib x auf Monitor aus; }
    
    int main()
    {
        double x = eingabe(tastatur);
        double y = sqrt(x);
        ausgabe(y);
    }
    

    Und was mach ich wenn ich ne eingabe über ne maus haben will?

    double eingabe(maus);
    

    Wo ist das Problem

    Habt ihr Tomaten auf den Augen ? Soll das etwa OOP sein ?

    Das ist stinknormale prozedurale Programmierung.
    Schaut mal nach: http://de.wikipedia.org/wiki/Programmierparadigma#Prozedurale_Programmierung
    Nur weil hier Objekte wie double, tastatur, auftauchen, nennt ihr das Objectorientiert ?

    Es ist eine Nachricht (Methode), die an ein Objekt gesendet wird. Was soll daran nicht OOP sein? Widerspricht der Definition in keinster Weise. Ansonsten zeig es mir auf.

    Weil kein Objekt da ist zu dem eine Nachricht geschickt wird ?

    object.nachricht(daten);
    

    So sieht es normalerweise aus.

    prozedurfunktion(object, daten);
    

    Das ist stinknormale prozedurale Programmierung. Das hatten wir schon mit Pascal, C, usw.
    Diese Methode bietet keinerlei Vorteile, die aber eine OOP normal bietet (abstraktion der Daten, Kapselung, Vererbung, usw)



  • Bashar schrieb:

    Meines Wissens ist die Grundidee von OOP, dass Daten in Objekte zusammengefasst werden

    Ne. Aus meiner Sicht ist die Grundidee der OOP, wie es in dem Artikel da steht, dass Daten UND FUNKTIONEN in Objekten zusammengefasst werden. Da ist es ziemlich egal, ob man dafür ein Klassenkonstrukt verwendet. Das wichtige ist, dass Daten und Funktionen nach beieinander liegen. ...und zwar nicht nur in volkards Kopf, sondern auch im Code. Wenn man die Daten von den Funktionen trennt, wie es Shade mit seiner Gruppierung von Funktionen nach deren Funktionalität implizit vorschlägt, dann ist das etwas, was prinzipiell gegen die Idee der Objektorientierung gerichtet ist. Mir ist immer noch nicht ansatzweise klar, wie man das dann OOP nennen kann.



  • DEvent schrieb:

    Habt ihr Tomaten auf den Augen ? Soll das etwa OOP sein ?

    Das ist stinknormale prozedurale Programmierung.
    Schaut mal nach: http://de.wikipedia.org/wiki/Programmierparadigma#Prozedurale_Programmierung
    Nur weil hier Objekte wie double, tastatur, auftauchen, nennt ihr das Objectorientiert ?

    ist das etwa deine art zu argumentieren?

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

    implementier das ganze mal mit klassen und nenne mir dann die vorteile von der methode mit klassen. eins ist wie gesagt dynamische polymorphie - aber nur deshalb weil C++ keine multi methods hat.

    Weil kein Objekt da ist zu dem eine Nachricht geschickt wird ?

    da ist ein objekt. nur weil da nicht klasse steht. oder wie definierst du objekt?

    eine sammlung von attributen und aktionen.
    die attribute sind halt public und die aktionen sind die funktionen.
    passt doch.

    oder was braucht ein objekt deiner meinung nach noch?

    zB FILE* aus C. man kann halt nicht ableiten davon, betrachten wir es eben als sealed. und wir haben private daten und oeffentliche methoden.

    Diese Methode bietet keinerlei Vorteile, die aber eine OOP normal bietet (abstraktion der Daten, Kapselung, Vererbung, usw)

    abstraktion haben wir, ich kann tastatur eingabe durch maus ersetzen, ohne probleme.

    kapselung ist auch gegeben, ich definiere accessor fuer die struct member und sage man darf sie nicht direkt setzen. in c++ sage ich das ja auch, denn ich kann jederzeit ja #define private public machen...

    und vererbung: wie gesagt, es gibt sprachen ohne klassen, zB javascript. und ohne klassen halt keine herkoemmliche vererbung. ist javascript deiner meinung nach eine objekt orientierte sprache?



  • Gregor:

    liegen doch beieinander.

    direkt untereinander im code.
    keine andere code zeile ist dazwischen.

    was willst du mehr?



  • Ich bin greade beim entgleissen greade, wie Ihr Begriffe aus der prozedurale Programmierung auf Begriffe der objektorientierte mapped.



  • DEvent schrieb:

    Weil kein Objekt da ist zu dem eine Nachricht geschickt wird ?

    object.nachricht(daten);
    

    So sieht es normalerweise aus.

    prozedurfunktion(object, daten);
    

    Syntax != Semantik.



  • finix schrieb:

    DEvent schrieb:

    Weil kein Objekt da ist zu dem eine Nachricht geschickt wird ?

    object.nachricht(daten);
    

    So sieht es normalerweise aus.

    prozedurfunktion(object, daten);
    

    Syntax != Semantik.

    Ja ist uns schon klar, trotzdem kann man von prozedurfunktion(object, daten) nix ableiten also kein OOP.



  • Shade Of Mine schrieb:

    implementier das ganze mal mit klassen und nenne mir dann die vorteile von der methode mit klassen.

    Ich glaube, es geht in dieser Diskussion nicht so sehr um Vor- und Nachteile bestimmter Codestücke, sondern eher nur um die Zuordnung bestimmter "Designs" usw. zu unterschiedlichen Programmierparadigmen.

    Shade Of Mine schrieb:

    und vererbung: wie gesagt, es gibt sprachen ohne klassen, zB javascript. und ohne klassen halt keine herkoemmliche vererbung. ist javascript deiner meinung nach eine objekt orientierte sprache?

    All diese Konzepte, zu denen auch die Vererbung gehört, sind sicherlich nicht zwingend für die OOP nötigt. Dennoch ordnet man diese Konzepte der OOP zu. Insofern kann man sicherlich sagen, dass eine Sprache, die diese Konzepte besser als eine andere Sprache unterstützt/ermöglicht, auch die OOP stärker unterstützt. Du kommst ja auch nicht auf die Idee, Prolog als objektorientierte Sprache zu bezeichnen, nur weil volkard gesagt hat, dass man ja auch in Prolog objektorientiert programmieren kann.

    Was man sich fragen sollte, ist doch: Wie sieht objektorientierte Programmierung aus, wenn man keine passenden Sprachmittel zur Verfügung hat. Die Antwort ist, dass man sich da Abhilfe schaffen muss. Man muss sich irgendwelche Krücken bauen, die einem die objektorientierten Konzepte zur Verfügung stellen, die man nutzen möchte.



  • Shade Of Mine schrieb:

    Gregor:

    liegen doch beieinander.

    direkt untereinander im code.
    keine andere code zeile ist dazwischen.

    was willst du mehr?

    Shade: Code UND KOPF, habe ich doch gesagt! 😉 Die Platzierung der verschiedenen Elemente, die zu einem Objekt gehören, in unteschiedlichen Namensräumen, zeigt mir, dass Du sie im Kopf nicht so anordnest. Du setzt im Prinzip unterschiedliche "Überschriften" über die verschiedenen Elemente. Und unter diesen "Überschriften" findet sich eben auch alles mögliche, was mit dem Objekt nichts zu tun hat. Für mich heißt das: "Ja, ok, ich habe das zwar untereinandergeschrieben, aber das mein ich ja gar nicht so....".



  • Zeus schrieb:

    Ja ist uns schon klar, trotzdem kann man von prozedurfunktion(object, daten) nix ableiten also kein OOP.

    Magst du kurz Shades Frage beantworten? Ist Javascript OO? Und, wenn nicht, ist z.B. Java OO?



  • Gregor schrieb:

    All diese Konzepte, zu denen auch die Vererbung gehört, sind sicherlich nicht zwingend für die OOP nötigt. Dennoch ordnet man diese Konzepte der OOP zu. Insofern kann man sicherlich sagen, dass eine Sprache, die diese Konzepte besser als eine andere Sprache unterstützt/ermöglicht, auch die OOP stärker unterstützt. Du kommst ja auch nicht auf die Idee, Prolog als objektorientierte Sprache zu bezeichnen, nur weil volkard gesagt hat, dass man ja auch in Prolog objektorientiert programmieren kann.

    Was man sich fragen sollte, ist doch: Wie sieht objektorientierte Programmierung aus, wenn man keine passenden Sprachmittel zur Verfügung hat. Die Antwort ist, dass man sich da Abhilfe schaffen muss. Man muss sich irgendwelche Krücken bauen, die einem die objektorientierten Konzepte zur Verfügung stellen, die man nutzen möchte.

    java\1:
    ist das objekt orientiert?

    es hat keine klassen, aber dafuer ist alles ein objekt. sogar eine funktion ist ein objekt. aber halt keine klassen und deshalb keine klassische vererbung.

    fangen wir jetzt an zu sagen javascript ist nicht ganz so oop wie c++ und java ist etwas mehr oop?

    ich denke das ist bloedsinn. ein code ist oo, nicht die sprache. es gibt diverse konzepte, klassen sind zB ein konzept. aber es gibt zB auch prototypes als konzept.

    ich kann diese konzepte nicht bewerten - also was besser ist. es ist einfach anders.

    was wir jetzt machen koennen ist die konzepte zu zaehlen... aber ist das sinnvoll?



  • Gregor schrieb:

    Ne. Aus meiner Sicht ist die Grundidee der OOP, wie es in dem Artikel da steht, dass Daten UND FUNKTIONEN in Objekten zusammengefasst werden.

    Geht's nicht eigentlich eher darum dass man zusammengehörige Daten zu Objekten zusammenfasst und mit Objekten statt kontextfreien Daten hantiert?
    Was ist der Vorteil von Methoden gegenüber Funktionen, und warum sind Methoden inherent OO, Funktionen kategorisch nicht?



  • Gregor schrieb:

    Bashar schrieb:

    Meines Wissens ist die Grundidee von OOP, dass Daten in Objekte zusammengefasst werden

    Ne. Aus meiner Sicht ist die Grundidee der OOP, wie es in dem Artikel da steht, dass Daten UND FUNKTIONEN in Objekten zusammengefasst werden. Da ist es ziemlich egal, ob man dafür ein Klassenkonstrukt verwendet. Das wichtige ist, dass Daten und Funktionen nach beieinander liegen.

    Ja sicher. Mal abgesehen davon dass du die Definition mit dem Begriff Funktion unnoetig einschraenkst, weiss der Empfaenger der Nachricht, also das Objekt, selbst wie es darauf reagieren soll, die Methoden gehoeren also zum Objekt.



  • Shade Of Mine schrieb:

    ich denke das ist bloedsinn. ein code ist oo, nicht die sprache. es gibt diverse konzepte, klassen sind zB ein konzept. aber es gibt zB auch prototypes als konzept.

    Wenn die Fragestellung ist, "ob eine Sprache objektorientiert ist", dann heißt das, dass gefragt ist, inwiefern die Sprache Sprachmittel zur Unterstützung der objektorientierten Programmierung bereitstellt und inwiefern die Sprache darauf ausgerichtet ist, dass man mit ihr objektorientiert programmiert. Natürlich ist die Antwort darauf immer relativ zu sehen.

    Wenn Du sagst, nur Code sei objektorientiert, was macht denn dann einer, der sich auf ne Stellenbeschreibung bewirbt, in der OOA verlangt wird. 🙂



  • Bashar schrieb:

    Gregor schrieb:

    Bashar schrieb:

    Meines Wissens ist die Grundidee von OOP, dass Daten in Objekte zusammengefasst werden

    Ne. Aus meiner Sicht ist die Grundidee der OOP, wie es in dem Artikel da steht, dass Daten UND FUNKTIONEN in Objekten zusammengefasst werden. Da ist es ziemlich egal, ob man dafür ein Klassenkonstrukt verwendet. Das wichtige ist, dass Daten und Funktionen nach beieinander liegen.

    Ja sicher. Mal abgesehen davon dass du die Definition mit dem Begriff Funktion unnoetig einschraenkst, weiss der Empfaenger der Nachricht, also das Objekt, selbst wie es darauf reagieren soll, die Methoden gehoeren also zum Objekt.

    Ein Punkt für Dich: Denk Dir die Einschränkung weg. 🙂



  • Gregor schrieb:

    Wenn Du sagst, nur Code sei objektorientiert, was macht denn dann einer, der sich auf ne Stellenbeschreibung bewirbt, in der OOA verlangt wird. 🙂

    Erklaere mir warum ich in Java Prozedual programmieren kann.

    und beantworte mir endlich die Javascript frage. Die ist essentiell.



  • Shade Of Mine schrieb:

    Erklaere mir warum ich in Java Prozedual programmieren kann.

    In dem ich die Main-Klasse als globalen Namespace verwende und dort sämtliche Prozeduren als static-Methoden anlege. Dann ist nicht mehr viel mit OOP. Dann kann man wohl kaum mehr von OOP reden.

    MfG SideWinder



  • Ob JavaScript OO ist, ist das wichtig?

    Die eigentliche Definition von OOP ist(ich hab ja schon geschrieben):
    Muss beinhalten:
    -Kapselung
    -Vererbung
    -Polymorphie

    aber ich bin desweiteren auch zu Akzeptieren von andere Definitionen, aber bis jetzt nix gehört.
    Sei OOP auch nur die Kapselung, aber den Code den Shadow postet, ist nicht OOP.

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

    Aber nun, wenn ich sowas sehe, muss ich sehen, sieht verdammt gut nach OOP aus und auch schon ein bisschen genial.

    Aber was soll eigentlich immer die Abschweifungen in anderen Sprachen, wir haben C++ als Thema und bisschen Java (Gregor :P)
    Die Erkenntis aus JavaScript das Funktionen Objekte sind nach C++ zu übertragen, halte ich für riskant.
    Eine Sprache kommt mit ihren eigene Definition, wie meine Eigene 😛

    @Class Auto
    var _door;
    var _speed;
    var _Person[];
    
    func isStanding()
    {
      if(speed != 0)
      isStanding = false;
    }
    
    func addPerson(Person)
    {
      self._Person.add(Person);
    }
    
    func go()
    {
      self._speed = 20;
    }
    
    @Class Person(name, alter)
    var name;
    var alter;
    
    func sayHallo()
    {
      print "Hallo";
    }
    
    int main()
    {
      Auto meinAuto();
      Person p1("Susi", 22), p2("Reiner", 25);
      p1.sayHallo();
      p2.sayHallo();
      meinAuto.addPerson(p1);
      meinAuto.addPerson(p2);
    }
    

Anmelden zum Antworten