Übungsaufgaben
Dreißig Übungen in gemischter Reihenfolge — du klickst, ziehst, ordnest, rechnest und knobelst. Jede Übung gibt dir sofort eine Rückmeldung, und zu jeder Aufgabe gibt es zwei gestufte Tipps: Der erste zeigt die Richtung, der zweite den entscheidenden Schritt. Die Chips zeigen das Anforderungsniveau: AFB I heißt wiedergeben und direkt anwenden, AFB II selbst entscheiden und verknüpfen, AFB III begründen, beurteilen oder eine Falle durchschauen. Aufgaben mit dem Chip Mix verbinden Wissen aus früheren Unterkapiteln, bei Trick steckt eine Falle drin. Fährst du über ein unterstrichenes Arbeitswort, siehst du, was es genau von dir verlangt.
Ein Team entwirft die Ticketbuchung für ein Kino. Im Klassendiagramm steht:
- - film: Zeichenkette
- - saal: Ganzzahl
- - frei: Ganzzahl
- c Vorstellung(film: Zeichenkette, saal: Ganzzahl, plaetze: Ganzzahl)
- + buchen(anzahl: Ganzzahl)
- + stornieren(anzahl: Ganzzahl)
- + getFrei(): Ganzzahl
- + getFilm(): Zeichenkette
- + istAusverkauft(): Wahrheitswert
Nenne in jeder Zeile das Zeichen, das die beiden Anzahlen aus dem Diagramm richtig vergleicht. Methoden sind hier immer die öffentlichen Methoden ohne den Konstruktor.
-
MethodenAttribute
-
AufträgeAnfragen
-
KonstruktorenKlassen
-
Parameter von buchenParameter von getFilm
-
AttributeParameter des Konstruktors
Für eine Tauschbörse gebrauchter Schulbücher steht im Pflichtenheft:
- Ein Angebot hat einen Buchtitel und einen Preis in Euro und gehört zu einer anbietenden Person.
- Der Preis eines Angebots kann gesenkt werden.
- Man kann abfragen, ob ein Angebot schon reserviert ist.
- Anbietende können nach einem Verkauf mit 1 bis 5 Sternen bewertet werden.
- Die Börse zeigt alle Angebote bis zu einem Höchstpreis an.
Das Team hat daraus diesen Entwurf gemacht:
- - angebote: Reihung vom Typ Angebot
- c Boerse()
- + hinzufuegen(a: Angebot)
- + guenstigeZeigen(hoechstpreis: Ganzzahl)
- - titel: Zeichenkette
- - preis: Ganzzahl
- - reserviert: Wahrheitswert
- - anbieter: Anbieter
- c Angebot(titel: Zeichenkette, preis: Ganzzahl, anbieter: Anbieter)
- + getTitel(): Zeichenkette
- + getPreis(): Ganzzahl
- + preisSenken(betrag: Ganzzahl)
- + reservieren()
- + istReserviert(): Wahrheitswert
- + getAnbieter(): Anbieter
- - name: Zeichenkette
- - klasse: Zeichenkette
- c Anbieter(name: Zeichenkette, klasse: Zeichenkette)
- + getName(): Zeichenkette
Vereinbart ist: Für jede Anfrage (Methode mit Rückgabetyp) der Klasse Angebot werden 2 Testfälle festgelegt, für jeden Auftrag (ohne Rückgabetyp) 3. Plane damit die Tests und prüfe den Entwurf auf Vollständigkeit.
- Wie viele Klassen enthält der Entwurf? Klassen
-
Wie viele öffentliche Methoden (ohne Konstruktor) umfasst die Schnittstelle der Klasse
Angebot? Methoden -
Wie viele Testfälle werden für die Klasse
Angebotfestgelegt? Testfälle - Wie viele der fünf Anforderungen lassen sich mit diesem Entwurf noch nicht umsetzen? Anforderungen
Laut Pflichtenheft kostet der Eintritt im Freibad: unter 6 Jahren 0 €, von 6 bis 17 Jahren 3 €, von 18 bis 64 Jahren 6 €, ab 65 Jahren 4 €. Ein Teammitglied hat die Methode mit einer Mehrfachverzweigung implementiert:
public class Freibadkasse {
public int preis(int alter) {
if (alter <= 6) {
return 0;
} else if (alter < 18) {
return 3;
} else if (alter > 65) {
return 4;
}
return 6;
}
}
Vor der Implementierung hat das Team diese Testfälle festgelegt (Eingabe → erwartetes Ergebnis):
k.preis(5) // erwartet 0 k.preis(6) // erwartet 3 k.preis(17) // erwartet 3 k.preis(18) // erwartet 6 k.preis(64) // erwartet 6 k.preis(65) // erwartet 4 k.preis(70) // erwartet 4
Überprüfe die Methode mit den sieben Testfällen: Wie viele davon schlagen fehl?
alter <= 6 müsste alter < 6 heißen und alter > 65 müsste alter >= 65 heißen. Genau deshalb legt man Testfälle direkt an die Grenzwerte aus dem Pflichtenheft. Wer nur 5, 10, 30 und 70 testet, findet keinen der beiden Fehler.