Aufgabenblock — AFB I
Zehn Standardaufgaben quer durch das ganze Kapitel — bunt gemischt statt nach Unterkapiteln sortiert: Klassenkarten und Objektkarten lesen, Zustände nach Methodenaufrufen angeben, Kardinalitäten und Vererbungshierarchien ablesen, Listen und überschriebene Methoden verfolgen. Das sind die sicheren Punkte in jeder Klausur zur Objektorientierung.
Eine Playlist-App verwendet die folgende Klasse. Entnehmen Sie der Klassenkarte, wie viele Parameter der Konstruktor hat und wie viele der Methoden Anfragen bzw. Aufträge sind.
- - titel: Zeichenkette
- - interpret: Zeichenkette
- - dauerSek: Ganzzahl
- - favorit: Wahrheitswert
- c Song(titel: Zeichenkette, interpret: Zeichenkette, dauerSek: Ganzzahl)
- + getTitel(): Zeichenkette
- + getDauerSek(): Ganzzahl
- + istFavorit(): Wahrheitswert
- + markieren()
- + setDauerSek(dauerSek: Ganzzahl)
+.Vollständige Lösung
Der Konstruktor c Song(titel, interpret, dauerSek) hat 3 Parameter. favorit wird nicht übergeben, sondern im Konstruktor auf false gesetzt.
Anfragen (3): getTitel(): Zeichenkette, getDauerSek(): Ganzzahl, istFavorit(): Wahrheitswert — sie haben einen Rückgabetyp.
Aufträge (2): markieren() und setDauerSek(dauerSek: Ganzzahl) — kein Rückgabetyp, sie ändern den Zustand.
Beachte: Für interpret gibt es keinen Getter. Das Attribut ist privat und damit von außen weder lesbar noch änderbar — ob das so gewollt ist, müsste man im Entwurf klären.
Ein Onlineshop ist so modelliert:
- - name: Zeichenkette
- - bestellungen: DynArray<Bestellung>
- - datum: Zeichenkette
- - positionen: DynArray<Position>
- - menge: Ganzzahl
- - artikel: Artikel
- - preis: Fließkommazahl
Nennen Sie die gesuchten Anzahlen.
1..* heißt „mindestens eins, nach oben offen“.Vollständige Lösung
Eine Position kennt genau 1 Artikel. Eine Bestellung hat mindestens 1 Position (1..*). Referenzattribute haben Kunde (bestellungen), Bestellung (positionen) und Position (artikel) — also 3 Klassen; Artikel kennt niemanden.
Beachte: Das Diagramm sagt nicht, zu wie vielen Bestellungen ein Kunde-Objekt gehört — Rückrichtungen sind nicht modelliert.
Die Methode kaffeeZubereiten() verbraucht 14 g Bohnen und erhöht becher um 1 — aber nur, wenn noch mindestens 14 g vorhanden sind. auffuellen(gramm) erhöht den Bohnenvorrat.
Kaffeeautomat k = new Kaffeeautomat(40); k.kaffeeZubereiten(); k.kaffeeZubereiten(); k.kaffeeZubereiten(); k.auffuellen(30); k.kaffeeZubereiten();
Geben Sie die Attributwerte des Objekts k nach allen Aufrufen an.
bohnenGramm und becher fortschreiben.bohnenGramm >= 14 nicht erfüllt ist?Vollständige Lösung
Die Methode im Quelltext:
public class Kaffeeautomat {
private int bohnenGramm;
private int becher;
public Kaffeeautomat(int bohnenGramm) {
this.bohnenGramm = bohnenGramm;
becher = 0;
}
public void kaffeeZubereiten() {
if (bohnenGramm >= 14) {
bohnenGramm = bohnenGramm - 14;
becher = becher + 1;
}
}
public void auffuellen(int gramm) {
bohnenGramm = bohnenGramm + gramm;
}
public int getBohnenGramm() {
return bohnenGramm;
}
public int getBecher() {
return becher;
}
}
Ablauf: 40 g / 0 → 26 g / 1 → 12 g / 2 → dritter Aufruf: 12 < 14, nichts passiert → auffüllen: 42 g / 2 → 28 g / 3.
- bohnenGramm = 28
- becher = 3
Typischer Fehler: 4 Becher und 0 g — dann wurde die Bedingung im dritten Aufruf übersehen.
- bohnenGramm = 40
- becher = 0
