Zum Inhalt springen

Sinn von protected Ableitung ?


Empfohlene Beiträge

Geschrieben

Hallo,

erstens habe ich das Problem, dass ich den Sinn einer private Ableitung nicht 100% - ig verstehe. Zweitens verstehe ich den Sinn einer protected Ableitung überhaupt nicht. Ich habe oft gelesen, dass es keinen Sinn macht aber warum hat irgenwie keiner erklärt.

Ich weiß es ist keine einfache Frage...

Vielleicht kann jemand versuchen es zu erklären, oder wir werfen zumindest unser Wissen zusammen.

Danke!

Geschrieben
Hallo,

erstens habe ich das Problem, dass ich den Sinn einer private Ableitung nicht 100% - ig verstehe. Zweitens verstehe ich den Sinn einer protected Ableitung überhaupt nicht.

Danke!

"public", "private" und "protected" verändern die Sichtbarkeit von Klassenfunktionen und Klassenvariablen. Für ein gutes Design ist das zwingend, denn nur so können in einer Klasse z.B. Zustandsvariablen verborgen und ihre Änderung auf direktem Weg von außen verhindert werden. "protected" ist eine Abschwächung von "private" in der Hinsicht, dass abgeleitete Klassen vollen Zugriff haben, während "private" wirklich privat bedeutet und auch abgeleiteten Klassen keinen Zugriff haben.

Genaueres bitte in einem Buch nachlesen, alles hier auf die Schnelle zu wiederholen lohnt IMO nicht :)

Ich habe oft gelesen, dass es keinen Sinn macht aber warum hat irgenwie keiner erklärt.

Das ist definitiv falsch, es ist sogar sehr sinnvoll für ein gutes Klassendesign! Ich würde sogar sagen: zwingend!

Geschrieben
Das ist definitiv falsch, es ist sogar sehr sinnvoll für ein gutes Klassendesign! Ich würde sogar sagen: zwingend!
Ich kann mir kein Beispiel vorstellen, bei dem durch protected-Ableitung ein gutes Klassendesign zustande kommt. Hast du eins?

@Idexe:

Für public- und private-Vererbung gibt es eine einfache Modellentsprechung. public-Vererbung stellt eine "ist ein"-Beziehung dar, private-Vererbung eine "ist implementiert mit Hilfe von"-Beziehung.

Scott Meyers schreibt in "Effective C++", Item 35:

[...] and no one seems to know what protected inheritance is supposed to mean.

Schau mal in das Buch rein, ist sehr zu empfehlen. Besonders die Items 35 und 42 sind in dieser Beziehung interessant.

Geschrieben
Ich kann mir kein Beispiel vorstellen, bei dem durch protected-Ableitung ein gutes Klassendesign zustande kommt. Hast du eins?

"protected" ist immer dann für Variablen und Funktionen sinnvoll, wenn Performance eine Rolle spielt oder wirklich nur abgeleitete Klassen auf interne Datenstrukturen zugreifen sollen, aber kein Benutzer der Klassenbibliothek von außen. Natürlich kann man darüber vortrefflich streiten, ich finde protected jedoch in vielen Fällen sinnvoll, da es für Erweiterungen durch Vererbung mehr Spielraum lässt ohne in den Code der Basisklasse selbst eingreifen zu müssen.

Neuere Sprachen wie C# unterstützen noch sealed, wodurch man die letzte Klasse in seiner Hierarchie abschotten kann, so dass kein anderer Entwickler auf die Idee kommt sich durch Vererbung Zugriff auf interne Strukturen zu verschaffen. In C++ käme man dem am nächsten, indem man die letze Ableitung in der Kette mit "private" vor dem Namen der Basisklasse modifiziert. Vor dem Ableiten von Klassen weiter oben in der Hierarchie schützt es allerdings auch nicht.

Kurzbeispiel (nicht vollständig ausformuliert): Klasse Bitmap mit einem protected Zeiger auf den Speicherblock mit den Bilddaten und Integers für Angaben wie z.B. Breite und Höhe. Abgeleitete Klassen wie "BitmapRLE" oder "BitmapJPEG" sollen darauf schnell zugreifen können (Bildinhalte neu setzen, Breite und Höhe des Bildes verändern), Verwender der Klassen (die eigentliche Anwendung) sollen jedoch Daten wie Breite und Höhe nur auslesen können und auf die Bitmap nur indirekten Zugriff (GetPixel Funktion) erhalten. Hier spricht IMO nichts gegen die Verwendung von protected, sie ist sogar erforderlich.

Geschrieben
Bubble, es geht nicht um protected-Member oder -Methoden, es geht um protected-Vererbung:


class Derived : [b]protected[/b] Base

{

    ...

Der Gedanke kam mir auch grade, aber da war's Posting schon abgesetzt :hells:

Das Feature ist in der Tat diskutiert, manche sagen es ist der Vollständigkeit halber erlaubt. Oder ein Feature mehr, dass, falls es einmal für ein Klassendesign nützlich ist, zur Verfügung steht.

Letztlich kann man aber auch hier Fälle konstruieren in denen es Verwendung finden kann. Dies soll aber nicht bedeuten, dass man das gleiche Problem nicht auch anders lösen könnte.

Eine durch Ableitung erfolgte Spezialisierung kann bisher zur Verfügung stehende Funktionen und Variablen überflüssig oder im neuen Zusammenhang sogar unlogisch machen. In dieser Hinsicht kann es sinnvoll sein sie zu verbergen. So kann es auch sein, dass auf die Daten einer vererbten Klasse nur mittels der Schnittstellen dieser Klasse zugegriffen werden soll.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...