Computing">
[Go to site: main page, start]

0% fanden dieses Dokument nützlich (0 Abstimmungen)
6 Ansichten4 Seiten

JavaGenerics 01

Der Übungsblock behandelt die generische Programmierung in Java, insbesondere die Verwendung von Generics im Collection-Framework. Die Aufgaben umfassen die Implementierung einer Containerklasse für Objekte vom Typ Figure, die Parametrisierung dieser Klasse sowie die Entwicklung einer Queue-Datenstruktur auf Basis einer verketteten Liste. Zudem wird eine Service-Klasse gefordert, die zwei parametrisierte Queues zu einer neuen Queue vereint.

Hochgeladen von

year2023
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
6 Ansichten4 Seiten

JavaGenerics 01

Der Übungsblock behandelt die generische Programmierung in Java, insbesondere die Verwendung von Generics im Collection-Framework. Die Aufgaben umfassen die Implementierung einer Containerklasse für Objekte vom Typ Figure, die Parametrisierung dieser Klasse sowie die Entwicklung einer Queue-Datenstruktur auf Basis einer verketteten Liste. Zudem wird eine Service-Klasse gefordert, die zwei parametrisierte Queues zu einer neuen Queue vereint.

Hochgeladen von

year2023
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

Advanced Software Engineering

Übungsblock: Java Generics


Ziel dieses Übungsblocks ist, dass Sie mit der generischen Programmierung vertraut werden. Als
Basissprache wird Java benutzt, die ab der Version 5 auch Generics enthält. In dem Übungsblock
lernen Sie die Verwendung von Generics, insbesondere im Zusammenhang mit dem Collection-
Framework und zum den Entwurf und die Implementierung von generischen Typen kennen.

Aufgabe 1
Gegeben ist folgende Klassenhierarchie:

Figure
id: int
draw()

Circle Square Triangle

Entwerfen und implementieren Sie eine Containerklasse, die Objekte vom Typ Figure (und davon
abgeleitete Typen) aufnimmt und verwaltet. Die Containerklasse soll folgende Schnittstelle besitzen:

FigureContainer

add( fig : Figure )


getFigure( id : int ) : Figure
containsFig( id : int ) boolean
iterator() : Iterator<Figure>
size() : int
drawAll()

Mit Hilfe der Methode add kann dem Container ein Figure-Objekt hinzugefügt werden. Die Methode
getFigure erlaubt den Zugriff auf ein Figure-Objekt über die Id, contains prüft, ob ein Figure-Objekt
mit der übergebenen Id enthalten ist, iterator liefert ein Iterator-Objekt. Die Methode size liefert die
Anzahl der enthaltenen Objekte und drawAll iteriert über alle im Container enthaltenen Objekte und
ruft bei dem Objekt die Methode draw auf.

Überlegen Sie sich, welche interne Datenstruktur für die geforderten Zwecke am sinnvollsten ist.
Versuchen Sie möglichst viel Standardfunktionalität zu benutzen.

© Prof. Dr. J. Hettel, Fachhochschule Kaiserslautern 1


Advanced Software Engineering

Testen Sie Ihre Container-Klasse mit folgendem Programm:

import [Link];
import [Link];
import [Link];
import [Link];

public class FigureContainerTestDriver


{
public static void main(String[] args)
{
FigureContainer container = new FigureContainer();

for( int i=1; i <= 100; i++ )


{
if( i%3 == 0 )
{
[Link]( new Circle(i) );
}
else if( i%3 == 1)
{
[Link]( new Triangle(i) );
}
else
{
[Link]( new Square(i) );
}
}

[Link]("Anzahl der Elemente: " + [Link]() );


[Link]("Enthält id 42 : " + [Link](42) );
[Link](" -- Objekt : " + [Link](42) );
[Link]("Enthält id 8015 : " + [Link](8015) );
[Link](" -- Objekt : " + [Link](8015) );

int count = 0;
Iterator itr = [Link]();
while( [Link]() )
{
[Link]();
count++;
}
[Link]("Ermittelte Anzahl der Elemente: " + count );

[Link]();
}
}

© Prof. Dr. J. Hettel, Fachhochschule Kaiserslautern 2


Advanced Software Engineering

Aufgabe 2
Als nächstes parametrisieren Sie die von Ihnen entwickelte Containerklasse:

Figure

<T>
FigureContainer

add( fig : T )
getFigure( id : int ) : T
containsFig( id : int ) boolean
iterator() : Iterator<T>
size() : int
drawAll()

wobei der Typ-Parameter jeder Sub-Typ von Figure sein kann. Modifizieren Sie weiter das in
Aufgabe 1 gegebene Testprogramm so, dass es mit der neu erstellten Container-Klasse arbeitet.

Aufgabe 3
In der Vorlesung wurde eine parametrisierbare Queue besprochen. Die gezeigte Implementierung
stützte sich auf Standardklassen des Collection-Frameworks.
Realisieren Sie nun eine zweite Datenstruktur für die Queue, die die Queue interne auf eine einfach
verkettete Liste abbildet.

public class ChainQueue<E> implements Queue<E>


{
...
}

Ein neu hinzugefügtes Element wird einfach hinten an die Kette angehängt, ausgelesen werden die
Elemente immer von vorne. Die Klasse ChainQueue definiert zur Verwaltung der Einträge eine
private innere Klasse (Knoten), die dann auch entsprechend parametrisiert sein muss. Das Gerüst sieht
somit wie folgt aus:

public class ChainQueue<E> implements Queue<E>


{

private class Node<A>


{
...
}

...
}

© Prof. Dr. J. Hettel, Fachhochschule Kaiserslautern 3


Advanced Software Engineering

Vervollständigen Sie die Implementierung der Klasse ChainQueue und testen Sie Ihre
Implementierung mit folgendem Programm:

public class QueueDriver


{
static public void main(String[] args)
{
Queue<String> strs = new ChainQueue<String>();

[Link]("hallo1");
[Link]("hallo2");
[Link]("hallo3");

[Link]("Contains: " + [Link]("hallo1"));


[Link]("Contains: " + [Link]("hallo4"));

[Link](" - " + [Link]() + " #" + [Link]() );

[Link]("Contains: " + [Link]("hallo1"));


[Link]("Contains: " + [Link]("hallo4"));

[Link](" - " + [Link]() + " #" + [Link]() );


[Link](" - " + [Link]() + " #" + [Link]() );
[Link](" - " + [Link]() + " #" + [Link]() );
}
}

Aufgabe 4
Schreiben Sie eine Service-Klasse, die eine (statische) Methode bereitstellt, mit deren Hilfe zwei
parametrisierte Queues zu einer vereinigt werden kann. Hierbei sollen jeweils abwechselnd die
Elemente aus den Queues entnommen und in eine neue Queue eingefügt werden. Folgende Abbildung
soll dieses Verfahren verdeutlichen.
Überlegen Sie sich, ob hierzu das Einführen eines neue Interfaces notwendig ist.

1 2 3 4
A 1 B 2 C 3 4

A B C

Schreiben Sie ein Testprogramm, das Ihre Service-Klasse testet.

© Prof. Dr. J. Hettel, Fachhochschule Kaiserslautern 4

Das könnte Ihnen auch gefallen