Klassendesign



  • Hi Leutz,

    ich hab mal wieder eine super Frage die ihr bestimmt schnell beantworten könnt 😃
    Also ich hab mehrere Klassen die einige private und public Elemente besitzen.
    Jetzt hat sich mir die Frage aufgedrängt welches der folgenden Beispiele das schnelle ist?
    Soll ich bei den Methoden ewig lange Parameterlisten pflegen :

    class test
    {
    
    public:
    int A;
    int B;
    int C;
    
    bool irgendwas(int d, int e, int f, int g, int h, int i, int j, int k, int l, int m)
    bool irgendwas2(int n , int o, int p, int q, int r, int s, )
    
    }
    

    oder doch besser die Variablen aus den Parameterlisten als public in die Klasse setzen?

    class test
    {
    
    public:
    int A, B, C;
    int d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s;
    
    bool irgendwas()
    bool irgendwas2()
    }
    

    Ich tendiere zur zweiten Lösung , da ich die publics ja so außerhalb der Klasse im ständigen Zugriff haben kann um sie zu manipulieren. Desweiteren habe ich im Hinterkopf das jeder Parameter einer Methode/Funktion diese langsamer macht.
    Das Beispiel hier ist sehr klein. Im orginal Code bin ich bis jetzt bei ca. 40 Methoden mit bis zu 9 Parametern pro Methode. Ich würde meine Klasse gern etwas optimieren bevor ich die nächsten Methoden einfüge. :p
    Für jeden Tip der meine Klasse beschleunig währe ich euch super dankbar. 😃 😃



  • @Meister_aller_Fragen,

    erstmal ist es kein guter Programmierstil auf
    Variablen einer Klasse direkt zuzugreifen.
    Wenn ich eine Klasse schreibe, sind alle
    Variablen "protected". Und zu jeder Variable
    existiert eine "Get" und nur wenn nötig
    eine "Set" Funktion.
    In deinem Fall würde ich jedoch eine Struktur mit
    den ganzen Variablen erstellen und einen Zeiger
    auf diese Struktur der Funktion übergeben.

    Also so zum Beispiel

    typedef struct structTest
    {
      int A;
      int B;
      int C;
      int d;
      int e;
      int f;
      ...
      ...
    } structTest;
    
    class CTest
    {
      public: // Methoden
        structTest *GetIrgendetwas( void );
        void SetIrgendetwas( structTest test );
      protected: // Variablen
        structTest testData;
    };
    

    Bye Peter.



  • Soll ich bei den Methoden ewig lange Parameterlisten pflegen :

    Das steht im Widerspruch zur OOP. Wenn du also Klassendesign betreibst, dann sollten lange Parameterlisten dir immer suspekt vorkommen.

    Jetzt hat sich mir die Frage aufgedrängt welches der folgenden Beispiele das schnelle ist?

    Das ist die falsche Frage zum falschen Zeitpunkt.

    oder doch besser die Variablen aus den Parameterlisten als public in die Klasse setzen?

    Das ist keine alternative. Es sei denn Pest ist für dich eine Alternative zu Cholera.

    Desweiteren habe ich im Hinterkopf das jeder Parameter einer Methode/Funktion diese langsamer macht.

    Nicht die Funktion wird langsamer sondern wenn überhaupt nur der Aufruf. Aber wie gesagt. Du stellst hier die falschen Fragen zum falschen Zeitpunkt.

    Im orginal Code bin ich bis jetzt bei ca. 40 Methoden mit bis zu 9 Parametern pro Methode.

    40 Methoden mit bis zu 9 Parametern hört sich schwer nach einem Designproblem an.

    Ich würde meine Klasse gern etwas optimieren bevor ich die nächsten Methoden einfüge

    Du vergisst die zwei enstcheidenen Regeln der Optimierung.

    Für jeden Tip der meine Klasse beschleunig währe ich euch super dankbar.

    Soweit bist du noch nicht.

    Wenn ich eine Klasse schreibe, sind alle
    Variablen "protected".

    Das ist fast genauso schlecht wie eine public-Variable.



  • @Meister
    Do eine Klasse gibt es einfach nicht ! 😃
    Sag doch lieber einfach mal wsa das für eine Klasse sein soll und was für eine Aufgabe sie hat.
    Dann fällt dir vielleicht sogar von alleine ein besseres Design ein.
    Also ich hatte noch nie nie Funktion mit mehr als 4 Parametern, und selbst das sind dann meist Mathe Funktionen die halt 4 Punkte oder so brauchen 😃
    Schreib einfach mal was das ding soll ...


Anmelden zum Antworten