Está en la página 1de 8

Aufgaben zur Abgabe als Prfungsleistung fr Prog II

Allgemeine Regeln und Abgabeformat (Export als Archive File, keine


Umlaute, package mypack; etc.) wie in Prog I

Sie haben immer die Mglichkeit, nur Teile der Aufgabe zu bearbeiten
Falls Anforderungen nicht erfllt sind, bitte ein kurzes, formloses Dokument
hinzufgen, was geht oder nicht geht

Freiwillig als Ergnzung: Information, wie viele Stunden Sie in die Aufgabe
investiert haben
Sie drfen Codestcke oder Hinweise aus Internet/Bchern etc.
recherchieren, bei umfangreicheren bernahmen (= mehr als zwei Zeilen
bernommen) unbedingt Quellenangabe hinzunehmen!

Folie 1

Lieferdienst

Schreiben Sie eine objektorientierte


Java-Anwendung, die annhernd
optimale Routen fr einen
Lieferdienst ermittelt
Gegeben ist eine Liste von Paketen
mit Zieladressen (z.B. Pizzen fr
verschiedene Kunden)
Gesucht ist anhand der
Zieladressen eine mglichst kurze
Rundreise, die am Restaurant
startet und dort wieder
zurckkommt, nachdem alle
Kunden besucht wurden

Folie 2

Aufgabe

Ein Klasse Paket besteht aus den drei Attributen


name (String), x- und y-Koordinate des Ziels (int)

Eine Klasse Paketliste dient der Verwaltung einer Liste von Paketen
Die Initialisierung der Koordinaten erfolgt mit festen Werten, die wie folgt
vorgegeben sind:

0. Adresse: 20/ 20
1. Adresse: 120/ 320
2. Adresse: 90/ 140
3. Adresse: 200/ 120
4. Adresse: 50/ 50
5. Adresse: 300/, 50
6. Adresse: 250/ 350
7. Adresse: 130/ 90
8. Adresse: 250/ 280
9. Adresse: 180/ 180

2 + 2

Die Distanz zwischen zwei Stdten lsst sich mit Hilfe der Koordinaten
berechnen: Euklidische Distanz/Pythagoras

Folie 3

Routenplanung

Es sollen drei Strategien zur Routenplanung implementiert werden


Zufallsstrategie, Klasse StratZufall
Starte mit dem Restaurant (Koordinate 0/0) und suche von dort zufllig eine noch nicht
besuchte Adresse; kehre dann zum Restaurant 0/0 zurck

Nearest Neighbour, Klasse: StratNearestNeighbour


Starte mit dem Restaurant (Koordinate 0/0) und suche von dort die nchstgelegene
Adresse; suche von dort wiederum die nchstgelegene Adresse usw. bis alle Adressen
besucht sind und kehre dann zum Restaurant 0/0 zurck

RANDIN-Algorithmus (= random insertion, Klasse StratRANDIN) besteht aus


zwei Teilen:
Zuerst wird eine zufllige Adresse ausgewhlt, die noch nicht bearbeitet ist
Dann wird diese Adresse so in die aktuelle Teilroute eingefgt, dass die geringste
Verlngerung der bisherigen Route verursacht wird

Die Implementierung soll mit Hilfe des Strategie-Patterns erfolgen, siehe


Beschreibung in OLAT aus J. Goll Architektur- und Entwurfsmuster der
Softwaretechnik S. 174ff (ohne Pattern auch mglich, aber 2 Punkte weniger)
Ziel: Kompletter Austausch einer Strategie einfach mglich

Folie 4

Strategie Pattern

Das Interface ITourstrategie hat folgende Schnittstelle (bitte so


verwenden)
import java.util.*;
public interface ITourstrategie {
/**
* Ermittle fr die paketListe eine moeglichst kurze Rundreise
* @param paketListe ist der Eingabeparameter mit einer Liste von Paketen
* @return Eine route wird berechnet, d.h. Rundreise fr die Pakete
*/
public ArrayList<Paket> planeTour(ArrayList<Paket> paketListe);
}

Folie 5

Ausgabe

Es werden drei Ausgaben fr alle Strategien untersttzt:


1. Eine Ausgabe der errechneten Tour auf der Konsole in folgendem Format:
Zeige Tour: [Start (0/0), Adresse0 (20/20), Adresse4 (50/50),
Adresse7 (130/90), Adresse2 (90/140), Adresse9 (180/180),
Adresse3 (200/120), Adresse5 (300/50), Adresse8 (250/280),
Adresse6 (250/350), Adresse1 (120/320), Start (0/0)]

2. Eine Ausgabe der gesamten Tourlnge auf der Konsole:


Tourlaenge auf Konsole ausgeben: 1288.5331633444016

3. Eine Ausgabe als Grafik mit Stdtepositionen und Verbindungen wie unten:
Separate Fenster mit berschrift: Strategieklasse, Tourlaenge (eine
Nachkommastelle); Hinweis: siehe AusgabeGrafikJPanelVorlage.java

Folie 6

Decorator-Pattern

Die drei Ausgaben sind mit Hilfe des


Decorator-Patterns zu implementieren,
siehe OLAT: Goll S. 98ff
Ziel: Objekte erhalten zur Laufzeit dynamisch zustzliche Funktionalitten
Das Pattern ist etwas komplexer, bei Verzicht auf das Pattern 3 Punkte weniger
Vorgeschriebene Klassen und Methoden bei Verwendung des Patterns:
1.

2.
3.
4.
5.

import java.util.ArrayList;
public interface ITour {
public void zeigeTour(); // Ausgabe errechnete Tour
//plus eigene weitere Methoden falls gewuenscht
}

abstract class Ausgabe implements ITour


class AusgabeKonsole extends Ausgabe // Ausgabe Tourlaenge Konsole
class AusgabeGrafik extends Ausgabe // Ausgabe als Grafik
Beispielaufruf in main:
ITour t1 = new AusgabeGrafik (new AusgabeKonsole(
new Tour(new StratNearestNeighbour())));
t1.zeigeTour();
Folie 7

Weitere Anforderungen

Zentrale Klasse zur Steuerung ist die Klasse Tour.java, die u.a. folgende
Attribute typsicher mittels ArrayList verwaltet:
Eine Liste von Paketen paketListe
Eine Route route, die die Reihenfolge der Pakete angibt; der erste Eintrag und
der letzte sind das Paket mit der Start-Adresse 0/0, dazwischen die Pakete mit
den Ziel-Adressen
Die main-Methode zum Start der Anwendung muss in dieser Klasse Tour sein

Geben Sie ein Klassendiagramm (nur Klassen und Attribute, keine


Methoden) gem Notation der Vorlesung mit ab (mit Kardinalitten)
Format: pdf, auch handschriftlich gezeichnet und dann eingescanned mglich

Folie 8