🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
6 messages
6 total messages Started by Arent Groebner Mon, 27 Nov 1995 23:00
Protected inheritance
#893
Author: Arent Groebner
Date: Mon, 27 Nov 1995 23:00
15 lines
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
#914
Author: Wolfgang Muees
Date: Tue, 28 Nov 1995 18:37
27 lines
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
#960
Author: Nico Josuttis
Date: Wed, 06 Dec 1995 15:07
53 lines
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
#994
Author: Arent Groebner
Date: Sun, 10 Dec 1995 23:24
35 lines
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
#1000
Author: Dietmar Kuehl
Date: Thu, 14 Dec 1995 13:28
24 lines
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
#1071
Author: Nico Josuttis
Date: Thu, 21 Dec 1995 10:54
47 lines
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