Klassen: Welches design sinnvoll?



  • Hallo,

    ich habe eine ganz einfache frage: Ich habe mehrere klassen die alle einen hauptalgorithmus darstellen. Alle diese klassen haben mehrere Methoden gemeinsam. Ich würde gerne diese Methoden in eine eigene Klasse packen und dann allen "Hauptklassen" zur verfügung stellen. Nur was wäre hier eine sinnvolle Möglihckeit?
    Soll ich die Hauptklassen von der einen klasse jeweils erben lassen? Oder soll ich eher jeder Klasse ein Objekt auf diese subklasse geben?

    Danke



  • Wenn deine Hauptklasse Funktionen kapselt, die fuer alle ihre Kinder relevant sind, dann ist das Vererbungsmodell sinnvoll.

    Also ähnlich der Tatsache, dass eine Klasse Tier eine Funktion setLebensraum beinhalten kann, weil jedes Tier nunmal so etwas hat.

    Die Nutzung von Aggregation und Assoziation macht dann Sinn, wenn etwas ein Teil von etwas ist. Zum Beispiel bei der Klasse Mannschaft ist ein Spieler ja keine Mannschaft. Spieler ist ein Teil von Mannschaft und wird dann wohl als Objekt in dieser welchen Klasse auch erstellt.

    In deinem Fall musst du dann entscheiden, was für dich zutrifft.



  • Wenn du ohne Einschränkung Aggregation einsetzen kannst (d.h. ein Member der gemeinsamen Klasse haben), dann tu das. Vererbung würde ich nur einsetzen, wenn du es wirklich brauchst bzw. einen tatsächlichen Vorteil dadurch hast.



  • Im allgemeinen sollte die Aggregation der (privaten) Vererbung vorgezogen werden.
    Wenn du Effective C++ hat kannst du da noch mal reinschauen, das wird doch recht ausführlich behandelt. Wenn nicht, dann kaufen...



  • Gibt deinen Klassen Namen und frag dich, ob X ein Y hat (Aggregation ) oder ob X ein Y ist (Vererbung) oder ob du die Funktionen nur in nen Namespace stecken kannst.



  • In dem fall hätten die drei klassen C1, C2, C3 jeweils alle die Klasse D. Also wäre das wohl Aggregation....ich suche bereits nach einem intuitiven leichten beispiel in c++ welches die Aggregation erklärt...

    danke euch



  • Anfänger_neu++ schrieb:

    In dem fall hätten die drei klassen C1, C2, C3 jeweils alle die Klasse D. Also wäre das wohl Aggregation....ich suche bereits nach einem intuitiven leichten beispiel in c++ welches die Aggregation erklärt...

    Ich mach mal ein sehr vereinfachtes Beispiel: Eine Person besitzt eine Anschrift.

    class Anschrift
    {
        //...
        public:
          std::string GetStrasse() const;
          std::string GetStadt() const;
        //...
    };
    
    class Person
    {
        //...
        private:
          Anschrift privatAdresse; // Kann ebenso je nach Anforderung ein
                                   // Zeiger, eine Referenz, eine Containerklasse...
                                   // sein.
        //...
    };
    

    Aggregation kennst du mit Sicherheit schon, auch wenn du es nicht bewusst eingesetzt hast (Person hat einen Namen, Person hat ein Geburtsdatum)... Auch kann eine Aggregation eine 1:n Beziehung oder ähnliches sein (z.B. kenne ich Personen mit mehreren Anschriften).

    Auch kann man die Aggregation mit der Vererbung gut kombinieren. Nehmen wir mal an, du hast mehrere Algorithmen, die eine gemeinsame Schnittstelle haben. Nehmen wir zudem an, das der Algorithmus zur Laufzeit ausgetauscht werden soll. Dann machst du eine Basisklasse für deine Algorithmen, und deine Klassen verwenden einen Zeiger auf die Basisklasse für den Algorithmus (So kannst du diesen jederzeit austauschen) => Strategie (Entwurfsmuster).


Anmelden zum Antworten