TU Kaiserslautern Übungsblatt 13: Software

Werbung
TU Kaiserslautern
Prof. Dr. A. Poetzsch-Heffter
Dipl.-Inform. J. O. Blech
Fachbereich Informatik
Dipl.-Inform. M. J. Gawkowski
AG Softwaretechnik
Dipl.-Inform. N. Rauch
Übungsblatt 13: Software-Entwicklung I (WS 2007/08)
Ausgabe: 28. Januar 2008
Abgabe: 4. Februar 2008, 12.00 Uhr
Abnahme praktischer Teil: 4. Februar - 7. Januar 2008
Aufgabe 1 Parametrische Typen (praktisch)
(12 Punkte)
Die Datenstruktur Schlange (engl. queue) und Stapel (engl. stack) unterschieden sich voneinander nach dem
Prinzip, nach dem sie die von ihnen verwalteten Daten organisieren: Schlange organisiert die Daten nach
dem LILO- und Stapel nach dem LIFO-Prinzip. Die Abkürzungen LILO und LIFO stehen für die Prinzipien
last in last out und last in first out. Die einzigen zugelassenen Operationen von Stapel sind
• initialise() liefert den leeren Stapel s.
• empty(s) liefert true g.d.w. s leer ist.
• top(s) liefert den Wert des obersten Elements des Stapels s.
• push(s, x ) liefert einen Stapel in dem x auf allen Elementen von s liegt.
• pop(s) entfernt das oberste Element aus dem Stapel s und liefert es; falls empty(s), ist pop(s) nicht
definiert.
Die einzigen zugelassen Operationen von Schlange sind
• initialise() liefert die leere Schlange q.
• empty(q) liefert true g.d.w. q leer ist.
• enqueue(q, x ) liefert eine Schlange in der x am Ende der Schlange q steht.
• dequeue(q) entfernt das vorderste Element aus der Schlange q und liefert es; falls empty(q), ist
dequeue(q) nicht definiert.
Siehe auch im Buch "Algorithmen und Datenstrukturen" von T. Ottmann und P. Widmayer oder in Wikipedia
nachschlagen.
a) Implementieren Sie eine parametrische Klasse Queue < T >, die eine Implementierung der Datenstruktur Schlange ist. Die Klasse Queue < T > soll ähnlich wie die Klasse SLinkedList auf der Vorlesungsfolie 550 sein: Die Klasse besitzt ein Attribut first, das eine Referenz auf das erste Element einer
einfach verketteten Liste vom Typ SList < T > ist. Die Methoden der Schnittstelle von Queue < T >
sollen die Liste first verwalten, indem sie die Elemente vom Typ T in first einfügen oder aus first
entfernen. Im Unterschied zu SLinkedList besitzt die Klasse Queue < T > ein zusätzliches Attribut:
eine Referenz last auf das letzte Element der Liste first. last dient als Hilfsreferenz bei der Ausführung der Operation enqueue.
(4 Punkte)
b) Erweitern Sie Ihre Implementierung der Klasse Queue < T > aus der vorangehenden Teilaufgabe um
eine innere parametrische Klasse Iterator < T > nach dem auf den Vorlesungsfolien Nr. 566 und 567
dargestellten Schema.
(4 Punkte)
c) Schreiben Sie eine neue Version des Programms Listenverwalter, Schlangenverwalter, indem Sie die
Methode main der Klasse Main aus der Lösung der Aufgabe 1 in Übungsblatt 11 umschreiben. In der
neuen Version des Programms muss der Benutzer nach dem Start des Programms interaktiv eine Option eingeben, die angibt, ob der Schlangenverwalter eine Schlange von Zahlen oder eine Schlange
von Punkten verwalten soll. Das Programm soll der eingegebenen Option entsprechend entweder eine
Schlange vom Typ Queue < Integer > oder vom Typ Queue < Point > verwalten.
(4 Punkte)
Aufgabe 2 Java Packages (praktisch)
(8 Punkte)
a) Betrachten Sie die folgenden Klassendeklarationen-Auszüge:
// Datei TextComponent.java
package tools.editortools;
class TextComponent{ . . . }
// Datei TextArea.java
package tools.editortools;
public class TextArea {
private char [] text;
int linecount;
public void getText();
public void setText();
}
// Datei TextEditor.java
package tools.editortools;
public class TextEditor { . . . }
// Datei Book
import tools.editortools.*;
class Book { . . . }
und beantworten Sie die folgenden Fragen:
1. Auf welche Attribute und Methoden der Klasse TextComponent dürfen die Klassen
TextArea, TextEditor und Book zugreifen?
(2 Punkte)
2. Auf welche Attribute und Methoden der Klasse TextArea dürfen die Klassen
TextComponent, TextEditor und Book zugreifen?
(2 Punkte)
3. Auf welche Attribute und Methoden der Klasse TextEditor darf die Klasse TextArea zugreifen?
(2 Punkte)
b) In dieser Teilaufgabe sollen Sie üben Java Programme in Pakete zu verteilen, Zugriffsrechte auf die
Schnittstellen der Paketenklassen zu setzen, Pakete zu erzeugen und Programme zu schreiben und zu
übersetzen, welche Klassen aus den von ihnen zur Verfügung gestellten Paketen importieren und benutzen. Zum Üben verwenden wir die von Ihnen in der vorangehenden Aufgabe implementierten Klassen
Point, SList < T > und Queue < T >.
1. Lesen Sie Dokumentation der Programme javac, java und jar. Insbesondere sollen Sie diejenigen Optionen genauer studieren, welche die Verzeichnise zum Lesen und Speichern von classund jar-Dateien für diese Programme festlegen.
2. Erzeugen Sie aus den Klassen Point, SList < T > und Queue < T > drei java-Dateien
Point.java, SList.java und Queue.java.
3. Bündeln Sie dort enthaltene Klassen-Deklarationen in ein Paket softwaretechnik.util.
4. Ändern Sie die Zugriffsrechte im Paket so, dass von außerhalb des Pakets import
softwaretechnik.util nur die Klasse Point und Queue verwendet werden dürfen und die
Klasse SList gekapselt wird.
5. Übersetzen sie die Dateien Point.java, SList.java und Queue.java..
6. Erzeugen Sie aus allen class-Dateien, die das Ergebnis der Übersetzung sind, eine jar-Archiv
Datei utils.jar mit dem Programm jar.
7. Legen Sie in Ihrem Arbeitsverzeichnis das Verzeichnis lib an.
8. Kopieren Sie utils.jar ins Verzeichnis lib.
9. Legen Sie in Ihrem Arbeitsverzeichnis das Verzeichnis project an.
10. Schreiben Sie im Verzeichnis lib die Klasse Main des Programms Schlangenverwalter
aus der vorangehenden Aufgabe folgendermaßen um: Die Datei Main.java soll die ImportKlausel import softwaretechnik.util.*; und die Deklaration der Klasse Main enthalten.
11. Übersetzen Sie die Klasse Main
12. Protokollieren Sie alle Kommandos (einschließlich Optionen, die Sie gebraucht haben), die Sie auf
dem Terminal betätigt haben.
13. Demonstrieren Sie Ihrem Tutor, dass ihre Klasse Main nur auf die Schnittstellenkomponenten
der Klassen Point und Queue zugreifen können, indem Sie geeignet Quellcode der MainKlassendeklaration verändern.
(2 Punkte)
Aufgabe 3 Störe meine Kreise nicht 2 (praktisch)
(7 Punkte)
Betrachten Sie nochmal Ihren Editor von Aufgabenblatt 12 und passen Sie Ihre Implementierung gegebenenfalls an. Die folgenden Teilaufgaben sollen gelöst werden:
a) Ihr Editor soll genau ein Feld von Figuren verwalten. Diese Figuren sollen jeweils mit Hilfe eines drawMethodenaufrufs gezeichnet werden.
(1 Punkt)
b) Zusätzlich zu den Kreis-basierten Figuren sollen jetzt Rechtecke darstellbar sein. Was müssen Sie tun,
um mit dem einen Feld in Ihrer Editor-Klasse auszukommen? Entwerfen Sie eine Schnittstelle und
implementieren Sie entsprechende Klassen!
(5 Punkte)
c) Ergänzen Sie Ihr Hauptprogramm so, dass es das Anlegen und Verschieben sowohl von Rechtecken als
auch von Kreis-basierten Figuren erlaubt.
(1 Punkt)
Aufgabe 4 Eine unkonventionelle Listenimplementierung (praktisch)
(8 Punkte)
Um die Bedeutung und Benutzung einiger Sprachkonstrukte zu üben, soll in dieser Aufgabe eine unkonventionelle Listenimplementierung realisiert werden. Die Implementierung soll aus genau einer Klasse bestehen
und folgende Eigenschaften besitzen:
• Der Typ der Listenelemente ist int.
• Die Klasse realisiert genau eine Liste; diese Liste braucht nicht extra erzeugt zu werden, sondern
existiert am Programmstart und ist zunächst leer.
• Die Klasse hat genau einen Konstruktor. Verwirrenderweise erzeugt der Konstruktor keine neue Listeninstanz, sondern hängt ein neues Element in die Liste ein.
• Die Klasse ermöglicht es dem Anwender, alle Elemente in der Liste auf der Standardausgabe in normaler Reihenfolge und in umgekehrter Reihenfolge auszugeben.
a) Implementieren Sie eine Klasse DLL mit den obigen Eigenschaften.
b) Testen Sie Ihre Implementierung anhand mehrerer Beispiele.
c) Nennen Sie eine Eigenschaft der Liste, die wünschenswert sein könnte. Nennen Sie eine Eigenschaft der
Liste, die sehr schlechter Programmierstil ist.
Herunterladen