Datenkapselung

Diskutiere Datenkapselung im Java Basics - Anfänger-Themen Bereich.
C

Codix

Hallo zusammen, hier sind 3 Aufgaben aus dem Bereich Datenkapselung.

Könnt Ihr mir bitte helfen, ob ich bei den Lösungsvorschlägen richtig liege:

Aufgabe1:

Sie haben folgende Klassenvereinbarung:

public class Elefant{
int gewicht;
int groesse;
}

Die Klasse Elefant befindet sich in einem Paket tiere. Kann eine andere Klasse, die sich im Paket meinetests befindet, direkt auf die Werte der Instanzvariablen gewicht und groesse der Klasse Elefant zugreifen? Begründen Sie bitte Ihre Antwort.

===

Lösungsvorschlag1:

es ist ja public class, also gilt: Unterklasse aus anderen Paketen darf zugreifen.

wenn sich also im Paket meinetests eine Unterklasse des public class Elefant befindet, dann kann sie darauf zugreifen.

ansonsten ist der Zugriff nicht nicht möglich.

=============================================================================================================

Aufgabe2:

Sie haben folgende Klassenvereinbarungen in getrennten Quelltextdateien:

package tiere;

public class Katze {

private int gewicht;

private int farbe;

private int groesse;

}

package tiere;

public class ElternKatze extends Katze {

private int kinderzahl;

}

Die Klasse ElternKatze soll auf die Instanzvariable gewicht der Klasse Katze zugreifen können. Welche Möglichkeiten kennen Sie, diesen Zugriff zu ermög
lichen? Bewerten Sie diese Möglichkeiten bitte auch. Achten Sie dabei besonders auf die Datenkapselung.

Ein Tipp: Sie sollten mindestens drei verschiedene Varianten nennen können. Zwei hängen direkt mit der Vereinbarung der Instanzvariablen zusammen, die dritte dagegen nicht.

===

Lösungsvorschlag2: Instanzvariablen sind private. Damit die Subklassen darauf zugreifen können, müssen die Instanzvariablen entweder protected oder public sein - oder du brauchst eine get-Methode dafür.

also auf protected oder public ändern:

protected int gewicht;

oder

public int gewicht;

=============================================================================================================

Aufgabe3:

Bitte sehen Sie sich die folgende Klassenvereinbarung genau an.

public class Ziege {

private int gewicht;

private char geschlecht;

//ein Konstruktor

private Ziege(int gewicht, char geschlecht) {

this.gewicht = gewicht;

this.geschlecht = geschlecht;

}…


Können Sie in einem Quelltext in einem anderen Paket eine Instanz der Klasse Ziege erstellen? Begründen Sie bitte Ihre Antwort und nennen Sie gegebenenfalls die Stellen im Quelltext der Klasse Ziege, die geändert werden müssten.

===

Lösungsvorschlag3:

char muss geändert werden, dieser Datentyp ist nicht korrekt.
char gilt ja nur für einzelne Character, also einzelne Buchstaben.
es muss: "private int geschlecht" heissen.

Vom anderen Paket aus auf die private Instanzvariable Ziege zugreifen.
es muss heissen: protected oder public Ziege heissen. So kann man auf die Instanzvariable Ziege zugreifen.

korregierter Quelltext:

public class Ziege {

private int gewicht;

private int geschlecht;

//ein Konstruktor

public Ziege(int gewicht, int geschlecht) {

this.gewicht = gewicht;

this.geschlecht = geschlecht;

}…



Danke für die Antworten im Voraus.

Codix
 

Anhänge

T

temi

es ist ja public class, also gilt: Unterklasse aus anderen Paketen darf zugreifen.

wenn sich also im Paket meinetests eine Unterklasse des public class Elefant befindet, dann kann sie darauf zugreifen.

ansonsten ist der Zugriff nicht nicht möglich.
Du hast dabei berücksichtigt, dass die Klasse Elefant im Package "tiere" ist?
 
T

temi

Lösungsvorschlag2: Instanzvariablen sind private. Damit die Subklassen darauf zugreifen können, müssen die Instanzvariablen entweder protected oder public sein - oder du brauchst eine get-Methode dafür.

also auf protected oder public ändern:

protected int gewicht;

oder

public int gewicht;
Was ist deine Begründung dafür, warum du "protected" und nicht getter-Methoden verwendest?
 
T

temi

char muss geändert werden, dieser Datentyp ist nicht korrekt.
char gilt ja nur für einzelne Character, also einzelne Buchstaben.
es muss: "private int geschlecht" heissen.

Vom anderen Paket aus auf die private Instanzvariable Ziege zugreifen.
es muss heissen: protected oder public Ziege heissen. So kann man auf die Instanzvariable Ziege zugreifen.
Was haben denn die beiden chars mit der Erzeugung von Instanzen zu tun?

Ein Geschlecht kann man ja durchaus durch einzelne Buchstaben ausdrücken, siehe m/w/d.

private Ziege(int gewicht, char geschlecht) ist keine Instanzvariable, sondern?
 
C

Codix

Was haben denn die beiden chars mit der Erzeugung von Instanzen zu tun?

Ein Geschlecht kann man ja durchaus durch einzelne Buchstaben ausdrücken, siehe m/w/d.

private Ziege(int gewicht, char geschlecht) ist keine Instanzvariable, sondern?
@temi: ich dachte in dem Fall nicht daran, dass char geschlecht als w/m/d zu deuten ist. Es gilt doch eigentlich, dass char im Code mit einem Buchstaben zu schreiben ist. deswegen ist der Ausdruck char geschlecht ein Syntaxfehler. Diesen Datentyp darf man der Variable geschlecht nicht zuweisen.
Würde es char m oder char w, etc. heissen, dann wäre es syntaktisch korrekt.
Würden wir das Geschlecht schreiben wollen, dann müssten wir int geschlecht schreiben.
Oder bringe ich etwas durcheinander?

===

Zitat temi: "private Ziege(int gewicht, char geschlecht) ist keine Instanzvariable, sondern?"

@temi: private Ziege ist eine Variable mit Eigenschaften int gewicht und char geschlecht
 
mihe7

mihe7

Wieso machst Du drei Lösungsvorschläge? Das hört sich eher nach raten an.

Du musst hier berücksichtigen, dass vor den Variablen kein Zugriffsmodifizierer steht. Herauszufinden, was das zu bedeuten hat, ist nun Deine Aufgabe :)
 
C

Codix

Wieso machst Du drei Lösungsvorschläge? Das hört sich eher nach raten an.

Du musst hier berücksichtigen, dass vor den Variablen kein Zugriffsmodifizierer steht. Herauszufinden, was das zu bedeuten hat, ist nun Deine Aufgabe :)
@mihe7
Wie soll ich denn die 3 Antworten auf 3 Aufgaben nennen. Was ist dein Vorschlag?
Über welche Aufgabe schreibst du => "Du musst hier berücksichtigen, dass vor den Variablen kein Zugriffsmodifizierer steht."?
 
