Datenkapselung

K

kneitzel

Gast
Die Bewertung ist zuerst nur eine Beschreibung. Es geht aber bei der Bewertung nicht darum zu erläutern, was protected oder public machen .... das kann zwar mit enthalten sein, aber das bewertet erst einmal nichts.

Bewertung könnte also etwas sein wie:
Durch das zugreifbar machen der Instanzvariablen über public oder protected gibt es Abhängigkeiten auf dieses Implementationsdetail. Änderungen an der Speicherung der Daten erfordern dann weitergehende Änderungen an Abhängigen Klassen (z.B. ElternKatze). Daher ist die Einführung von Gettern/Settern besser: die Art und Weise, wie die Daten gespeichert werden, kann jederzeit angepasst werden. Lediglich das nach außen definierte Interface muss beibehalten werden. Diese können aber jederzeit in Ihrer Funktionalität angepasst werden (also z.B. Speichern der Farbe als String und Getter/Setter wandeln von int zu String und umgekehrt).
 

temi

Top Contributor
Durch das zugreifbar machen der Instanzvariablen über public oder protected gibt es Abhängigkeiten auf dieses Implementationsdetail. Änderungen an der Speicherung der Daten erfordern dann weitergehende Änderungen an Abhängigen Klassen (z.B. ElternKatze). Daher ist die Einführung von Gettern/Settern besser: die Art und Weise, wie die Daten gespeichert werden, kann jederzeit angepasst werden. Lediglich das nach außen definierte Interface muss beibehalten werden. Diese können aber jederzeit in Ihrer Funktionalität angepasst werden (also z.B. Speichern der Farbe als String und Getter/Setter wandeln von int zu String und umgekehrt).
Wobei es darum geht einer Unterklasse den Zugriff zu ermöglichen und nicht jedem. Insofern wären hier protected getter/setter eine bessere Wahl (auch wenn das gewöhnlich nicht der Fall ist).

Außerdem würde ich public und protected nicht zusammen bewerten. Das ist schon ein deutlicher Unterschied in der Sichtbarkeit.

EDIT: Da es sich hier auch um eine Anfängeraufgabe handelt, gehe ich davon aus, dass hier als beste Lösung "protected" oder "package-private" gesucht ist. Dennoch hast du mit deiner Ausführung natürlich recht. Auf diese Weise würde die Elternklasse ihre Implementierungsdetails gegenüber der Kindklasse nicht verbergen. Wobei public getter/setter die Situation auch nicht verbessern würden.
 
Zuletzt bearbeitet:

Codix

Bekanntes Mitglied
Hast du dir die Tabelle weiter oben mal angeschaut?

Bei protected können die Variablen aus dem selben Paket und aus abgeleiteten Klassen verändert werden.

getter/setter haben natürlich ebenfalls Sichtbarkeitsmodifizierer. Sie können public sein oder auch private (sinnlos) package-private oder protected.

Geht man von public getter/setter aus, dann würde mir eine bessere Lösung einfallen als 3. Immer daran denken es geht um Kapselung und mehr Kapselung ist besser!

@temi: schlag einfach eine bessere Bewertung vor, wenn du eine bessere hast. Das ich mich bemüht habe, habe ich ja schon gezeigt. Nun welche Expertenbewertung schlägst du vor?
 

temi

Top Contributor
Nun welche Expertenbewertung schlägst du vor?
Lies einfach, es steht alles da. Eine beste Lösung gibt es wohl auch nicht, jede hat Vor- und Nachteile. Aber genau darum geht es bei der Bewertung.

Was ich sicher bewerten kann:

Die Instanzvariablen public zu machen, ist eine schlechte Lösung, weil dadurch voller Zugriff für Alle auf die internen Variablen möglich ist. Neben dem Sicherheitsproblem, das jeder die Werte beliebig ändern kann, kann auch die Klasse nicht geändert werden (z.B. andere Typen verwendet werden) ohne Änderung an den abhängigen Klassen machen zu müssen.
 

Codix

Bekanntes Mitglied
Lies einfach, es steht alles da. Eine beste Lösung gibt es wohl auch nicht, jede hat Vor- und Nachteile. Aber genau darum geht es bei der Bewertung.

du wolltest mal wissen wie man Parameter hier mit dem Konstruktor übergeben kann:

Katze k = new Katze(1,6);

Und in kostruktor katze werden jetzt die variablen auf 1/ 6 geändert z.b.
 

temi

Top Contributor
Du wolltest mal wissen wie man Parameter hier mit dem Konstruktor übergeben kann:

Katze k = new Katze(1,6);

Und in kostruktor katze werden jetzt die variablen auf 1/ 6 geändert z.b.

Es geht allerdings darum, dass die Klasse ElternKatze auf die Variablen von Katze zugreifen soll und Zugriff ist nicht nur einmaliges Schreiben beim Erzeugen einer Instanz. Du kannst zwar einen Konstruktor von ElternKatze schreiben, der über den Konstruktor von Katze diese Werte einmalig setzt, aber du kannst sie weder ändern noch lesen.
 
K

kneitzel

Gast
Also das war auch nur ein schneller Schuss einer Bewertung die zeigen soll, wie es prinzipiell aussehen könnte. Das hätte ich deutlicher machen müssen.

Und ja: Welcher Zugriff genommen wird könnte da auch noch betrachtet werden. Aber weiterhin alle Punkte des Wikipedia Artikels.

Dann kommt man zu einer guten Beurteilung. Denn da gehören ja auch kritische Punkte dazu. Getter / Setter zu schreiben macht ja etwas mehr Arbeit und so ....

Also um es noch einmal deutlich zu machen: Bewertung von Zu Fuß gehen, Fahrrad nutzen oder Auto nutzen um einen Brief in einen 5m entfernten Briefkasten einzuwerfen (Auto ist in der gemieteten Garage 100m entfernt, Fahrrad im Fahrradkeller der leider schwer zugänglich ist, ....) ...
Da ist eine Aussage wie "Fahrrad hat zwei Räder, das Hinterrad wird mit einer Kette über Pedale angetrieben und das Auto hat 4 Räder und ein Verbrennungsmotor, hat die Farbe Schwarz, .... " nett, aber natürlich keine Bewertung.

Bewertung ist aber die Betrachtung von:
- Zeit (wie lange dauert es)
- Aufwand (wie weit muss ich gehen, was muss ich alles machen?)
- Umwelt (Schädigung durch Abgase und so ...)
...

Man kann viel Bewerten, aber nur der ist Zustand sagt nichts aus.

Anton hat 100€.
Das ist ein Fakt, aber keine Bewertung.
Ist Anton 3 Jahre alt und will dieses Geld in Eis investieren, dann ist das eine andere Bewertung (so viel Eis kann er gar nicht essen, zu viel Geld!) als wenn Anton mit dem Geld unterwegs ist zum Notar um da ein Eigenheim in bar zu bezahlen (100€? Grundstück mit Haus ist dafür kaum zu kriegen ...)

Daher meine Bewertung nur als ersten Hinweis nehmen, in welche Richtung es gehen müsste. Und es führt kein Weg daran vorbei: um etwas in Hinsicht auf die Datenkapselung zu bewerten muss man verstehen, was Datenkapselung ist....
 

Ähnliche Java Themen

Neue Themen


Oben