Nutzt mein Programm die O.O.P. oder nicht?



  • Hallo Leute,

    mein Onkel hat mir schon oft erklärt was die Objekt- Orientierte- Programmierung eigentlich aus macht!
    Ich weiß also auch dass C keine OOP- Sprache ist aber C++ schon!
    Ich habe jetzt ein Programm angefangen welches die Fenstertechnik von Windows nachahmt! Die Fenster habe ich in einer Klasse definiert, und Klassen gibt es ja nach meinem Wissen nur in C++ (also nicht in C), ist also OOP, und auch Vectoren, also Container gibt es nur in C++, aber ich habe die Befehle "new" und "delete" nicht in Verwändung!

    Kleines Beispiel wie das bei mir ungefähr aussieht!

    #include <vector>
    
    /* ... */
    
    class Window {
      public:
        Window();
        void Setting(int x, int y, int width, int height, int flags);
        void Draw();
      private:
        int WinX_, WinY_;
    }
    
    vector<Window> Windows;
    
    /* ... */
    
    for (vector<Window>::iterator itwin = Windows.begin(); itwin != Windows.end(); ++itwin) {
      itwin->Draw();
    }
    
    /* ... */
    

    In meinem Programm taucht nicht einmal "new" oder "delete" auf, ich durchlaufe nur den Container, zwar mit einer Klasse und nicht mit einer Struktur (Ist aber auch kein großer Unterschied), um alle Fenster darzustellen!

    Ist das jetzt OOP oder nicht, wenn nicht wie müsste es dann aussehen? 😕
    Schon mal danke im Voraus! 🙂



  • Hi,

    erstmal: New und delete haben nichts mit OO zu tun.

    Hast Du Dein Programm in Objekten organisiert, nennt man es "objektorientiert" - ganze einfach, oder ? 😉
    Allerdings ist die Grenze ein wenig schwammig: Einigen reicht es schon, eine einzige Klasse zu verwenden, um es "OOP" zu nennen - Andere sprechen schon beim Auftritt der ersten "freien Funktion" schon den OO-Status ab... irgendwo dazwischen ist wohl Konsens. Ebefalls eine Rolle spielt, ob man Vererbung, Zugriffsschutz (private/protected/public) und andere OO-Techniken nutzt...

    Übrigens: "OOP" bedeutet nicht automatisch "gutes Programm". Es ist sehr die Frage, ob der OO-Ansatz für das Problem geeignet ist - allerdings scheint mir das bei einem Fenstersystem der Fall zu sein.

    Gruß,

    Simon2.



  • Cool danke! 😃



  • Simon2 schrieb:

    Hast Du Dein Programm in Objekten organisiert, nennt man es "objektorientiert" - ganze einfach, oder ? 😉

    Das ist alles Quack. (Okay, bevor ich weiterrede: alles IMHO!)

    "Alles ist ein Objekt" mag zwar der Merkspruch für OOP sein -- aber mal ehrlich, wenn das alles, wäre, dann wäre OOP ja wirklich ein wenig trivial. "Alles ist ein Objekt", das ist ja noch schlimmer als "alles ist relativ" und für sowas bekommt man nun wirklich keinen Nobelpreis (nein, nein). Ich finde daher, man sollte OOP eher darüber definieren, was sie technisch ausmacht, nämlich die Verwendung virtueller Funktionen, um Polymorphie zu realisieren. OOP-Fanatiker sprechen ja sowieso jeder Sprache OOP-Recht ab, die nicht Vererbung, Polymorphie und Kapselung unterstützt. Mal davon abgesehen, dass es doppeltgemoppelt ist, ist es schlicht falsch: Polymorphie hat mit OOP nichts zu tun, Polymorphie gibt es nämlich auch ohne Klassen. Vielmehr ist wichtig, *wie* diese Polymorphie realisiert wird: nämlich über virtuelle Funktionen, welche durch Zeigeraddition zur Laufzeit aus einer virtuellen Funktionszeigertabelle ausgelesen werden.

    => Und hier sind wir jetzt schon einen Schritt weiter. 'new' und 'delete' braucht man zwar strenggenommen immernoch nicht, Zeiger hingegen schon (oder zumindest Referenzen), denn sonst ist eine dynamische Aufruf-Weiterleitung nicht möglich.

    So, und jetzt noch zum Schluss: Programmierung arbeitet *immer* mit Objekten. Wie genau man die nun abgrenzt, mag unterschiedlich sein. Aber da Menschen einen großen Drang danach haben, alles, auch abstrakte Konzepte, zu "verdinglichen", sind Konzepte wie Datenstrukturen, Algorithmen, Programmabläufe und Variablen eben zu "Dingen" geworden. Seit Chomsky ist das sogar sprachtheoretisch untermauert, denn auch in der Programmierung benutzt man einen Satzbau mit Verben, Subjekten, ... und, ja, Objekten.



  • Konrad Rudolph schrieb:

    ...
    "Alles ist ein Objekt" mag zwar der Merkspruch für OOP sein ...

    Hat das hier irgendjemand behauptet ?
    Insgesamt belegst Du eigentlich nur, dass der Begiff der OOP relativ ist ... so wie alles (wie schon Einstein bewiesen hat (*) ).
    Der einzige halbwegs sinnvolle Minimalkonsens scheint mir tatsächlich in dieser Aussage zu liegen: In Objekten organisiert => OOP.
    Randbemerkungen: Die Klassifizierung nach "OOP" und "Nicht-OOP" ist gleichzeitig stärker umstritten als auch weniger relevant als allg. angenommen. Die Frage, ob etwsa gut programmiert ist, ist da schon wesentlicher (macht aber ebenfalls einen großen Topf auf).

    Gruß,

    Simon2.

    (*) 😃 Als Dipl.-phys. explodiere ich regelmäßig bei solchen Aussagen ... also nicht die Ironie übersehen. (Noch schlimmer als "Quantensprung")



  • Simon2 schrieb:

    Konrad Rudolph schrieb:

    ...
    "Alles ist ein Objekt" mag zwar der Merkspruch für OOP sein ...

    Hat das hier irgendjemand behauptet ?

    Nö, aber aus Erfahrung weiß ich, dass das (nicht notwendigerweise von Dir) noch gekommen wäre. 😉

    Ich wollte auch einfach nur Deine Aussage, die Du ja selbst schon relativiert hast, noch ein wenig weiter relativieren.



  • LukasBanana schrieb:

    ... und Klassen gibt es ja nach meinem Wissen nur in C++ (also nicht in C), ist also OOP, und auch Vectoren, also Container gibt es nur in C++....

    --> http://www3.informatik.uni-erlangen.de/Lehre/UMLEmbSys/WS2002/folien/12-oo2c.pdf
    🙂



  • vista schrieb:

    LukasBanana schrieb:

    ... und Klassen gibt es ja nach meinem Wissen nur in C++ (also nicht in C), ist also OOP, und auch Vectoren, also Container gibt es nur in C++....

    --> http://www3.informatik.uni-erlangen.de/Lehre/UMLEmbSys/WS2002/folien/12-oo2c.pdf
    🙂

    Ach herrje. Na ja, ich habe auch in QBASIC schon OO programmiert. Zum K*tzen. 😉



  • Konrad Rudolph schrieb:

    Ach herrje. Na ja, ich habe auch in QBASIC schon OO programmiert.

    siehste wohl.
    und ich in assembler.
    es ist also keine frage der sprache...
    🙂



  • Sprachen können nur OOP mehr (z.B. C++) oder weniger (z.B. C) unterstützen. Grundsätzlich kann man aber in C ebenso OOP programmieren (nur mit viel merh Aufwand) wie man in C++ auch komplett Prozedural Programmieren kann. Von daher ist es (imho) nicht hilfreich den OOP-Begriff an Sprachelementen (z.B. virtuellen Funktionen) festzumachen.

    Wers nicht glaubt sollte mal "The Design and Evolution of C++" genauer lesen. Am Anfang stand das C mit Klassen....

    OOP ist eine Vorgehensweise wie man an eine Problemlösung herangeht und wie man seinen Code organisiert. Aber wie gesagt, imho 😉



  • iiiiiiii schrieb:

    Wers nicht glaubt sollte mal "The Design and Evolution of C++" genauer lesen.

    Oder z.B. das Windows-API betrachten. Komplettes C-Interface und trotzdem zu großen Teilen OOP. Was ist ein Handle anderes als ein Zeiger auf eine polymorphe Klasse, was ist CloseHandle anderes als eine virtuelle Funktion, was ist CreateFile anderes als eine Factoryfunktion?



  • audacia schrieb:

    iiiiiiii schrieb:

    Wers nicht glaubt sollte mal "The Design and Evolution of C++" genauer lesen.

    Oder z.B. das Windows-API betrachten. Komplettes C-Interface und trotzdem zu großen Teilen OOP. Was ist ein Handle anderes als ein Zeiger auf eine polymorphe Klasse, was ist CloseHandle anderes als eine virtuelle Funktion, was ist CreateFile anderes als eine Factoryfunktion?

    der ganze windows-kernel ist OO aufgebaut.
    kernel objekte haben konstruktoren, destuktoren usw.
    sogar eine komponente namens 'object manager' steckt im win kernel.
    und fast alles ist C ohne ++
    🙂



  • Konrad Rudolph schrieb:

    vista schrieb:

    LukasBanana schrieb:

    ... und Klassen gibt es ja nach meinem Wissen nur in C++ (also nicht in C), ist also OOP, und auch Vectoren, also Container gibt es nur in C++....

    --> http://www3.informatik.uni-erlangen.de/Lehre/UMLEmbSys/WS2002/folien/12-oo2c.pdf
    🙂

    Ach herrje. Na ja, ich habe auch in QBASIC schon OO programmiert. Zum K*tzen. 😉

    Mir war irgendwie klar das einige kommen und meinen das ich glauben würde dass C++ die einzige OOP- Sprache überhaupt währe!
    War vielleicht ein bischen blöd vormuliert, geb ich ja zu, deshalb hatte ich auch extra C in Klammern geschrieben um zu verdeutlichen dass ich C und C++ verglichen will!

    Aber jetzt noch mal meine eigentliche Frage: ist mein ProgrammCode, ganz am Anfang, OOP oder nicht, und wenn nicht wie müsste es aussehen???

    Gruß LukasBanana



  • Also ich bleibe bei meiner Aussage: "Ist OOP und ich weiß nicht, warum das wichtig sein sollte." 😃

    Gruß,

    Simon2.



  • Danke für deine Antwort 🙂 , aber ich denke es ist gut zu wissen was man eigentlich programmiert! 😉
    Also ob mein Programm ein OOP ist oder nicht!



  • Ja, es ist objektorientiert.



  • iiiiiiii schrieb:

    Von daher ist es (imho) nicht hilfreich den OOP-Begriff an Sprachelementen (z.B. virtuellen Funktionen) festzumachen.

    Das ist Quatsch, denn auch in C realisiert man das über Funktionszeiger.



  • LukasBanana schrieb:

    ...ich denke es ist gut zu wissen was man eigentlich programmiert! ...

    Ich denke das eben nicht. 😃
    Das hat zwar einen gewissen "S-Vergleichsfaktor", aber auch nicht mehr bei Leuten, die sich ein wenig auskennen...
    Und wenn das Programm schlecht programmiert oder falsch designt ist, rettet einen das "Ist aber OOP !" nicht mehr raus. 😃 (womit ich nicht sagen möchte, dass DEIN Programm schlecht geschrieben sei - das kann ich ann so einem Schnipsel und ohne Aufgabenbeschreibung nicht beurteilen)

    Gruß,

    Simon2.



  • Natürlich ist das kein Argument zu sagen "Ist zwar schlecht, aber immer hin OOP!", aber das habe ich ja auch nicht gesagt!
    Ich habe nur gesagt dass mann schon wissen sollte was man da schreibt! 🙄

    Aber da mir meine Frage beantwortet wurde danke ich vielmals 🙂

    Gruß LukasBanana



  • Na - sorry,

    ich wollte Dir das auch gar nicht unterstellen, sondern lediglich ein wenig humorvoll meine These demonstrieren.

    Entschuldige, wenn ich Dir auf den Fuß getreten sein sollte, 😞

    Simon2.


Anmelden zum Antworten