Prof. Dr. A. Poetzsch-Heffter Dipl.-Inf. J.-M. Gaillourdet Dipl.-Inform. M. Reitz Dipl.-Inform. K. Geilmann Dipl.-Inf. P. Michel M. Sc. Y. Welsch
TU Kaiserslautern
Fachbereich Informatik AG Softwaretechnik
Übungsblatt 13: Software-Entwicklung 1 (WS 2008/09)
Ausgabe: in der Woche vom 26.01. bis zum 30.01.
Abgabe: in der Woche vom 02.02. bis zum 06.02.
Abnahme: max 2 Tage nach Abgabe
Aufgabe 1 Listen und Iteratoren (Präsenzaufgabe)
Lesen Sie die Teilaufgaben von Aufgabe 2 und entwerfen Sie ein Klassendiagramm mit allen Klassen, Methoden, Attributen und Beziehungen.
Aufgabe 2 Listen und Iteratoren (Einreichaufgabe)
a) Implementieren Sie doppelt verkettete Listen, wie auf Folie 5.77 angedeutet. Ihre KlasseLinkedList (Liste als Behälter) soll neben denen der KlasseSLinkedListaußerdem folgende Methoden besitzen:
void addLast (int n) int removeLast ()
Dabei sollen Sie sicherstellen, dass diese Operationen in konstanter Zeit erfolgen (d.h. unabhängig von der Anzahl der Elemente in der Liste).
b) Implementieren Sie Iterator-Klasse für ihre Listen-Implementierung gemäß Folie 5.80. Fügen Sie dabei folgende Methoden hinzu:
boolean hasPrevious () int previous ()
void remove () // Entfernt das aktuelle Element aus der Liste
c) Überlegen Sie sich, was mögliche Vor- und Nachbedingungen für ihre Methoden aus a) und b) sein könnten und annotieren Sie diese mit dem aus der Vorlesung vorgestellten Verfahren (4.4.1). Beschreiben Sie kurz einige gültige und ungültige Methodenaufruf-Sequenzen.
Aufgabe 3 Klassenattribute und -methoden (Einreichaufgabe)
a) Machen Sie sich mit der Schnittstelle der Klasse Math vertraut (Beschreibung aufhttp://java.sun.
com/javase/6/docs/api/java/lang/Math.html. Begründen Sie, warum statische Attribute/Me- thoden verwendet wurden.
b) Warum kann folgendes Programm nicht kompiliert werden? Schreiben Sie es so um, dass es kompiliert.
class Main { int wert ;
public static void main ( String [] args ) {
Main m = new Main ();
Main . wert = 7;
System . out . println ( wert );
} }
c) Implementieren Sie eine Klasse Count, die eine statische Methode print()besitzt, welche ausgibt, wie viele Objekte der KlasseCountbis dato instanziiert worden sind.
Aufgabe 4 Modellierung (Einreichaufgabe)
Im Folgenden modellieren Sie eine Miniwelt bestehend aus Meeren, Ländern, Flüssen und Städten. Dabei können Länder benachbart sein. Flüsse fließen durch Länder und manche Städte liegen am Ufer eines Flus- ses. Städte können aber auch an den Ufern eines Meeres liegen. In die Meere münden Flüsse. Meere selbst können aneinandergrenzen. Länder haben Küsten zu Meeren.
a) Modellieren Sie diese Miniwelt als Klassendiagramm mit Beziehungen. Wählen Sie gute Namen für die Beziehungen und legen Sie sinnvolle Multiplizitäten fest.
b) Nun verfeinern wir den Entwurf. Schreiben Sie Java-Klassen die zeigen, wie Sie die Beziehung zwischen Land und Stadt mit Attributen realisieren würden. Entwerfen Sie vier unterschiedliche Realisierungen der Beziehung zwischen Land und Meer. Was sind die Unterschiedlichen Vor- und Nachteile der Vari- anten. Wovon würden Sie die Entscheidung für eine der Varianten abhängig machen?
Aufgabe 5 Parametrische Typen (Einreichaufgabe)
Implementieren Sie eine parametrische Fassung der KlasseLinkedListausAufgabe 2, Teil a) und b).
Aufgabe 6 Grafikeditor (Präsenzaufgabe)
Lesen Sie die Teilaufgaben von Aufgabe 7 und entwerfen Sie ein Klassendiagramm mit allen Klassen, Methoden, Attributen und Beziehungen.
Aufgabe 7 Grafikeditor (Einreichaufgabe)
In dieser Aufgabe geht es darum, einen Editor für graphisch darstellbare Komponenten zu implementieren.
Der Editor hat ein Zeichenfeld, das über x und y-Koordinaten angesprochen wird. Die Bedienung des Editors erfolgt Menü gesteuert in der Kommandozeile. Eine mögliche Sitzung könnte wie folgt aussehen:
1) Neues Polygon anlegen 2) Fokus ändern
3) Verschieben Ihre Wahl: 1 Polygon eingeben:
Name: Dreieck
Anzahl der Ecken (min 3): 3 Ecke 1:
x-Koordinate: 10 y-Koordinate: 10 Ecke 2:
x-Koordinate: 10 y-Koordinate: 20
Ecke 3:
x-Koordinate: 60 y-Koordinate: 30
1) Neues Polygon anlegen 2) Fokus ändern
3) Verschieben Ihre Wahl:
Zur Bearbeitung dieser Aufgabe können Sie sich die Datei “SEGraphics.java” von der Vorlesungsseite laden und übersetzen.SEGraphicsbietet Ihnen folgendes:
• Der Konstruktor vonSEGraphicslegt eine Zeichenfläche an.
• Die Methodeclearlöscht den Inhalt einer Zeichenfläche.
• drawCircle,drawStringunddrawLinewerden zum Zeichnen auf der Zeichenfläche benutzt.
Folgende Teilaspekte sollen bearbeitet werden:
a) Entwerfen Sie eine Klasse Punkt. Der Konstruktor soll die Koordinaten des Punktes vom Benutzer erfragen, außerdem werden Methoden benötigt, die einen Punkt verschieben.
b) Ein Polygon besteht aus mindestens drei verschiedenen Punkten einer Ebene, die durch Linien mitein- ander verbunden sind. Entwerfen Sie eine KlassePolygon, mit der Sie beliebige Polygone verwalten können. Um Polygone später identifizieren zu können, soll jedes Polygon einen Namen haben. Der Konstruktor soll die Koordinaten der Eckpunkte vom Benutzer erfragen. Außerdem brauchen Sie Me- thoden und Attribute, um die Position und Farbe des Polygons zu ändern, und um das Polygon auf ein SEGraphics-Objekt zu zeichnen.
Verwenden Sie für Farben Objekte der KlasseColorder Java-API. Informationen dazu finden Sie unter http://java.sun.com/javase/6/docs/api/java/awt/Color.html.
c) Entwerfen Sie eine Klasse Editor, die eine Menge von Polygonen und eine Zeichenfläche verwaltet.
Der Editor soll eine Methode haben, die es dem Benutzer erlaubt, interaktiv Polygone zu erstellen, zu verschieben und zu löschen.
Als Besonderheit soll der Editor über einen Fokus verfügen, so dass man ein Polygon auswählt, d.h.
ihm den Fokus gibt, und anschließend z.B. mehrere Verschiebungen nacheinander auf diesem Polygon machen kann.
d) Schreiben Sie ein Hauptprogramm, das einen neuen Editor erzeugt und die Interaktionsmethode aufruft.