T

temi

Diesen Datentyp darf man der Variable geschlecht nicht zuweisen.
Würde es char m oder char w, etc. heissen, dann wäre es syntaktisch korrekt.
Würden wir das Geschlecht schreiben wollen, dann müssten wir int geschlecht schreiben.
Oder bringe ich etwas durcheinander?
Ich habe keine Ahnung was du damit sagen möchtest. Du kannst (im Rahmen der Vorgaben von Java) jede Variable so nennen wie du möchtest. Es ist ausdrücklich auch erlaubt eine Variable vom Typ char z.B. "schlumpf" zu nennen.
 
C

Codix

Ich habe keine Ahnung was du damit sagen möchtest. Du kannst (im Rahmen der Vorgaben von Java) jede Variable so nennen wie du möchtest. Es ist ausdrücklich auch erlaubt eine Variable vom Typ char z.B. "schlumpf" zu nennen.
soweit ich weiss: nein. char & int gehören den 8 wichtigsten Datentypen an. datentyp char darf nur einen Buchstaben als Variable haben & Datentyp int oder string mehrere Buchstaben. Google: "8 Datentypen Java"
 
C

Codix

Der Zugriffsmodifizierer der Klasse ist eine Sache. Hier geht es in erster Linie um die Instanzvariablen. Die erlauben welchen Zugriff?

Genau diese (die Erste).
ja stimmt, das habe ich übersehen. Also es kommt drauf an welchen Zugriffsmodifizierer wir wählen.

public = wir können von überall zugreifen.
protected = wir könnten von einer Unterklassen aus einem anderen Paket auf die Variablen zugreifen.

package & private nutzen uns hier nichts.

oder?!
 
T

temi

soweit ich weiss: nein. char & int gehören den 8 wichtigsten Datentypen an. datentyp char darf nur einen Buchstaben als Variable haben & Datentyp int oder string mehrere Buchstaben. Google: "8 Datentypen Java"
Eine Variable vom Typ char enthält ein einzelnes Zeichen, richtig, aber das hat ja nichts mit dem Namen der Variablen zu tun. Du kannst ja auch eine Variable vom Typ int, die nur Zahlen enthält, mit "Buchstabe" bezeichnen.
 
T

temi

Eine Variable vom Typ char enthält ein einzelnes Zeichen, aber das hat ja nichts mit dem Namen der Variablen zu tun. Du kannst ja auch eine Variable vom Typ int, die nur Zahlen enthält, mit "Buchstabe" bezeichnen.
Du sollst nichts wählen.
Kann eine andere Klasse, die sich im Paket meinetests befindet, direkt auf die Werte der Instanzvariablen gewicht und groesse der Klasse Elefant zugreifen? Begründen Sie bitte Ihre Antwort.
 
C

Codix

Na, es handelt sich um die Klasse Ziege. Aber deine Antwort trifft es nicht. Lies noch mal nach
Java:
//ein Konstruktor
private Ziege(int gewicht, char geschlecht)
bitte um Hilfe! Um was handelt es sich denn? Eine Klasse Ziege mit einer Instanzvariable Ziege (Eigenschaften gewicht und geschlecht).
 
Thema: 

Datenkapselung

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben