Übungsblatt 2

Werbung
IT 2 – WS 2010/2010 – Übungsblatt 2
Abgabe: 5.11.2010
Die folgenden Beispiele beschreiben eine Variante des Projekts Aufgabenverwaltung, das in
den Übungen zu IT1 entwickelt wurde.
In dem Projekt geht es um die Verwaltung von Aufgaben, die bis zu ihrem Endtermin von
unterschiedlichen Personen (z.B. in einer Firma) erledigt werden müssen.
Zur Vereinfachung werden alle Arbeitstage durchnummeriert und durch ganze Zahlen
dargestellt. Die Arbeitstage einer bestimmten Person werden dann durch eine Liste der
entsprechenden Nummern angegeben. Der Aufwand für die Erledigung einer Aufgabe wird in
ganzen Arbeitstagen angegeben. Der Endtermin ist durch die Nummer des entsprechenden
Tages gegeben (an diesem Tag kann noch an der Fertigstellung der Aufgabe gearbeitet
werden).
Nur die in der Angabe als public definierten Methoden dürfen public und damit außerhalb des
jeweiligen Pakets sichtbar sein.
Beispiel 2.1 [Person.java, Aufgabe.java, Firma.java]
a) Implementieren Sie die public Klasse aufgabenverwaltung.simulation.Person mit den
folgenden Eigenschaften:
• Es gibt einen Konstruktor
public Person(String name, List<Integer> arbeitstage),
der eine Person mit dem entsprechenden Namen und den angegebenen Arbeitstagen
erzeugt.
• Die Methode
public String toString(),
liefert den Namen der Person zurück.
• Es gibt eine Methode
public List<Integer> getArbeitstage(),
die die Arbeitstage der Person zurückliefert. Die Methode soll nur eine Kopie der
Arbeitstagsliste zurückliefern, sodass Veränderungen der zurückgelieferten Liste die
Arbeitstage der Person nicht verändern.
b) Implementieren Sie die public Klasse aufgabenverwaltung.simulation.Aufgabe mit den
folgenden Eigenschaften:
• Es gibt einen Konstruktor
public Aufgabe(String name, List<Person> bearbeiter,
int aufwand, int endtermin),
der den Namen der Aufgabe angibt, weiters die Liste der Personen die immer
gleichzeitig die Aufgabe bearbeiten müssen, sowie die Anzahl der notwendigen
Arbeitstage (=Aufwand) und den Endtermin.
• Die Methoden
public String toString(),
public List<Person> getBearbeiter(),
public int getAufwand(),
public int getEndtermin(),
liefern jeweils den Namen, die Liste der Bearbeiter (als Kopie der Originalliste), den
Aufwand und den Endtermin der Aufgabe zurück.
-1-
IT 2 – WS 2010/2010 – Übungsblatt 2
c) Implementieren Sie die public Klasse aufgabenverwaltung.simulation.Firma mit den
folgenden Eigenschaften:
• Es gibt einen Konstruktor
public Firma(String name, List<Aufgabe> aufgaben,
Map<Aufgabe,List<Aufgabe>> benoetigt),
der den Namen der Firma angibt und die Liste der Aufgaben, die zu erledigen sind.
Die Map benoetigt gibt für jede Aufgabe an, welche anderen Aufgaben abgeschlossen
sein müssen, bevor diese Aufgabe begonnen werden kann.
• Die Methoden
public String toString(),
public List<Aufgabe> getAufgaben(),
liefern den Namen der Firma bzw. die Liste der Aufgaben (als Kopie) zurück.
• Die Methode
public List<Aufgabe> getBenoetigteAufgaben(Aufgabe eineAufgabe),
liefert die Liste der Aufgaben (als Kopie) zurück, die vor Beginn der Aufgabe
eineAufgabe beendet sein müssen.
Beispiel 2.2 [Person.java, Aufgabe.java, Firma.java]
a) Ergänzen Sie die Klasse Aufgabe um folgende Methoden:
• Die Methode
void setBenoetigteAufgaben(List<Aufgabe> benoetigteAufgaben),
die angibt, welche Aufgaben beendet sein müssen, bevor diese Aufgabe begonnen
werden kann. Beachten Sie, dass diese Methode nicht public ist.
• Die Methode
public List<Aufgabe> getBenoetigteAufgaben(),
liefert die Liste der Aufgaben (als Kopie) zurück, die vor Beginn dieser Aufgabe
beendet sein müssen.
b) Verändern Sie den Konstruktor von Firma so, dass er für jede Aufgabe die Methode
setBenoetigteAufgaben() mit der entsprechenden Liste der benötigten Aufgaben aufruft. Nach
Aufruf des Konstruktors Firma soll für jede der beteiligten Aufgaben die Methode
getBenoetigteAufgaben() (in Aufgabe) die korrekte Antwort liefern.
c) Definieren Sie im Paket aufgabenverwaltung.simulation
BearbeitungsException als Unterklasse von Exception.
die
public
Klasse
d) Ergänzen Sie die Klasse Aufgabe um folgende weitere Methoden:
• Mit der Methode
public void bearbeite(int tag) throws BearbeitungsException,
wird die Bearbeitung einer Aufgabe an einem bestimmten Tag veranlasst. Die
Methode wirft die BearbeitungsException, wenn die Bearbeitung nicht möglich ist:
o die Bearbeitung der Aufgabe ist schon abgeschlossen,
o der angegebene Tag liegt nach der Endtermin der Aufgabe,
o einer der Bearbeiter der Aufgabe arbeitet an diesem Tag nicht oder bearbeitet
an diesem Tag schon eine andere Aufgabe,
o eine der benötigten Aufgaben wurde vor diesem Tag noch nicht abgeschlossen.
Zur Implementierung dieser Methode können (und sollten) Sie in den beteiligten
Klassen zusätzliche Attribute und Methoden definieren
-2-
IT 2 – WS 2010/2010 – Übungsblatt 2
Beispiel 2.3
Ergänzen Sie die Klasse Firma um die folgenden Methoden:
• Die Methode
public writeToFile(String filename) throws IOException,
speichert alle Informationen zur Firma in das durch filename angegebene File. Falls
das Speichern nicht möglich ist, soll eine IOException geworfen werden.
• Die Methode
public static Firma readFromFile(String filename) throws IOException,
liest die Daten einer mittels writeToFile() gespeicherten Firma wieder ein und liefert
die entsprechende Firma zurück. Wenn das Einlesen nicht möglich ist, soll eine
IOException geworfen werden. (Beachten Sie, dass andere mögliche Exceptions, z.B.
die ClassNotFoundException, innerhalb der Methode behandelt und evt. durch eine
IOException ersetzt werden müssen.)
-3-
IT 2 – WS 2010/2010 – Übungsblatt 2
Beispiel 2.4
Legen Sie ein Paket routenplanung mit einer Klasse routenplanung.Routenplaner und einer
Klasse routenplanung.Ort an. Die Orte werden von 0 beginnend durchnummeriert. Die Klasse
Ort soll folgende Eigenschaften haben:
• Es gibt einen Konstruktor
Ort(double[]direkteEntfernung),
der einen Ort anlegt. Das Array direkteEntfernung enthält für alle Orte die direkten
Entfernungen zu diesen Orten, d.h. direkteEntfernung[ortsNr] ist die direkte
Entfernung zum Ort ortsNr.
• Es gibt eine Methode
double getDirekteEntfernungZu(int ortsNr),
die die direkte Entfernung vom befragten Ort zum Ort ortsNr zurückliefert.
Beispiel 2.5 [Routenplaner.java]
Die Klasse Routenplaner soll folgende Eigenschaften haben:
• Es gibt einen Konstruktor
Routenplaner(Ort[]ortsliste),
das den Routenplaner für diese Liste von Orten anlegt. (Für die Klasse Ort siehe
Beispiel 3.1.)
• Es gibt eine Methode
double getKuerzesteEntfernung(int start, int ziel),
die die Länge des kürzesten Weges von start nach ziel über höchstens eine
Zwischenstation zurückliefert. Beachten Sie, dass der Weg über eine Zwischenstation
kürzer sein kann als der direkte Weg.
Beispiel 2.6
Testen Sie die Klasse Routenplaner, indem Sie eine Klasse TestKlasse mit einer Methode
testen() implementieren, die Orte und den Routenplaner erzeugt und die Methoden des
Routenplaners testet. Z.B. könnten Sie folgende Strassen mit den entsprechenden Längen
zwischen den Orten 0,1,2,3,4 vorsehen:
0-1 : 7
0-2 : 5
1-2 : 1
1-3 : 3
3-4 : 4
Wenn es keine direkte Verbindung zwischen zwei Orten gibt, könnten Sie die Entfernung auf
Double.POSITIVE_INFINITY setzen.
-4-
Herunterladen