Performancemythen?



  • Der Durchschnitt schrieb:

    Xin schrieb:

    Statt wie C++ Code zu erzeugen, werden sie in PHP direkt interpretiert. Hat $s keine Funktion draw() knallt's halt.

    Irgendwie finde ich, dass jetzt nach und nach auch deine Definition von OOP schwammig wird. Jetzt wird anhand des Runtime-Types zur Laufzeit entschieden welche Methode aufgerufen wird, und dir passt es immer noch nicht?

    "Nach und nach", wo Du dich auf ein aktuelles Posting beziehst?

    Aber die Sache ist auf den zweiten Blick tatsächlich interessant...
    Schließlich wird das Show gerufen, entsprechend des Objektes und das wird zur Laufzeit entschieden. Entsprechendes gilt dann auch für die JS Lösung.

    Bleibt die Frage, was hier jetzt gilt.

    Die Objekte stehen ja anscheinend nicht miteinander in Beziehung, es findet ja keine Vererbung statt.

    Das muss so für PHP natürlich nicht gelten, denn PHP speichert ja die Typinformationen zusätzlich. Die Objekte sind also insoweit miteinander verwand, dass sie eine gemeinsame Basis haben, die die Typinformation beinhaltet.
    Das habe ich nicht beachtet, als ich die Antwort schrieb.
    Damit gibt es eine gemeinsame Basis, die PHP auswerten kann, es gibt die Typinformation, um Typabhängig die Funktionspointer zu finden.
    Damit ist die Vorraussetzung für OOP gegeben.

    Es ist tatsächlich OOP, was hier angewandt wird. Allerdings von PHP um das Template auszuführen, nicht vom Programmierer, um ein OOP Problem zu beschreiben.
    Aber das ändert ja nichts daran, dass es OOP ist.

    Der Durchschnitt schrieb:

    Übrigens kann es analog dazu genauso in C++ knallen. Schon einmal die Fehlermeldung "pure virtual function call" bekommen? 😉

    Natürlich, aber das ist nur möglich, wenn mam mehrere Sourcecodes hat und bei Erweiterungen von Templates vergißt alle Sourcecodes zu rekompilieren.
    Ansonsten würde der Compiler meckern.

    Tellerrand schrieb:

    Xin schrieb:

    Nopes, ist es nicht OOP. Erklärungen findest Du ausreichenden Wiederholung in den Postings der letzten 20 Seiten.

    Genau sowas habe ich befürchtet, nur weil Du starke Typisierung als Zwang für OO ansiehst ist das noch lange nicht richtig.

    Wurde nie von mir behauptet.

    Brutus schrieb:

    Xin schrieb:

    ---------------------

    Ich werde die Diskussion hier nicht beenden, werde mich vereinzelt auch gerne noch teiligen, ich möchte aber zu einem Ende anregen.

    Oh bitte, wie laecherlich ist das denn.
    Jetzt, wo es erst richtig eng fuer dich wird, wo du merkst, dass du mit C++/Java nicht mehr nur die Welt erklaeren kannst, ziehst du den Schwanz ein.

    Ich schreibe hier viel und grade ist mir auf die Schnelle bei der PHP Geschichte ein Fehler unterlaufen. Kann passieren, wurde gefunden, kritisiert und widerspricht nicht meiner Definition von OOP. Ich sehe nicht, dass es für mich eng wird.

    Auch ziehe ich nicht den Schwanz ein, denn wie Du vielleicht bemerkt hast, möchte ich das Ende der Diskussion anregen, bin aber immernoch hier und beantworte Fragen.

    Allerdings spiele ich hier seit 3 Tagen den Erklärbär für's Forum und gelegentlich möchte ich mich auch um andere Dinge kümmern. Was ist daran lächerlich?

    Edit: Ich möchte noch hinzufügen, dass hier jeder irgendwelchen Mist posten darf und ich zu (nahezu) jedem (sich in letzter Zeit vorrangig wiederholenden) Posting die passende Erklärung bringen darf. Ich möchte den Zeitaufwand für diesen Thread reduzieren und so übersehe ich schneller mal ein "private" oder ähnliches.
    Obwohl hier jeder gestützt durch die Masse Unsinn posten darf, darf ich mir eigentlich keine Fehler erlauben, muss etliche Interpretationsmöglichkeiten voraussehen und gleich mit beschreiben, damit das ganze nicht noch mehr explodiert.
    Das ist anstrengend und nur wenige lassen sich darauf ein, darüber mal nachzudenken.
    Mir bringt das nicht viel, denn wie ich schon schrieb, wurde bisher nichts vorgebracht, was mich an meiner Definition auch nur zweifeln ließ.
    Ich denke, es ist nur verständlich, wenn ich nach sovielen Seiten die Sache nun zurückfahren möchte.



  • Och Hase.
    Du bist NICHT der Erklaerbaer.
    Denn unter dem hatte ich mir sowas wie 'nen Messias vorgestellt - davon bist du aber noch weit entfernt.
    Nimm einfach deine beschissenen Scheuklappen ab. Selbst Jesus, meinetwegen auch Mohammed, waren offener als du und hat keinen Stock im Arsch.

    Alternativ darfst du auch einfach gehen. 🤡



  • TheTester schrieb:

    Beschreib doch mal was OO für dich ist.

    Hehe, ich lasse mich ungern zu einer Definition verlocken.
    Es wäre doch viel zu ignorant zu behaupten ich könnte eine Definition in kurzer Zeit hundertprozentig ohne Fehler schreiben.
    Da beschränke ich mich lieber auf kleine Beispiele oder Thesen, das ist viel einfacher und es kommt bedeutend weniger murks bei rum.
    Insbesondere die Formulierungen sind eine nicht zu unterschätzende Schwierigkeit, Fehlinterpretationen sollte man ja unmöglich machen. Frage mal zum Thema lineare algebra wie die null definiert ist 🙄



  • Xin schrieb:

    [...]
    Die Objekte stehen ja anscheinend nicht miteinander in Beziehung, es findet ja keine Vererbung statt.

    Damit Objekte in einer Beziehung zueinander stehen muss keine Vererbungsbeziehung zwischen ihnen bestehen. Es gibt auch noch die einfache Assoziation, Aggregation und Komposition. Das die Sachen nicht das gleiche sind wird auch z.B. durch die Symbolik der UML deutlich.

    Aber was anderes, es wäre hilfreich wenn du deine "überarbeitete" Definition in einem vernünftigen Text noch einmal darlegen könntest. Da wie dir ja auch aufgefallen ist, der Thread sehr unübersichtlich wird.

    tt



  • Tellerrand schrieb:

    TheTester schrieb:

    Beschreib doch mal was OO für dich ist.

    Hehe, ich lasse mich ungern zu einer Definition verlocken.

    Warum? Angst, etwas konkretes zu sagen, dass jemand anderer kritisieren könnte?
    Keine Sorge, man kritisiert Dich nicht, hier wird man Dich in der Luft zerreißen.

    Wenn Du die Deppen ignoriest, hätten wir damit allerdings mal wieder einen konstruktiven Beitrag.

    Tellerrand schrieb:

    Es wäre doch viel zu ignorant zu behaupten ich könnte eine Definition in kurzer Zeit hundertprozentig ohne Fehler schreiben.
    Da beschränke ich mich lieber auf kleine Beispiele oder Thesen, das ist viel einfacher und es kommt bedeutend weniger murks bei rum.

    Vor allem, kommt weniger bei rum, weil man sich weniger dem Risiko aussetzt, dass jemand etwas falsifizieren kann.

    Tellerrand schrieb:

    Insbesondere die Formulierungen sind eine nicht zu unterschätzende Schwierigkeit, Fehlinterpretationen sollte man ja unmöglich machen. 🙄

    Stimmt - und grade das ist die Herausforderung...

    TheTester schrieb:

    Xin schrieb:

    [...]
    Die Objekte stehen ja anscheinend nicht miteinander in Beziehung, es findet ja keine Vererbung statt.

    Damit Objekte in einer Beziehung zueinander stehen muss keine Vererbungsbeziehung zwischen ihnen bestehen. Es gibt auch noch die einfache Assoziation, Aggregation und Komposition. Das die Sachen nicht das gleiche sind wird auch z.B. durch die Symbolik der UML deutlich.

    Und haben diese Beziehungen etwas mit OOP zu tun?

    TheTester schrieb:

    Aber was anderes, es wäre hilfreich wenn du deine "überarbeitete" Definition in einem vernünftigen Text noch einmal darlegen könntest. Da wie dir ja auch aufgefallen ist, der Thread sehr unübersichtlich wird.

    Vielleicht eine gute Idee. Da diese Definition allerdings bestenfalls Deppenfutter darstellt, damit die was haben, um es in der Luft zu zerreißen, bitte ich dafür um ein wenig Geduld.



  • Xin schrieb:

    Da diese Definition allerdings bestenfalls Deppenfutter darstellt, damit die was haben, um es in der Luft zu zerreißen, bitte ich dafür um ein wenig Geduld.

    Ja, das ist sicher ne gute Idee, vorsichtshalber schonmal alle eventuellen Kritiker als Deppen zu bezeichnen. Das überzeugt mich bereits jetzt. 🙄

    Aber vermutlich liegt das daran, dass Du ja eh als einziger vernünftig mit Definitionen und Logik umzugehen weißt. Wer da widerspricht beweist nur seine Dummheit.



  • Xin schrieb:

    TheTester schrieb:

    Xin schrieb:

    [...]Die Objekte stehen ja anscheinend nicht miteinander in Beziehung, es findet ja keine Vererbung statt.

    Damit Objekte in einer Beziehung zueinander stehen muss keine Vererbungsbeziehung zwischen ihnen bestehen. Es gibt auch noch die einfache Assoziation, Aggregation und Komposition. Das die Sachen nicht das gleiche sind wird auch z.B. durch die Symbolik der UML deutlich.

    Und haben diese Beziehungen etwas mit OOP zu tun?

    Hallo MacFly, jemand zuhause? Du widerlegst meinen Codeschnipsel mit Argument A, jemand beweist, daß A gar nicht zutrifft, und Du fragst, was das mit OOP zu tun hat?
    Das war ein integraler Bestandteil "unserer" Definition.

    Xin schrieb:

    Da diese Definition allerdings bestenfalls Deppenfutter darstellt, damit die was haben, um es in der Luft zu zerreißen, bitte ich dafür um ein wenig Geduld.

    Viel schlimmer, die ganze Welt dreht sich um DICH! Die Deppen, Mathematikloser und Halbinformatiker hier werden DICH zerreißen, sie haben es alle nur auf DICH abgesehen! 🙄



  • Xin schrieb:

    Otzes Code:

    class Tier 
    { 
        private: 
            string laut; 
        public: 
            Tier():laut("Hallo"){} 
            Tier(const string& laut):laut(laut){} 
          
            void gibLaut(){std::cout<<laut<<"\n";} 
    }; 
    class Katze: public Tier 
    { 
        public: 
            Katze():Tier("Miau"){} 
    };
    

    Ich les den rest mal nicht mehr, laut ist private. Dein beispiel geht durch keinen compiler!

    //edit und du wirfst mir vor, dass ich deine postings nicht richtig lese? wo lebst du?



  • Xin schrieb:

    Warum? Angst, etwas konkretes zu sagen, dass jemand anderer kritisieren könnte?

    Nein, das ist pure Faulheit gepaart mit dem Wissen, dass ich mich in einige Definitionen und Entwicklungen der Geschichte noch einlesen müsste.

    Ich weiß wie lang so eine Definition wird, wieviel Arbeit da einzelne Sätze machen können, usw.
    Fängt ja schon damit an, warum der Begriff Klasse erst später der Objektorientierung hinzugefügt wurde, bzw. warum man den Begriff Klasse erstmal außen vor lassen sollte.
    Warum ein if(Bedingung) then {Anweisungsblock} kein OO ist.
    Oder auch warum Vererbung nicht unbedingt ein Grundstein der OOP ist.
    ...

    Dafür würde ich mehrere Tage brauchen bis ich zufrieden bin und am Ende muss ich dann noch die Formulierungen so überarbeiten, dass sie eindeutig sind.
    Da bin ich derzeit schlicht zu faul für.



  • otze schrieb:

    Ich les den rest mal nicht mehr, laut ist private. Dein beispiel geht durch keinen compiler!

    Hättest Du mal machen sollen.



  • Xin schrieb:

    Allerdings spiele ich hier seit 3 Tagen den Erklärbär für's Forum

    ne sorry du bist hier eher ne lachnummer des forums.

    und gelegentlich möchte ich mich auch um andere Dinge kümmern.

    dann schreib halt nicht so ellenlange posts, die am ende außer beleidigung und arroganz ja doch nix aussagen 👍



  • Xin schrieb:

    TheTester schrieb:

    Xin schrieb:

    [...]
    Die Objekte stehen ja anscheinend nicht miteinander in Beziehung, es findet ja keine Vererbung statt.

    Damit Objekte in einer Beziehung zueinander stehen muss keine Vererbungsbeziehung zwischen ihnen bestehen. Es gibt auch noch die einfache Assoziation, Aggregation und Komposition. Das die Sachen nicht das gleiche sind wird auch z.B. durch die Symbolik der UML deutlich.

    Und haben diese Beziehungen etwas mit OOP zu tun?

    Wenn Vererbung etwas mit OOP zu tun hat, ja dann haben sie auch etwas mit OOP zu tun. Nur mit Vererbung allein lassen sich nicht alle Beziehungen von Objekten untereinander charakterisieren. Ich bin mit mir etwas uneins ob sie jedoch neben Vererbung einen echten Beitrag zur Def. leisten. Sie haben wohl etwas mit OOP zu tun aber ich glaube eher derart das sie, betrachtet von der Abstraktionsebene, niedriger angesiedelt sind als OO und deshalb von OO schon "impliziert" werden.

    Wenn man es denn arg streng betrachtet würde wohl das Klassenkonzept, Vererbung und Polymorphie OO zur OO machen, da das die wesentlichen "Neuerungen" in den Entwurfskonzepten sind und Dinge wie funktionale Abstraktion, Datenabstraktion, abstrakte Datentypen durch den höheren Abstraktionsgrad schon enthalten sind (betrachtet auf die Evolution von Entwicklungskonzepten).

    tt



  • Xin schrieb:

    otze schrieb:

    Ich les den rest mal nicht mehr, laut ist private. Dein beispiel geht durch keinen compiler!

    Hättest Du mal machen sollen.

    gcc:

    test.cpp:8: error: `std::string Tier::laut' is private
    test.cpp:23: error: within this context

    //edit den code mal her

    #include <string>
    #include <iostream>
    
    using namespace std;
    class Tier
    {
        private:
            string laut;
        public:
            Tier():laut("Hallo"){}
            Tier(const string& laut):laut(laut){}
    
            void gibLaut(){std::cout<<laut<<"\n";}
    };
    class Katze: public Tier
    {
        public:
            Katze():Tier("Miau"){}
    };
    int main()
    {
      Tier* tier  = new Katze();
      tier->laut = "Iaaa Iaaa";
      tier->gibLaut();
    }
    


  • vielleicht sollte mal jeder seine persönliche auffassung von OOP hier hinschreiben?
    meine ist die:
    sobald ein programm aus lauter autarken komponenten besteht, und der mensch diese irgendwie miteinander verknüpft und in beziehung bringt (völlig egal, ob er ganz archaisch 'methoden' aufruft und damit den kontrollfluss manuell festlegt oder die komponenten ein eigenleben haben und sich selbständig messages zuschieben), dann kommt dabei ein 'objektorientiertes programm' heraus (weil die vorgehensweise bei design und/oder programmierung sich an objekten orientiert hat). dazu muss man weder vererbung noch polymorphismus verwendet haben und die objekte müssen auch nicht unbedingt dingen aus der realen welt nachempfunden sein.
    welche programmiersprache man benutzt hat, ist auch egal.
    im gegensatz dazu, bei einem 'nicht-OO-programm', ist der programmierer damit beschäftigt, irgendwelche abläufe und algorithmen in die maschine zu stopfen, indem er hauptsächlich mit funktionen, schleifen, primitiven datentypen usw. hantiert. hierbei ist der 'instruction counter' dass maß aller dinge und sowas ist eben nicht-OOP.
    so...der nächste bitte 😉



  • otze schrieb:

    Xin schrieb:

    otze schrieb:

    Ich les den rest mal nicht mehr, laut ist private. Dein beispiel geht durch keinen compiler!

    Hättest Du mal machen sollen.

    gcc:

    test.cpp:8: error: `std::string Tier::laut' is private
    test.cpp:23: error: within this context

    [/cpp]

    Man, man, man... Beschwer Dich nicht, dass ich Dir vorwerfe, dass Du die Postings nicht liest.
    LIES DAS POSTING!

    Ich mach's Dir einfacher, ich quote die wichtigen Stellen.

    Aus dem gleichen Posting - nur eine Zeile hättest Du weiterlesen müssen:

    Xin schrieb:

    Edit: Ich ziehe das Ia zurück und behalte es für mich...

    Ich habe meinen falschen Code drin gelassen, weil ich nicht einsehe, das Posting nachträglich zu verfälschen. Ich darf mal versehentlich ein "private" überlesen, das macht mich in meinen Augen nicht zum Totalversager. Ich kann dadrüber lachen, wenn ich Dir eine Grube grabe und selbst reinstolper.
    Ich dachte, Du kannst vielleicht auch drüber lachen - sieht ja nicht so aus.

    Zwei Postings weiter antworte ich auf Deine Änderung im Deinem Posting:

    Xin schrieb:

    Ich ändere mein Posting nicht, damit ich weiterhin belegen kann, dass wenn ich mich zum Esel mache, ich das wenigstens noch selbst merke 😉

    Ich lese hier alles. Und ich beantworte sehr viel und es tut mir leid, dass sich bei den vielen Antworten gelegentlich auch mal ein Flüchtigkeitsfehler einschleicht. ENTSCHULDIGE VIELMALS! Ich bin nicht perfekt, ich bin lediglich davon überzeugt, dass meine Definition von OOP besser ist als der Rest. Ich darf mich hier gegen nahezu alle verteidigen, während Du Dich das Privileg hast, Dich auf Dein eines kleines Posting zu konzentrieren und reihenweise derartige Postings hinterher schieben darfst, die überflüssig wären, würdest Du das eine Posting wirklich lesen, bevor Du antwortest.

    Okay...?

    In dem Posting, in dem Du das Lesen eingestellt hast, findest Du weiterhin die immernoch korrekte Antwort, warum Dein Vorschlag, leider noch kein OOP ist.



  • Undertaker schrieb:

    vielleicht sollte mal jeder seine persönliche auffassung von OOP hier hinschreiben?
    meine ist die:
    sobald ein programm aus lauter autarken komponenten besteht, und der mensch diese irgendwie miteinander verknüpft und in beziehung bringt (völlig egal, ob er ganz archaisch 'methoden' aufruft und damit den kontrollfluss manuell festlegt oder die komponenten ein eigenleben haben und sich selbständig messages zuschieben), dann kommt dabei ein 'objektorientiertes programm' heraus (weil die vorgehensweise bei design und/oder programmierung sich an objekten orientiert hat). dazu muss man weder vererbung noch polymorphismus verwendet haben und die objekte müssen auch nicht unbedingt dingen aus der realen welt nachempfunden sein.

    Frage: Definiere bitte das neu im Thread erschienene Wort "Komponente".
    Ja, ich habe eine Vorstellung davon, aber das ist die Blackbox in Deiner Aussage. Deine Komponenten müssen objekt(-typ)orientiert sein, damit ich der Aussage (!=Definition) soweit zustimmen könnte.



  • Und nochmal ich: Folgendes sollte eigentlich vor otzes Posting stehen:

    TheTester schrieb:

    Xin schrieb:

    Damit Objekte in einer Beziehung zueinander stehen muss keine Vererbungsbeziehung zwischen ihnen bestehen. Es gibt auch noch die einfache Assoziation, Aggregation und Komposition. Das die Sachen nicht das gleiche sind wird auch z.B. durch die Symbolik der UML deutlich.

    Und haben diese Beziehungen etwas mit OOP zu tun?

    Wenn Vererbung etwas mit OOP zu tun hat, ja dann haben sie auch etwas mit OOP zu tun. Nur mit Vererbung allein lassen sich nicht alle Beziehungen von Objekten untereinander charakterisieren. Ich bin mit mir etwas uneins ob sie jedoch neben Vererbung einen echten Beitrag zur Def. leisten.

    Wenige Beleidigungen zuvor, schrieb "scrub_" noch dazu:

    Scrub_ schrieb:

    Hallo MacFly, jemand zuhause? [...]was das mit OOP zu tun hat?
    Das war ein integraler Bestandteil "unserer" Definition.

    Ich sehe den Beitrag nämlich jetzt auch nicht und aus Scrubs Beitrag lese ich grade auch nicht, wo er ihn sieht.
    Darum fragte ich nach.

    TheTester schrieb:

    Sie haben wohl etwas mit OOP zu tun aber ich glaube eher derart das sie, betrachtet von der Abstraktionsebene, niedriger angesiedelt sind als OO und deshalb von OO schon "impliziert" werden.

    Auf jeden Fall lassen sich mit ihr Beziehungen zu Objekten ausdrücken.
    Jeder Mensch hat eine aggregative Beziehung zu seinem Herzen. Menschen verdauen, schlafen und pflanzen sich fort und Herzen pumpen. Obwohl eine aggregative Beziehung besteht, sehe ich hier keine sinnvolle Möglichkeit einen objektorientierten Algorithmus zu formulieren, der diese Beziehung ausnutzt.

    Jeder Hand hat eine assoziative Beziehung zu seinen Menschen. Die Hände sind da. Sind die Hände weg, bleibt der Mensch trotzdem da. Ich wüßte jetzt nicht, wie ich das ausnutzen könnte.

    Die interessante Beziehung für OO ist die "ist ein" Beziehung: die Vererbung. Ein Arbeitnehmener ist ein Mensch. Arbeitnehmer verdauen, schlafen und pflanzen sich fort, aber nur während Pausen und in der Freizeit.

    TheTester schrieb:

    Wenn man es denn arg streng betrachtet würde wohl das Klassenkonzept, Vererbung und Polymorphie OO zur OO machen, da das die wesentlichen "Neuerungen" in den Entwurfskonzepten sind und Dinge wie funktionale Abstraktion, Datenabstraktion, abstrakte Datentypen schon enthält.

    Das Klassenkonzept ist nicht notwendig, lediglich die Klassifizierung, also eine Schnittstelle, damit Basis und Ableitung Basisdaten an identischer Stelle stehen haben, damit die Basisfunktionen (z.B. typeid()) die Basisinformationen auslesen können.



  • Undertaker schrieb:

    vielleicht sollte mal jeder seine persönliche auffassung von OOP hier hinschreiben?
    so...der nächste bitte 😉

    objektorientiert ist, wenn verschiedene objekte miteinander kummunizieren, d.h. nachrichten empfangen und versenden können. <- punkt



  • und xin, dein "diskussionstil" ist echt bissl ignor/arrogant 🙄



  • overtaker schrieb:

    und xin, dein "diskussionstil" ist echt bissl ignor/arrogant 🙄

    Inwiefern?
    Weil ich meine Überzeugung nicht der Allgemeinheit anpasse? Wobei ich nicht weiß, wer hier jetzt die Allgemeinheitheit repräsentiert, man lässt mir ja genug Auswahl.
    Sorry, wenn ich nicht überzeugt bin, kann ich meine Meinung nicht anpassen. Das ist nicht ignorant und auch nicht arrogant.


Anmelden zum Antworten