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



  • 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?



  • 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 ein Auto auch mit bloßen Händen schieben. Trotzdem bleibt es ein motorisiertes Fahrzeug.

    Ich kann auch mit eine Pistole auf jemanden einprügeln. Trotzdem bleibt es eine Schußwaffe.

    ...



  • TactX schrieb:

    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?

    Hättest du diese Aussage anhand von VB6 gemacht, müsste ich einlenken, aber mit C kann man keine OOP machen.



  • *Plonk* Klar kann man mit C OOP programmieren, schau dir nur mal gtk+ an. Polymorphie z.B. ist auch nur ein Pointer auf eine Tabelle mit Funktionszeigern...



  • Zeus schrieb:

    TactX schrieb:

    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?

    Hättest du diese Aussage anhand von VB6 gemacht, müsste ich einlenken, aber mit C kann man keine OOP machen.

    Warum nicht?



  • Zeig mir Datenkapselung in C.

    Zeus schrieb:

    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;
    }
    

    Wenn das so auszieht, dann ist es kein OOP.



  • GPC schrieb:

    *Plonk* Klar kann man mit C OOP programmieren, schau dir nur mal gtk+ an. Polymorphie z.B. ist auch nur ein Pointer auf eine Tabelle mit Funktionszeigern...

    Ach du Spielverderber 😞 😉



  • Zeus schrieb:

    Zeig mir Datenkapselung in C.

    // lol.h
    #ifndef LOL_H
    #define LOL_H
    
    int get();
    void set(int i);
    
    #endif
    
    // lol.c
    #include "lol.h"
    
    static int zahl;
    
    int get() {
        return zahl;
    }
    
    void set(int i) {
        zahl = i;
    }
    

    Da hast du deine Kapselung du "OOP-Ritter".



  • Das ist ein schlechter witz.



  • Es gibt wahrscheinlich zigtausend Quellen von OOP mit ANSI C im Netz.

    Z.B.: www.planetpdf.com/codecuts/pdfs/ooc.pdf



  • Zeus schrieb:

    Das ist ein schlechter witz.

    stell' dir einfach vor die datei 'lol.c' wäre eine klasse und das 'static' sowas wie 'private'



  • http://www.planetpdf.com/codecuts/pdfs/ooc.pdf#search="object oriented programming in c"

    @Zeus

    #include <iostream>
    
    class foo {
      int i;
      double d;
    public:
      foo(int i=10, double d=10.5) : i(i), d(d) { }
    };
    
    int main() {
      foo f;
      std::cout << *reinterpret_cast<int*>(&f) << ' '
    	    << *reinterpret_cast<double*>(reinterpret_cast<int*>(&f)+1) << '\n';
    }
    

    Wo ist deine Zugriffsspezifikation?

    @rüdiger
    Also ich hab mal gelernt, dass Methoden Funkionen oder Prozeduren sind, die an Objekten gebunden sind.
    Und Nachrichten an Objekten geschickt werden.

    Sowohl Funktionen und Prozeduren sind keine Methoden.

    lass uns das mal genauer betrachten

    ...dass Methoden Funkionen oder Prozeduren sind... Sowohl Funktionen und Prozeduren sind keine Methoden.

    Versteh ich nicht.

    übrigens ist

    void foo(bar);
    

    nicht weniger an die Klasse bar gebunden, als

    class bar {
    //...
    public:
    void foo();
    };
    


  • Zeus schrieb:

    Das ist ein schlechter witz.

    Wieso?

    Hat doch alles was du gefordert hast.

    btw. CLOS hat auch kein wirklichen Zugriffsschutz, wenn man keinen Accessor für ein Member definiert, dann kann man immer noch über die Funktion slot-values darauf zugreifen. Dennoch ist CLOS OOP.



  • TactX schrieb:

    GPC schrieb:

    *Plonk* Klar kann man mit C OOP programmieren, schau dir nur mal gtk+ an. Polymorphie z.B. ist auch nur ein Pointer auf eine Tabelle mit Funktionszeigern...

    Ach du Spielverderber 😞 😉

    😃 :p

    Am Ende ist auch der OOP-ste C++ Code Assembler, also kann keiner erzählen, dass man eine Technik von oben nicht auch weiter unten umsetzen kann.


Anmelden zum Antworten