Thread View: de.comp.lang.c++
6 messages
6 total messages
Started by Arent Groebner
Mon, 27 Nov 1995 23:00
Protected inheritance
Author: Arent Groebner
Date: Mon, 27 Nov 1995 23:00
Date: Mon, 27 Nov 1995 23:00
15 lines
602 bytes
602 bytes
Wer kann dieses Rätsel lösen: Public inheritance: Ist-Beziehung Protected inheritance: ??? Private inheritance: Hat-Beziehung Gruss Arent Arent _____________________________________________________________________ Arent Gröbner Darmstadt, Germany ## CrossPoint v3.02 ##
Re: Protected inheritance
Author: Wolfgang Muees
Date: Tue, 28 Nov 1995 18:37
Date: Tue, 28 Nov 1995 18:37
27 lines
1228 bytes
1228 bytes
Arent, > Wer kann dieses Rätsel lösen: > > Public inheritance: Ist-Beziehung > Protected inheritance: ??? > Private inheritance: Hat-Beziehung > Kein Problem! Protected inheritance: Wenn Du den Benutzer einer Klasse hindern willst, auf Methoden der Basisklasse zuzugreifen (in diesem Sinne wie "private"), aber wenn Du einer Unterklasse noch den Zugriff auf Methoden der Basisklasse erlauben willst. Manche Leute programmieren so einen Fall aber lieber als "Containment", d.h. die Klasse "hat" ein Objekt als Datenmember, und dieses ist dann "protected". MFG Wolfgang -------------------------------------------------------------- > wolfgang@wmsickte.escape.de | Wolfgang Muees +49-5305-685 < > | Am Hohlweg 5, D-38173 Sickte < -------------------------------------------------------------- ## CrossPoint v3.02 R ##
Re: Protected inheritance
Author: 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
Re: Protected inheritance
Author: Arent Groebner
Date: Sun, 10 Dec 1995 23:24
Date: Sun, 10 Dec 1995 23:24
35 lines
1461 bytes
1461 bytes
> 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. Vielen Dank, aber das war doch gar nicht die Frage. Es geht hier nicht darum, wann und wo man private Vererbung einsetzt, sondern wann und wo man protected Vererbung einsetzt. > > _____________________________________________________________________ > Ralf Allar > Allgemeine Informatik > FH-Koeln Abt. Gummersbach Arent _____________________________________________________________________ Arent Gröbner Darmstadt, Germany ## CrossPoint v3.02 ##
Re: Protected inheritance
Author: Dietmar Kuehl
Date: Thu, 14 Dec 1995 13:28
Date: Thu, 14 Dec 1995 13:28
24 lines
1463 bytes
1463 bytes
Hi, Arent Groebner (arent@pegasus.RoBIN.de) wrote: :> Wer kann dieses Rätsel lösen: :> :> Public inheritance: Ist-Beziehung :> Protected inheritance: ??? :> Private inheritance: Hat-Beziehung Steve Clamage hat das ungefaehr folgendermassen ausgedrueckt (uebersetzt nach deutsch und nicht woertlich, da ich das Zitat gerade nicht zur Hand habe; kam diese Woche in comp.std.c++): Protected inheritance ist vorhanden, um konsistent zu bleiben. Ihm ist allerdings keine Anwendung von protected inheritance bekannt. Somit ist protected inheritance "eine Loesung auf der Suche nach einem Problem". Das deckt sich mit meiner Erfahrung: Ich habe bisher noch keine sinnvolle Anwendung von protected inheritance gefunden, wobei ich nicht ausschliessen moechte, dass es keine gibt. -- dietmar.kuehl@uni-konstanz.de http://www.informatik.uni-konstanz.de/~kuehl I am a realistic optimist - that's why I appear to be slightly pessimistic
Re: Protected inheritance
Author: Nico Josuttis
Date: Thu, 21 Dec 1995 10:54
Date: Thu, 21 Dec 1995 10:54
47 lines
2489 bytes
2489 bytes
In article <30d0266f.0@news.uni-konstanz.de>, Dietmar Kuehl <dietmar.kuehl@uni-konstanz.de> wrote: >Hi, >Arent Groebner (arent@pegasus.RoBIN.de) wrote: >:> Wer kann dieses Rätsel lösen: >:> >:> Public inheritance: Ist-Beziehung >:> Protected inheritance: ??? >:> Private inheritance: Hat-Beziehung > >Steve Clamage hat das ungefaehr folgendermassen ausgedrueckt >(uebersetzt nach deutsch und nicht woertlich, da ich das Zitat gerade >nicht zur Hand habe; kam diese Woche in comp.std.c++): > > Protected inheritance ist vorhanden, um konsistent zu bleiben. Ihm > ist allerdings keine Anwendung von protected inheritance bekannt. > Somit ist protected inheritance "eine Loesung auf der Suche nach > einem Problem". > >Das deckt sich mit meiner Erfahrung: Ich habe bisher noch keine >sinnvolle Anwendung von protected inheritance gefunden, wobei ich nicht >ausschliessen moechte, dass es keine gibt. Sorry, aber ich sehe das anders: Protected inheritance ist wie private inheritance eigentlich keine Vererbung, sondern getarnte Verwendung, also eine Hat-Beziehung. Das ist meiner Ansicht nach auch ziemlich klar, da auch protected inheritance wie private inh. die is-a Beziehung (automatische Typumwandlung in die Basisklasse) ausschliesst. Der subtile Unterschied zwischen private und protected ist doch nur, ob geerbte Komponenten bei weiterer Vererbung zugreifbar bleibt. Damit ist der Unterschied so, wie die Entscheidung zwischen private und protected bei neuen Komponenten: wenn man Vererbung erleichtern will, nimmt man protected, sonst private. Somit sind genauso viele Anwendungen fuer protected wie fuer private sinnvoll/denkbar. Merkwuerdigerweise verwenden hier die meisten private, obwohl bei Komponenten oft protected verwendet wird. Oder sehe ich da etwas zu einfach ? -- 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
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads