# Fragen zu Klassen?



## mtY (19. Dez 2013)

Hallo liebe Leute! Ich habe dieses Semester mit dem Informatik Studium begonnen und schaue schon seit einiger Zeit ins Forum, hab mich aber bisher noch nicht registriert. Heute soll sich dieses ändern! Jetzt stehe ich vor einer Aufgabe und weiß nicht wie ich die angehen soll. Erstmal der Originaltext aus der Aufgabenstellung im Spoiler, darunter gebe ich dann mal meinen "Lösungsansatz" an. Ich habe ein Problem diese Übungsaufgabe umzusetzen.

Ich möchte natürlich kein fertiges Programm von euch  Ich möchte aber wissen, was getan werden muss, denn ehrlich gesagt hab ich keine Ahnung wo ich anfangen soll und was der Dozent von mir will.



Spoiler



Schreiben Sie einige Klassen die einen Zug repräsentieren. Definieren Sie die Klassen _Locomotive _und _Car _und verwenden Sie folgende Datenelemente: 
Klasse _Locomotive_: length, type 
Klasse _Car_: length, max_passengers
Ordnen Sie diesen sinnvolle Methoden zu. Bitte beachten Sie, dass die oben genannten Datenelemente nicht verändert werden dürfen. Die Aufgabe ist Züge mit Hilfe dieser Klassen zu erzeugen. Die Lokomotive ist direkt mit dem ersten Waggon verbunden. Deshalb definieren Sie bitte ein Datenelement _next _vom Typ _Car _innerhalb der Klasse _Locomotive_. Definieren Sie außerdem geeignete Schreib- und Lesemethoden (get... bzw. set...). Jeder Waggon ist an den nächsten Waggon des Zuges angekuppelt, außer es handelt sich um den letzten Waggon. In der Klasse _Car_, definieren Sie deshalb bitte ein Datenelement _next _desselben Datentyps, ebenso wie geeignete Schreib- und Lesemethoden. Dieses Datenelement speichert ein anderes Objekt derselben Klasse, oder kein Objekt (_null_), falls es sich um den letzten Waggon handelt. 

Als drittes, definieren Sie bitte eine Klasse _Train _die einen vollständigen Zug repräsentiert, der aus genau einer Lokomotive und einer beliebigen Anzahl Waggons besteht. Die Klasse Train
hat folgende Methoden (Parameter und Ergebnistypen legen Sie bitte selbst fest):
Konstruktor
• Der _Train _Konstruktor erwartet eine Lokomotive. Er erzeugt einen neuen, sehr kurzen Zug: Nur die Lokomotive ohne Waggons.
_add( ... )_
• Fügt einen gegebenen Waggon an einer beliebigen Stelle im Zug ein.
_print( ... )_
• Druckt alle Informationen über den Zug aus.
_getLength( ... )_
• Liefert die Gesamtlänge des Zuges (Länge der Lokom otive plus die Länge alle Waggons)
_getPassengers( ... )_
• Liefert die mögliche Anzahl an Passagieren des Zuges zurück.
_removeFirst( ... )_
• Entfernt den ersten Waggon aus dem Zug. Liefert null zurück falls der Zug keinen Waggon besitzt.
_relink( ... )_
• Kuppelt einen weiteren Zug an den bestehenden an. Dabei werden alle Waggons des anderen Zuges an den bestehenden angehängt. Nur die Lokomotive verbleibt im anderen Zug.
_revert( ... )_
• Kehrt die Reihenfolge der Waggons im Zug um. (Die Position der Lokomotive darf nicht verändert werden. 

Schreiben Sie zum Abschluss ein Hauptprogramm, das alle Methoden der Klasse _Train _testet. 

Ihre Lösung sollte aus insgesamt vier Klassen bestehen
_Locomotive_, _Car_, _Train _und _RailroadMain _(Hauptprogram). Die Klassendefinitionen leiten Sie bitte aus folgendem UML Diagramm ab: imgur: the simple image sharer
Informieren Sie sich vorab, was die einzelnen Symbole im UML Diagramm bedeuten



Die UML dazu habe ich mir angeschaut und auch verstanden, das hilft mir leider nicht weiter. Wie ich es interpretiere: Ich muss in der main ein train Objekt erzeugen. Dieses Objekt muss dann ein Locomotive Objekt beinhalten und beliebig viele Car Objekte. 

Meine Fragen dazu: 
- Wie sorge ich dafür, dass das Train Objekt auch tatsächlich diese Objekte beinhaltet?
- Was soll das Datenelement "next" vom Typ car?
- Wie kann ich unendlich viele weitere Car Objekte erzeugen? Und wie kann ich die dann bei "add" in eine Reihenfolge einsortieren?

Ich hab keinen Plan und brauch Hilfe :/


----------



## turtle (20. Dez 2013)

> Wie sorge ich dafür, dass das Train Objekt auch tatsächlich diese Objekte beinhaltet?
> Reihenfolge einsortieren?


Ein Train enthält alle Objekte, die in der Klasse als Attribute definiert sind. Dieses nennt man containment und die Beziehung ist daher eine contains-A und die bei weitem häufigste Art der Beziehung zwischen Objekten. Es gibt noch die Ist-Eine (is-A) Beziehung, die man verwendet wenn ein Objekt vom anderen Objekt "erbt".


> - Was soll das Datenelement "next" vom Typ car?


Es gibt die java.util.LinkedList bei der die Objekte in einer doppelt-verketteten Liste gespeichert sind. 
Intern benutzt eine LinkedList die Klasse Node, um die Verkettungen zwischen der Liste und einem Element herzustellen. Diese Node-Klasse hat die Element prev und next, um auf den Vorgänger bzw. Nachfolger zu verweisen.


> - Wie kann ich unendlich viele weitere Car Objekte erzeugen? Und wie kann ich die dann bei "add" in eine Reihenfolge einsortieren?


Natürlich kannst du nicht unendlich viele Objekte erzeugen. Aber dies ist ein Hinweis, das deine Lösung nicht auf eine bestimmte Menge beschränkt sein soll. Eine LinkedList kann beispielsweise soviele Elemente speichern wie Hauptspeicher der JVM zugewiesen wurde, also potenziell unendlich. LinkedList bietet bereits eine add-Methode an mit der du Elemente an beliebiger Stelle der Liste einfügen kannst.


----------

