studyklar
GdI 2 · Probeklausur Teil 1 · Aufgabe 5

Fahrzeug mit eigenem Tank: Objekt im Attribut, toString ohne Getter

Ein Fahrzeug hat einen Tank, und der Tank hat ein Volumen und einen Füllstand. Darum bekommt der Tank eine eigene Klasse. Das Fahrzeug speichert sein Tank-Objekt und fragt es, wie viel Treibstoff da ist. Rechts steht jeweils die Klasse des aktuellen Teils, die Zeilen zum Schritt sind hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 5

Gegeben ist die folgende Klasse:

public class Fahrzeug {    private String marke;    private String kennzeichen;    private double tankvolumen; // in Liter    private double fuellstand; // in Prozent}

Die Klasse soll folgendermaßen geändert und ergänzt werden: Die Attribute „tankvolumen“ und „fuellstand“ sollen aus der Klasse „Fahrzeug“ in eine separate Klasse „Tank“ verschoben werden. Jedes Fahrzeug-Objekt soll das zugehörige Tank-Objekt speichern.

a) Schreiben Sie die geänderte Klasse „Fahrzeug“. Fügen Sie den kanonischen Konstruktor hinzu, der alle Attribute mit Werten versieht.

b) Schreiben Sie die Klasse „Tank“. Sie soll ebenfalls einen kanonischen Konstruktor enthalten.

c) Geben Sie Code an, mit dem man ein Fahrzeug-Objekt und ein damit verbundenes Tank-Objekt erzeugen kann. Geben Sie nur die benötigten Code-Zeilen an, keine umgebende Methode oder Klasse.

d) Schreiben Sie eine toString-Methode für die Klasse „Fahrzeug“. Neben den Attributwerten von marke und kennzeichen des Fahrzeugs soll auch der verfügbare Treibstoff mit ausgegeben werden. Diese wird folgendermaßen berechnet: tankvolumen * fuellstand / 100.0

Geben Sie auch hierfür erforderliche Erweiterungen in der Klasse „Tank“ an. Es soll aber nicht über get-Methoden o. ä. direkt auf die Attributwerte des Tank-Objekts zugegriffen werden.

Gegeben ist eine Klasse Fahrzeug mit vier Attributen. Zwei davon, tankvolumen und fuellstand, beschreiben eigentlich den Tank. Sie ziehen in eine neue Klasse Tank um. Fahrzeug bekommt dafür ein Attribut, das ein Tank-Objekt speichert.

Ein kanonischer Konstruktor ist der Konstruktor mit genau einem Parameter je Attribut, in derselben Reihenfolge. Er setzt jedes Attribut auf den übergebenen Wert.

Merke: Ein Objekt darf ein anderes Objekt als Attribut haben. Was das innere Objekt ausrechnen kann, lässt man es selbst ausrechnen, statt seine Werte von außen zu holen.
  1. a) Fahrzeug mit einem Attribut tank und dem kanonischen Konstruktor.
  2. b) Die Klasse Tank mit ihrem kanonischen Konstruktor.
  3. c) Ein Tank-Objekt und ein Fahrzeug-Objekt damit erzeugen.
  4. d) Tank rechnet den Treibstoff aus; toString in Fahrzeug fragt ihn danach.

Ein Attribut vom Typ Tank

public class Fahrzeug {    private String marke;    private String kennzeichen;    private Tank tank;

marke und kennzeichen bleiben. Statt der beiden double-Attribute steht jetzt private Tank tank;. Eine eigene Klasse ist auch ein Typ: Die Variable tank kann ein Objekt der Klasse Tank aufnehmen.

Genauer: Sie speichert einen Verweis auf das Tank-Objekt, eine Referenz. Das Tank-Objekt selbst liegt woanders im Speicher. Teil c) zeigt das als Bild.

Aus Vorlesung 5, Folie 18 („Attribute, die Objekte enthalten“): Weil Klassen als Typ verwendet werden können, kann ein Attribut wie adresse ein Objekt der Klasse Adresse aufnehmen.

Der kanonische Konstruktor

    public Fahrzeug(String marke, String kennzeichen, Tank tank) {        this.marke = marke;        this.kennzeichen = kennzeichen;        this.tank = tank;    }}

Drei Attribute, also drei Parameter: marke, kennzeichen und tank. Weil Parameter und Attribut gleich heißen, unterscheidet this sie: this.marke ist das Attribut des Objekts, marke allein der Parameter.

Typischer Fehler: tankvolumen und fuellstand als Parameter nehmen. Fahrzeug hat diese Attribute nicht mehr; der kanonische Konstruktor hat einen Parameter je Attribut, also einen Tank.

Aus Vorlesung 5, Folie 5 („Konstruktor“): Der Konstruktor heißt wie die Klasse, hat keinen Rückgabetyp und setzt die Attribute, wenn ein Objekt mit new entsteht.
Noch 8 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Fahrzeug.java

nach Teil a)

Abbildung 1Fahrzeug.java

nach Teil a)

public class Fahrzeug {    private String marke;    private String kennzeichen;    private Tank tank;     public Fahrzeug(String marke, String kennzeichen, Tank tank) {        this.marke = marke;        this.kennzeichen = kennzeichen;        this.tank = tank;    }}
LegendeDie Klasse Fahrzeug nach Teil a).