Article View: de.comp.lang.c++
Article #960Re: Protected inheritance
From: Nico Josuttis
Date: Wed, 06 Dec 1995 15:07
Date: Wed, 06 Dec 1995 15:07
53 lines
2572 bytes
2572 bytes
In article <49plui$c8a@news.rrz.uni-koeln.de>,
Ralf Allar <bj03304@rs1.rrz.uni-koeln.de> wrote:
>In article <5yi-CASYmIB@pegasus.RoBIN.de>, arent@pegasus.RoBIN.de says...
>>
>>Wer kann dieses Rätsel lösen:
>>
>>Public inheritance: Ist-Beziehung
>>Protected inheritance: ???
>>Private inheritance: Hat-Beziehung
>>
>Ich sehe da kein Raetsel, sondern einen Fehler!
>
>Private Erblichkeit sollte man mit Vorsicht geniessen. Eine hat-ein Beziehung
>bzw. ist-implementiert mit modelliert man normalerweise durch Layering und
>nicht durch private Vererbung. Dies sollte nur in Ausnahmefaellen passieren,
>so bei protected Elementen oder virtuellen Funktionen.
Vererbung dient zwei Zwecken:
a) Arbeit mit Oberbegriffen
b) Code-Wiederverwendung
a) ist die "reine" objektorientierte Vererbung.
Alle Eigenschaften der Basisklassen werden wirklich geerbt
(sind weiterhin sinnvoll und unverfaelscht).
b) Ist eine andere Formulierung fuer Verwendung.
Man koennte es als "quick and dirty" bezeichnen, wobei in
C++ durch die spezielle Unterstuetzung von privater Vererbung
das dirty aber mehr zu einer Geschmacksfrage wird.
b) wuerde ich aber nicht als Fehler betrachten.
Ich wuerde es nur nicht machen, da es eine "white box" (im Gegensatz
zur "black box") Wiederverwendung ist. Soll heissen: man macht
sich vom CODE der Basisklasse abhaengig, was in der Regel schlecht ist.
Nun aber zur eigentlichen Frage:
>>Protected inheritance: ???
Protected inheritance ist auch eine Hat-Beziehung (also auch Fall b)).
Der Unterschied liegt nur im moeglichen Zugriff auf Daten von davon
abgeleiteten Klassen.
Wenn man im C++-Umfeld von privater Vererbung redet, meint man i.a.
private oder protected Vererbung.
Der entscheidende Punkt ist, dass die is-a Beziehung nicht mehr gilt.
P.S. Siehe auch meinen Vortrag auf der OOP in Muenchen
"Die Wahrheit ueber Vererbung in C++"
im Februar
--
Nico address: BREDEX GmbH, Nicolai Josuttis
email: nico@bredex.de Fallersleber-Tor-Wall 23
phone: +49 531 24330-0 D-38100 Braunschweig
fax: +49 531 24330-99 Germany
Technical Details
Message-ID:
<DJ67Bq.I0L@bredex.de>Path:
arc1-ca.pugleaf.net!lumumba.braunschweig.pop.de!bredex!nicoReferences:
<5yi-CASYmIB@pegasus.RoBIN.de> <49plui$c8a@news.rrz.uni-koeln.de>Show Full Headers
Complete Article Headers
Newsgroups: de.comp.lang.c++ Path: arc1-ca.pugleaf.net!lumumba.braunschweig.pop.de!bredex!nico From: nico@bredex.de (Nico Josuttis) Subject: Re: Protected inheritance Message-ID: <DJ67Bq.I0L@bredex.de> Reply-To: nico@bredex.de Organization: Bredex GmbH References: <5yi-CASYmIB@pegasus.RoBIN.de> <49plui$c8a@news.rrz.uni-koeln.de> Date: Wed, 6 Dec 1995 15:07:02 GMT