Verleitet C++ zum komplizierteren denken?



  • C++ ist statisch. Fertig! Das hat nichts mit OOP zu tun. Es gibt auch OOP-Systeme, die ganz ohne Klassen auskommen und eine Art Ducktyping umsetzen. Wenn du das willst, nimm eine andere Sprache. C++ ist nicht dazu gemacht, jeden Scheiss anzubieten.

    Typsystem für etwa einen C++-Parser recht elegant wäre

    Ein C++Parser muss nicht in C++ geschrieben sein.



  • ihr seid doch alle in der falschen zonentaxonomie oO mit anti-scoping fällt das komplizierte denken automatisch weg 👍



  • volkard schrieb:

    Nein. Wenn ein Tier heute eine Kuh ist, wird es morgen kein Pferd sein. Und Kühe werden nicht zu wiehern lernen.

    das ist die statische Sichtweise. Die dynamische Sichtweise wäre, daß es sinnvoll ist, jetzt einen Stein und später einen Schlüssel in die selbe Hand zu nehmen, ohne dafür eine zweite Hand zu brauchen, weil der Typ "Hand" nur entweder zum Typ "Stein" oder nur zum Typ "Schlüssel" paßt.

    Ich unterscheide übrigens zwischen "Objektprogrammierung" und OOP - ersteres liegt für Sprachen wie C++ ohnehin in unerreichbarer Ferne, zweiteres ist erreichbar, wenn auch nicht in dem Sinne, den die Erfinder von OOP im Sinn hatten.

    volkard schrieb:

    Diese Phrasen hast Du aus Papers über zum Beispiel self.

    Lesen bildet. Das Auge sieht mit 🙂



  • u_ser-l schrieb:

    das ist die statische Sichtweise. Die dynamische Sichtweise wäre, daß es sinnvoll ist, jetzt einen Stein und später einen Schlüssel in die selbe Hand zu nehmen, ohne dafür eine zweite Hand zu brauchen, weil der Typ "Hand" nur entweder zum Typ "Stein" oder nur zum Typ "Schlüssel" paßt.

    Dumme Hand das. Der Witz an der Objektprogrammierung ist doch, daß man die Welt versucht abzubilden. Also Hände, die mal einen Stein und mal einen Schlüssel halten können. Wenn Du eine NurSteinHalteHand anschraubst und um einen Schlüssel zu halten (statische Sicht) diese ablegst und eine NurSchlüsselHalteHand anlegst oder (dynamische Sicht) sie in eine NurSchlüsselHalteHand transformierst, dann ist das ein großer Designfehler.



  • knivil schrieb:

    Typsystem für etwa einen C++-Parser recht elegant wäre

    Ein C++Parser muss nicht in C++ geschrieben sein.

    Ja, und? Behaupte ich das?

    u-ser_l schrieb:

    Die dynamische Sichtweise wäre, daß es sinnvoll ist, jetzt einen Stein und später einen Schlüssel in die selbe Hand zu nehmen, ohne dafür eine zweite Hand zu brauchen, weil der Typ "Hand" nur entweder zum Typ "Stein" oder nur zum Typ "Schlüssel" paßt.

    Suboptimales Beispiel.

    interface IPalpable
    {
        void foo (void);
    };
    class Stone implements IPalpable { ... };
    class Key implements IPalpable { ... };
    

    Wenn dir explizite Interfaces nicht passen, kannst du in C++ mittels Templates auch implizite Interfaces benutzen.

    template <typename T>
        class PalpableObject : public IPalpable
    {
        T* obj;
        PalpableObject (T* _obj) : obj (_obj) {}
        void foo (void) { obj->foo (); }
    };
    class Stone
    {
        void foo (void);
    };
    


  • u_ser-l schrieb:

    ja, so ist es - OOP sollte eigentlich die Programmierung syntakisch wie semantisch vereinfachen, und tut das auch in vielen Sprachen, aber bei C/C++ liegt der Sonderfall vor, daß Objektprogrammierung im Rahmen einer statisch typisierten Sprache weitgehend nur simuliert wird, was (im Verein mit der C-Kompatibilität) die bekannten syntaktischen Klimmzüge erforderlich macht.

    und weil die sprache auf C aufbaut, haben sich horden von ehemaligen C-programmierern draufgestürzt, weil sie annnahmen, C++ wäre die lösung aller C-probleme und erlöse sie aus der verdammnis der maschinennahen programmierung. im gleichen atemzug wurde alles C-artige für veraltet, unheilvoll und ruchlos erklärt. erst nach vielen jahren stellten sie erschrocken fest, dass sie vor lauter blauäugigkeit aus dem limbus in die wahre hölle hinabgestiegen sind.
    🙂



  • u_ser-l schrieb:

    Ich unterscheide übrigens zwischen "Objektprogrammierung" und OOP - ersteres liegt für Sprachen wie C++ ohnehin in unerreichbarer Ferne, zweiteres ist erreichbar, wenn auch nicht in dem Sinne, den die Erfinder von OOP im Sinn hatten.

    Du schaffst Dir eine Privatsprache und nimmst sie als Diskussionsgrundlage. Quizfrage: Von welcher bekannten Leaderpersönlichkeit in diesem Forum kennen wir das?

    u_ser-l schrieb:

    volkard schrieb:

    Diese Phrasen hast Du aus Papers über zum Beispiel self.

    Lesen bildet. Das Auge sieht mit 🙂

    Was willst Du damit ausdrücken?



  • Also dein Beispiel mit Hand, Stein und Schluessel ist sehr vage. Ueber Ableitung von Gegenstand kann ich sowohl Schluessel, Stein (als auch Hand) in der Hand halten, ohne neue Handklassen zu benoetigen.

    Ich unterscheide übrigens zwischen "Objektprogrammierung" und OOP - ersteres liegt für Sprachen wie C++ ohnehin in unerreichbarer Ferne, zweiteres ist erreichbar, wenn auch nicht in dem Sinne, den die Erfinder von OOP im Sinn hatten.

    Du willst mir jetzt sagen, was der Erfinder von C++ sich gedacht hat aber dennoch nicht erreicht hat? Und dann sowas wie OOP in C++ produziert hat? So in der Art: was will mir der Autor damit sagen? Nein, C++ wollte garantiert nicht sowas wie Smalltalk oder CLOS als OOP-System. Performance ist ein wichtiges Kriterium, das durch diese Konzepte gefaehrtet wuerde. Auch hat das nichts mit C++ zu tun, sondern trifft auf alle Sprachen wie Java, C, ... zu. Deine Argumentation ist Bullshit.

    So what's your point?



  • knivil schrieb:

    C++ ist nicht dazu gemacht, jeden Scheiss anzubieten.

    doch, ist es. die tendenz war schon immer da. mit C++0x geht's lustig weiter in die richtung.
    🙂



  • audacia schrieb:

    class Stone
    {
        void foo (void);
    };
    

    (void)?



  • knivil schrieb:

    Du willst mir jetzt sagen, was der Erfinder von C++ sich gedacht hat aber dennoch nicht erreicht hat? Und dann sowas wie OOP in C++ produziert hat? So in der Art: was will mir der Autor damit sagen?

    lies mal meinen Satz - da geht es um die Erfinder der OOP, nicht um den Erfinder von C++. Das ist nicht das selbe. Um die Sache abzukürzen:

    „I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.“

    (Turing-Preisträger A.Kay)



  • Also eins kann ich Euch sagen: Die Erfinder der natürlichen Zahlen hatten nicht im Sinn, daß es mal Gigabytefestplatten gibt.
    (frei nach u_ser-l)



  • u_ser-l schrieb:

    lies mal meinen Satz - da geht es um die Erfinder der OOP, nicht um den Erfinder von C++. Das ist nicht das selbe.

    Sag mir, wer die OOP erfunden hat, und zeige mir eine Quelle, die Deine Behauptung stützt.



  • u_ser-l schrieb:

    ...da geht es um die Erfinder der OOP, nicht um den Erfinder von C++. Das ist nicht das selbe. Um die Sache abzukürzen:
    „I invented the term Object-Oriented, and I can tell you I did not have C++ in mind.“
    (Turing-Preisträger A.Kay)

    alan kay war smalltalk-freak. der erfinder von c++ hat sich aber an simula orientiert (auch 'ne oo-sprache), weil er die schon kannte.
    🙂



  • volkard schrieb:

    Sag mir, wer die OOP erfunden hat

    http://de.wikipedia.org/wiki/Alan_Kay
    (unter 'leistungen')
    🙂



  • #fricky schrieb:

    volkard schrieb:

    Sag mir, wer die OOP erfunden hat

    http://de.wikipedia.org/wiki/Alan_Kay
    (unter 'leistungen')
    🙂

    Scherzkeks!
    1970 am Palo Alto Research Center wurde Smalltalk gebaut.
    Da war Objektorientierte Programmierung in Simula und Lisp schon eine halbe Ewigkeit im Gange.
    Außerdem wollte ich mit der Frage nicht zeigen, daß Du die Historie nicht kennst, sondern u_ser-ls letztes Fragment einer Argumentation entwurzeln.
    Du darfst bei Simula weitersuchen.



  • volkard schrieb:

    audacia schrieb:

    class Stone
    {
        void foo (void);
    };
    

    (void)?

    Hm?



  • audacia schrieb:

    volkard schrieb:

    audacia schrieb:

    class Stone
    {
        void foo (void);
    };
    

    (void)?

    Hm?

    Das (void) da ist sehr ungewöhnlich. Das war mal in C nötig, weil () beliebig viele Argumente akzeptierte (Ich hoffe, daß es inzwischen auch in C repariert worden ist.).



  • u_ser-l schrieb:

    lies mal meinen Satz - da geht es um die Erfinder der OOP, nicht um den Erfinder von C++. Das ist nicht das selbe.

    Ich weiss, dass das nicht das gleiche ist. Aber impliziet sagst du, dass C++ als auch der Erfinder dieser Sprache OOP nicht verstanden hat.



  • nein, das sage ich nicht und würde mir ein solches Urteil auch nie anmaßen wollen.

    Ich sage lediglich, daß C++ unter den vorgegebenen Randbedingungen (Kompatibilität mit C inkl. Hardwarenähe, statische Typisierung) kompliziert sein muß. Darunter fallen syntaktische Klimmzüge und Einschränkungen in der Expressivität, von denen dynamisch typisierte OOP-Sprachen unberührt bleiben.


Anmelden zum Antworten