TU Wien:Programmierpraxis UE (Reiter)/WS2014 Test3 Transporter

Aus VoWi
Zur Navigation springen Zur Suche springen

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:

  • Autobusse haben 3 Sitzplätze und 3 Stehplätze
  • PersonenWaggons 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.