Stilfrage bei Vererbung



  • Hi leute, folgendes Beispiel: Ich habe zwei Klassen die eine bietet Methoden an die die andere benutzt.

    class Base
    {
      private:
      int a;
      protected: // oder public je nach fall
      void setA(int n)
      {
        a=n;
      }
    };
    
    class BenutztBase : public Base // Ableiten oder nicht?
    {
      private:
      Base b; // Oder lieber eine extra Instanz dieser Klasse anlegen?
      public:
      void irgendwas()
      {
        this->setA(5);
        // oder
        b.setA(5);
      }
    };
    

    Das Beispiel dürfte meine Frage wohl verdeutlichen. Ist es üblich wenn man von einer Klasse erbt bei der man keine Methode überschreibt sondern nur die Funktionalität nutzt. Oder sollte man lieber ein Objekt anlegen?



  • player424 schrieb:

    Oder sollte man lieber ein Objekt anlegen?

    Wenn möglich und sinnvoll, ja. Möglich ist es hauptsächlich, wenn man keine virtuellen Funktionen oder protected -Member in der abgeleiteten Klasse nutzt. Sinnvoll ist es, wenn keine Ist-Ein-Beziehung der repräsentierten Objekte besteht.

    Aggregation ist viel die flexiblere und weniger starke Bindung als Vererbung. Öffentliche Vererbung solltest du nur verwenden, wenn du von der abgeleiteten Klasse Derived sagen kannst, dass sie ein Base ist (IS-A). Wenn die Klasse hingegen nur mit Hilfe der anderen Klasse implementiert ist oder sie benutzt (nach Sutter IS-IMPLEMENTED-IN-TERMS-OF), solltest du Aggregation bevorzugen.



  • konkret geht es um einen server und einen client. Beide nutzen das gleiche Protokoll, deswegen wollte ich das Protokoll in eine Klasse packen, welche ebendiese Methoden anbietet um entsprechende Kommandos zu senden.
    Und aus diesem Grund hatte ich überlegt die Klassen für Client und Server von dieser Protokoll-Klasse abzuleiten. Ich bin mir nicht ganz sicher ob das eine ist-ein Beziehung ist. Aber es sieht vom Design her eben besser aus in dem Fall.



  • A server is implemented in terms of a protocol. Aggregation passt also. Ein Server ist allerdings kein Protokoll. Genausowenig wie ein Auto ein Motor ist. Bekannter Beitrag zu dem Thema von volkard steht in der FAQ.



  • Nach dem lesen dieses Artikels ist mir die Frage fast schon etwas peinlich. Hab den Artikel nur einmal gelesen und nicht richtig verstanden. Vielen Dank für eure Antworten.
    Grüsse
    player424


Log in to reply