Information über die Attribute einer Klasse



  • fabske schrieb:

    Weiß jemand wie teuer sowas zur Laufzeit ist?

    49,95 € inklusive Mehrwertsteuer 16,5%

    Ne, jetz mal im Ernst. Das braucht dich nicht zu kümmern.



  • warum sollte ihn das nicht kümmern? Der Umweg über die Map kostet auf jeden Fall Rechenzeit und wenn oft auf die Eigenschaften der Klasse zugegriffen werden muss, dann wird sich das schnell summieren.

    greetz KN4CK3R



  • Nä ich denk, der wird nich auf sekunden(bruchteile?) achten.
    Und sowieso, hört sich das irgendwie unnötig an.



  • Hacker schrieb:

    Nä ich denk, der wird nich auf sekunden(bruchteile?) achten.
    Und sowieso, hört sich das irgendwie unnötig an.

    Sekundenbruchteile?
    Programmierstil *= 10;
    Performance *= 100;

    Mal im Ernst. Bei kleinen Programmen ist das egal, aber je öfters man ein Lookup machen muss und casten, und je kleiner die Typen sind, desto größer wird der Aufwand im Verhältnis. Dann noch lieber etwas mit Makros basteln.



  • wxSkip schrieb:

    Mal im Ernst. Bei kleinen Programmen ist das egal, aber je öfters man ein Lookup machen muss und casten, und je kleiner die Typen sind, desto größer wird der Aufwand im Verhältnis.

    Eben. Seins ist doch 'n kleines Programm?

    wxSkip schrieb:

    Dann noch lieber etwas mit Makros basteln.

    Naja...schön wird das nicht, und unnötig allemal.



  • Hacker schrieb:

    Eben. Seins ist doch 'n kleines Programm?

    Woher weißt du das? Wir haben sein Programm bislang nicht gesehen.

    Ich vermute mal, du hast bislang nicht performant programmieren müssen. Aber ich garantiere dir, wenn's bei zeitkritischen Routinen eng wird, nutzt du jede Möglichkeit, um noch ein paar ms rauszuholen.



  • Kann mir mal jemand bitte ein Beispiel zeigen, wo man Reflection wirklich braucht, weil es anders nicht geht (i.S.v. alles andere gibt ein schlechteres Design)?



  • _matze schrieb:

    Ich vermute mal, du hast bislang nicht performant programmieren müssen. Aber ich garantiere dir, wenn's bei zeitkritischen Routinen eng wird, nutzt du jede Möglichkeit, um noch ein paar ms rauszuholen.

    Ein paar ms ist wohl übertrieben, aber du hast recht. So bei zeitengen Programmen muss man aufpassen, mit was man arbeitet.



  • Hacker schrieb:

    Ein paar ms ist wohl übertrieben, aber du hast recht. So bei zeitengen Programmen muss man aufpassen, mit was man arbeitet.

    Bei dem 100000000sten Taschenrechner ist das übertrieben. 😉 Aber bei gewissen zeitkritischen Anwendungen kommt es durchaus auch mal auf ein paar ms an.



  • Aber sind Maps wirklich so langsam?
    Ist der Algorithmus nicht O(N), und dasselbe auch bei Vektoren?



  • O(N) und O(M) unterscheiden sich nur durch konstante Faktoren, z.B. 1 und 1000000 also ist O(N) und O(M) bei M=M 1000000 mal schneller.



  • Hacker schrieb:

    Aber sind Maps wirklich so langsam?
    Ist der Algorithmus nicht O(N), und dasselbe auch bei Vektoren?

    Die Komplexität von map ist O(log(N)).



  • Wo kommen denn auf einmal N und M her? Und was ist die Komplexität einer Datenstruktur? 😕



  • Michael E. schrieb:

    Wo kommen denn auf einmal N und M her? Und was ist die Komplexität einer Datenstruktur? 😕

    Schade, denn das ist (mehr oder weniger) wichtig.
    Schon von Google gehört? Ist echt ne tolle Seite!



  • fabske schrieb:

    IDie Attribute können sich ändern, ich würde aber eine Ausgabefunktion schreiben die mir immer alle Attribute ausgibt, ohne zu wissen welche deklariert wurden.

    Wie wäre es wenn du den ostream-Operator für die Klassen definierst? Ja, den muss man anpassen, aber freier Wildwuchs ist bei Klassen eigentlich unüblich.



  • Hacker schrieb:

    Michael E. schrieb:

    Wo kommen denn auf einmal N und M her? Und was ist die Komplexität einer Datenstruktur? 😕

    Schade, denn das ist (mehr oder weniger) wichtig.
    Schon von Google gehört? Ist echt ne tolle Seite!

    "Komplexität von map" ist nur ne Formulierungssache. Man weiß zwar aus dem Kontext, was gemeint ist, aber korrekt ist es nicht.

    Was M und N sein sollen, weiß ich allerdings wirklich nicht. Und tu mir den Gefallen und komm nicht mit tollen Googlesprüchen.



  • Um noch mal auf den op zurückzukommen:

    Eine einfach Lösung wäre, jedem Attribut einen Defaultwert zu geben, z.B. 0 , 0.0f und "".
    In der Ausgabefunktion überprüfst du einfach, ob der Wert ein anderer ist, als dieser Defaultwert und gibst ihn in Abhängigkeit davon aus.
    Alternativ kannst du statt mit einem Defaultwert auch mit einem bool flag arbeiten.



  • Die O-Notation sagt Dir nur was über die Form und ungefähren "Verlauf" der Steigung der Komplexität O(N) sagt, dass der Aufwand linear mit der Anzahl der Elemente steigt.

    Verlauf, steht deswegen in Anführungszeichen, weil die exakte Steigung keine Rolle spielt, d.h. O(100*N) = O(N). Somit hast Du mit einer solchen Komplexitätsangabe nur einen ungefähren Anhaltspunkt, ohne dass Du aber zwei Algorithmen die beide eine Komplexität von O(N) haben, als gleich schnell bei gegebenem N annehmen kannst. Es können eben Welten dazwischen liegen.

    Dann kommen eben noch Offsets hinzu, also Aufwand, der unabhängig von N zu betreiben ist.

    Daher: O(N) gibt Dir Informationen bezüglich des Zeitverhaltens eines Algorithmus in Relation zur Größe der Daten. Mehr nicht. Mehr Informationen gibt Dir nur ein Profiler.

    Ansonsten findest Du hier: http://en.wikipedia.org/wiki/Big_O_notation mehr Details.



  • Also erstmal vielen Dank für die Antworten, auch wenn sie bis jetzt nicht so hilfreich waren 😉

    Wovon rede ich hier eigentlich? Davon:
    Ich habe ein Framework in welchem parallele Module kommunizieren, und zwar datenbasiert. Sie erstellen also Objekte und schicken diese hin und her, und das können sehr sehr viele pro Sekunden sein! Die Objekte sollen also sehr performant und klein sein.
    Das Problem, der Empfänger weiß gar nicht immer was er da kriegt, soll es aber z.B. ausgeben können. Ich muss also wissen was für Attribute das empfangene Objekt hat, um es ausgeben zu können.



  • fabske schrieb:

    Das Problem, der Empfänger weiß gar nicht immer was er da kriegt, soll es aber z.B. ausgeben können. Ich muss also wissen was für Attribute das empfangene Objekt hat, um es ausgeben zu können.

    Muss der Empfänger das wirklich wissen? WIso kann es nicht das "Message" Objekt eine Methode für die Ausgabe anbieten, und der Empfänger ruft diese dann nur noch auf?


Anmelden zum Antworten