TU Wien:Programmierpraxis UE (Reiter)/WS2014 Test3 Transporter
3. Test
1. Aufgabe[Bearbeiten | Quelltext bearbeiten]
(45 Punkte)
Erstellen Sie ein Programm für das erstellen von Transportern für Logistiik un den Personenverkehr, wobei folgendes gilt:
Transporter
Es gibt zwei Arten von Transporter-Typen: PersonenTransporter und LastTransporter. von diesen Typen können keine Instanzen gemacht werden, sie definieren jedoch die Gemeinsamkeiten der konkreten Transporter gemäß Typus.
- PersonenTransporter sind konkret:
- Autobus-se
- PersonenWagons in Zügen
- LastTransporter sind konkret:
- Laster
- FrachtWagons in Zügen
Jeder konkrete Transporter hat ein Basisgewicht (int), ein Kennzeichen (String) und die allen Transportern gemeinsamen Methoden int getWeight(), die das Gesamtgewicht des Transporters zurückgibt, und String getInfo(), die eine textuelle Repräsentierung des Transporters zurückgibt.
Die Methode int GetWeight() gibt die Summe aus dem Basisgewicht + der Summe des Gewichts aller Personen (bzw. Container), die sich im Transporter befinden, zurück.
Die Methode String getInfo() gibt in einer Zeile immer das Kennzeichen, sowie bei Personentransportern noch dazu die Information, wieviele Sitz- bzw. Steh-Plätze belegt sind, zurück. Zum Beispiel:
- w-last-1
- w-auto-2 1/3 sitzen 3/3 stehen
Das Kennzeichen soll als Parameter dem Konstruktor bei der Instanziierung des konkreten Transporters übergeben werden. Das Basisgewicht soll vorgegeben und unveränderbar sein, wie folgt:
- Laster wiegen 3000 kg
- Autobusse wiegen 2000 kg
- PersonenWaggons und FrachtWaggons wiegen jeweils 5000 kg
Erstellen Sie die Klasse Transporter
, und die Klassen PersonenTransporter
und LastTransporter, die die beschriebene Funktionalität haben. Mehr Details zur Funktionalität sind unten angeführt.
PersonenTransporter
Jeder
PersonenTransporter
hat Sitzplätze und Stehplätze. Die Anzahl der Sitz- und Stehplätze wird vom konkreten Typ des Transporters bestimmt, wie folgt:
Autobus
se haben 3 Sitzplätze und 3 Stehplätze
PersonenWaggon
s haben 5 Sitzplätze und 1 Stehplatz
Die Anzahl der Sitz- und Stehplätze ist für alle konkreten Transportertypen gleichund kann nicht verändert werden (d.h. alle Autobusse haben die selbe anzahl an Plätzen).
Jeder PersonenTransporter
hat folgende Methoden:
boolean addPerson(Person p)
- Person p wird auf den nächsten freien Sitzplatz gesetzt. Falls es keinen Sitzplatz mehr gibt, aber noch freie Stehplätze gibt, dann nimmt die Person
einen Stehplatz ein.Diese Methode gibt "true" zurück, falls die Person einen Platz gefunden hat, sonst "false".
void removePerson(Person p)
- Person p verlässt den PersonenTransporter
, somit wird der von ihr besetzte Platz wieder frei.
TIPP:die Plätze werden in Mengen gespeichert, zu denen Personen hinzugefügt, bzw. entfernt werden können. Finden Sie ein passendes Format dafür!
Person
Die Klasse Person
ist bereits vollständig vorgegeben. Die Signatur des Konstruktors lautet: public Person(int weight)
; die Klasse hat ein öffentliches Attribut public int weight
, das das Gewicht der Person speichert.
LastTransporter
Jeder LastTransporter
hat einen LAderaum, der Platz für einen Container
hat.
Die Container
-Klasse ist vollständig und kompiliert vorgegeben. Die Klasse hat einen leeren Konstruktor und eine öffentliche Klassenkonstante int weight
.
Züge
Waggons in Zügen können aneinander gekoppelt werden. Erstellen Sie dafür das Interface Koppelbar
, welches folgende Methode vorschreibt:
- bindToLast - koppelt den durch Parameter übergebenen Waggon an das Ende des Zuges an.
Realisieren Sie die konkrete Funktionalität, die das Interface vorschreibt, damit Waggons aneinander gehängt werden können.
ACHTUNG: Der Zug ist im Fuhrpark als Kette von Waggons gespeichert- um das Gesamtgewicht des Zuges zu berechnen muss das Gewicht aller Waggons zusammengezählt werden! bei getWeight() und bei getInfo() kann davon ausgegangen werden, dass keine FrachtWaggons zwischen PersonenWaggons vorkommen.
Testklasse
Zum Testen steht Ihnen die Klasse T3_Jan15.java zur Verfügung. Dort wird zunächst ein Fuhrpark erstellt, danach Personen in die PersonenTransporter des Fuhrparks gesetzt. Danach werden alle Personen mit Namen "Carl" aus den Transportern wieder rausgenommen. Erwartetes Output:
- a)
- w-last-1
- Gesamtgewicht Fuhrpark: 3000
- b)
- w-last-1
- w-auto-1: 0/3 sitzen, 0/3 stehen
- Gesamtgewicht Fuhrpark: 5000
- c)
- w-last-1
- w-auto-1: 0/3 sitzen, 0/3 stehen
- w-wagg-1: 0/5 sitzen, 0/1 stehen
- w-wagg-2: 0/5 sitzen, 0/1 stehen
- w-wagg-3: 0/5 sitzen, 0/1 stehen
- Gesamtgewicht Fuhrpark: 20000
- d)
- w-last-1
- w-auto-1: 3/3 sitzen, 3/3 stehen
- w-wagg-1: 4/5 sitzen, 0/1 stehen
- w-wagg-2: 0/5 sitzen, 0/1 stehen
- w-wagg-3: 0/5 sitzen, 0/1 stehen
- Gesamtgewicht Fuhrpark: 20630
- e)
- w-last-1
- w-auto-1: 1/3 sitzen, 2/3 stehen
- w-wagg-1: 3/5 sitzen, 0/1 stehen
- w-wagg-2: 0/5 sitzen, 0/1 stehen
- w-wagg-3: 0/5 sitzen, 0/1 stehen
- Gesamtgewicht Fuhrpark: 20290
ACHTUNG: Output "e" kann leicht anders sein, aber Gesamtgewicht muss stimmen, und die Anzahl der Personen muss 6 sein.
- Schreiben Sie entsprechende Klassen/Interfaces, achten Sie hierbei auf korrekte Typenbezeichnungen (Vererbung). Vermeiden Sie dabei doppelten Code und nuten Sie Dateinamen ohne Sonderzeichen. Erstellen Sie die entsprechenden Dateien im Verzeichnis "aufgabe1/impl" und speichern Sie darin Ihre Implementierung. Sie können zum Testen die mitgelieferte ausführbare Klasse nutzen, ihr Inhalt wird nicht bewertet.Sie finden dort auch eine beispielhafte Nutzung der Klassen.