Matti Mäkitalo: Frameworks..

Beitrag lesen

Hi,

-Vererbung macht Sinn, wenn alle Methoden der Basisklasse in der Subklasse gebraucht werden.

meiner Erfahrung nach ist dies nicht korrekt. Vererbung sollte eine "A ist ein B" oder (sogar besser) "A verhält sich wie B" ausdrücken.

Die Aussage "A benutzt B (vollständig)" ist nicht ausreichend. In diversen Büchern (*) wird explizit davor gewarnt, zu häufig Vererbung einzusetzen.

Bei deinem Beispiel frage ich mich, warum die Manager-Klasse überhaupt eine param-Methode hat. Warum bietet die Manager-Klasse etwas an, was die CGI-Klasse anbietet? Ich muss aber auch sagen, dass mir der Name "Manager" zu allgemein ist.

Als weiteren Verbesserungsvorschlag: warum instantiierst du CGI fest in deinem Konstruktor? Wäre es nicht besser, ein CGI-Objekt als externe Abhängigkeit reinzugeben? Das würde es dir erleichtern, Unit-Tests zu schreiben, da die Abhängigkeit vom CGI-Objekt dadurch klarer wird. Insbesonders, da das CGI-Objekt ja auf globale Status (Query-String, STDIN) zugreift.

*: ich habe hier z.B. Sutters, Alexandrescus "C++ Coding Standards" in der Hand. Hier heißt es in Regel 34: "If a relationship can be expressed in more than one way, use the weakest relationship that's practical. Given that inheritance is nearly the strongest relationship we can express in C++ [...], it's only really appropriate when there is no equivalent weaker alternative".

Bis die Tage,
Matti