• Keine Ergebnisse gefunden

Übungsblatt 12: Softwareentwicklung I (WS 2006/07) Ausgabe: 23. Januar 2007 Abgabe: 29. Januar 2007, 12.00 Uhr Abnahme praktischer Teil: 29. Januar - 02. Februar 2007

N/A
N/A
Protected

Academic year: 2022

Aktie "Übungsblatt 12: Softwareentwicklung I (WS 2006/07) Ausgabe: 23. Januar 2007 Abgabe: 29. Januar 2007, 12.00 Uhr Abnahme praktischer Teil: 29. Januar - 02. Februar 2007"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. Dr. A. Poetzsch-Heffter Dipl.-Inform. J.O. Blech Dipl.-Inform. M.J. Gawkowski Dipl.-Inform. N. Rauch

Technische Universität Kaiserslautern Fachbereich Informatik AG Softwaretechnik

Übungsblatt 12: Softwareentwicklung I (WS 2006/07)

Ausgabe: 23. Januar 2007 Abgabe: 29. Januar 2007, 12.00 Uhr Abnahme praktischer Teil: 29. Januar - 02. Februar 2007

Aufgabe 1 Klasse AList (praktisch) (10 Punkte)

In dieser Aufgabe sollen Sie eine vereinfachte Version der KlasseArrayListaus dem Packagejava.utilim- plementieren. Dabei dürfen Sie in Ihrer Implementierung die Schnittstelle vonjava.util.ArrayListnicht ver- wenden. Für die Implementierung vonAListsollen Sie die folgende Vorlage verwenden1, siehe die Erklärung unten.

import java.util.NoSuchElementException;

class Iterator {

private int current, lb, ub;

private int [] entries;

Iterator( int [] entries, int lb, int ub ) {...}

boolean hasNext() {...}

int next() {...}

}

class AList {

private int [] entries;

private int lb, ub, count;

private default_capacity = 10;

private default_increment = 10;

AList(){...}

AList( int initialCapacity ){...}

AList( int initialCapacity, int increment ){...}

void addFirst( int n ) {...}

void addLast( int n ) {...}

void removeFirst () {...}

void removeLast () {...}

int getFirst(){...}

int getLast(){...}

int [] toArray(){...}

Iterator iterator() {...}

}

1Die QuelldateiAList.javafinden Sie auf der Vorlesungseite im BereichMaterialien

(2)

class AListMain {

public static void main(String[] argf){

AList al = new AList(4);

al.addFirst(4);

al.addFirst(3);

al.addFirst(2);

al.addFirst(1);

// al=[1,2,3,4]

al.removeFirst();

al.removeFirst();

// al=[?,?,3,4]

al.addLast(5);

al.addLast(6);

al.addFirst(11);

// al=[11,3,4,5,6,?,?,?]

Iterator iter = al.iterator();

System.out.println

("Das Array enth\"alt die folgenden Elemente:");

while( iter.hasNext() ){

System.out.println( iter.next() );

} } }

a) Implementieren Sie die Konstruktor-MethodeAList()vonAList. Beim Erzeugen eines neuenAList-Objekts durch den Aufruf dieses Konstruktors sollen die Instanzvariablen wie folgt initialisiert werden: Die Instanzvariable entriessoll ein neu-alloziertes Feld der Längedefault_capacityreferenzieren. Der Wert vonlb,ubund countsoll auf auf 0 gesetzt werden.

b) Implementieren Sie die Konstruktor-MethodeAList(int initialCapacity)vonAList. Beim Erzeugen eines neuenAList-Objekts durch den Aufruf dieses Konstruktors werden alle Instanzvariablen bis aufentries wie beim KonstruktorAList()initialisiert. Die Instanzvariableentriessoll ein neu-alloziertes Feld der Länge initialcapacityreferenzieren.

c) Implementieren Sie die Konstruktor-Methode AList(int initialCapacity, int increment)von AList. Beim Erzeugen eines neuenAList-Objekts durch den Aufruf dieses Konstruktors werden alle Instanz- variablen bis aufentriesund default_incrementwie beim KonstruktorAList()initialisiert. Die In- stanzvariableentriessoll ein neu-alloziertes Feld der Längeinitialcapacityreferenzieren. Die Klassen- variabledefault_incrementsoll auf den Wertincrementgesetzt werden.

d) Implementieren Sie die MethodeaddFirst(int n), die folgendermaßen anhand von drei Beipielen spezifiert wird:

Referenziert die Instanzvariableentriesein Feld, das die Form[?,?, i0, i1, i2,?,?]hat, und haben die Instanz- variablen lb, ubund count entsprechend die Werte 2, 5 und 3, dann soll dieses Feld nach dem Aufruf von addFirst(i3)die Form[?, i3, i0, i1, i2,?,?]haben und der Werte vonlbundcount entsprechend auf1und 4 gesetzt werden.

Referenziert die Instanzvariableentriesein Feld, das die Form[i0, i1, i2,?,?,?,?]hat, und haben die Instanz- variablen lb, ubund count entsprechend die Werte 0, 3 und 3, dann soll dieses Feld nach dem Aufruf von addFirst(i4)die Form[i4, i0, i1, i2,?,?,?]haben und der Werte vonubundcountentsprechend auf4 und4 gesetzt werden.

Referenziert die Instanzvariableentriesein Feld, das die Form[i0, i1, i2, i3]hat, und haben die Instanzvariablen lb,ub,countunddefaul_incremententsprechend die Werte0,4,4und5, dann soll dieses Feld nach dem Auf- ruf vonaddFirst(i4)die Form[i4, i0, i1, i2, i3,?,?,?,?]haben und der Werte vonubundcountentsprechend auf4und5gesetzt werden.

e) Implementieren Sie die MethodeaddLast(int n), deren Funktionalität analog zu der vonaddFirst(int n)ist.

f) Implementieren Sie die MethoderemoveFirst(), die folgendermaßen anhand von zwei Beispielen spezifiert wird:

Referenziert die Instanzvariableentriesein Feld, das die Form[?,?, i0, i1, i2,?,?]hat, und haben die Instanz- variablen lb, ubund count entsprechend die Werte 2, 5 und 3, dann soll dieses Feld nach dem Aufruf von

(3)

removeFirst()die Form[?,?,?, i1, i2,?,?]haben und die Werte vonlbund countentsprechend auf3 und2 gesetzt werden.

Referenziert die Instanzvariableentriesein Feld, das die Form[i0, i1, i2,?,?,?,?]hat, und haben die Instanz- variablen lb, ubund count entsprechend die Werte 0, 3 und 3, dann soll dieses Feld nach dem Aufruf von removeFirst()die Form[i1, i2,?,?,?,?,?]haben und die Werte vonubsollen entsprechend auf2und2gesetzt werden.

Die Länge des Feldesentrieswird beim Entfernen des Elementes nicht angepasst.

g) Implementieren Sie die MethoderemoveLast(), deren Funktionalität analog zu der von removeFirst() ist.

h) Implementieren Sie die MethodegetFirst(), welche die folgende Funktionalität besitzt:

Referenziert die Instanzvariableentriesein Feld, das die Form[?,?, i0, i1, i2,?,?]hat, und hat die Instanzva- riablelbden Wert2, dann sollgetFirst()den Werti0zurückgeben.

i) Implementieren Sie die MethodegetLast(), deren Funktionalität analog zu der vongetFirst()ist.

j) Implementieren Sie die MethodetoArray(), die folgendermaßen anhand eines Beispiels spezifiziert wird:

Referenziert die Instanzvariableentriesein Feld, das die Form[?,?, i0, i1, i2,?,?]hat, und haben die Instanzva- riablenlbundubentsprechend die Werte2und5, dann soll die Methode ein Feld der Form[i0, i1, i2]zurückgeben.

k) Implementieren Sie die KlasseIteratorund die Methodeiterator()der KlasseAListnach dem in der Vorlesung vorgestellten Muster.

Aufgabe 2 Klasseninvariante (4 Punkte)

Geben Sie die Invariante der KlasseAListan.

Hinweis: Eine Klasseninvariante hat die allgemeine Form: \invariant E mit E ein Ausdruck, der eine Funktion der Instanz- und Klassenvariablen ist.

Aufgabe 3 Klasse AListModulo (praktisch) (6 Punkte)

Wie Sie an den Beispielen in Aufgabe 1 gesehen haben, verschieben die Methoden addFirst(int n) und addLast(int n)alle im AList-Objekt gespeicherten Elemente nach links beziehungsweise nach rechts wenn das Inkrementieren beziehungsweise das Dekrementieren vonlboderubnicht möglich ist. Dieses Vorgehen ist inef- fizient, da im schlechtesten FallO(entries.length)Listen-Elemente kopiert werden müssen.

Schreiben Sie die Deklaration einer KlasseAListModuloin der Sie effizientere Versionen der oben genannten Methoden implementieren. Die verbesserten Versionen sollen das Verschieben der Elemente vermeiden.

Hinweise:

1. Referenziert die Instanzvariableentriesein Feld der Form[?,?,?, i0, i1]und ist der Wert vonubgleich5, dann kann die MethodeaddLastein einzufügendes Elementi2an der Stelleentries[0]speichern, wobei Sie beachten sollten, dass0das Ergebnis von5mod5ist.

2. Beachten Sie auch, dass die MethodetoArray auch entsprechend geändert werden muss. Referenziert die Instanzvariableentriesein Feld, das die Form[i3, i4,?,?,?, i0, i1, i2]hat, und haben die Instanzvariablenlb undubentsprechend die Werte5und2, dann soll die Methode ein Feld der Form[i0, i1, i2, i3, i4]zurückgeben.

Referenzen

ÄHNLICHE DOKUMENTE

a) Implementieren Sie eine ML-Funktion ausgabe : buchdatenbank → bucheintrag list, die eine Buchdatenbank db als Parameter nimmt und eine sortierte Liste alle Bucheinträge in

a) Schreiben Sie eine ML-Funktion binsearch : : int list → int option, die eine aufsteigend sortierte Liste ganzer Zahlen l und eine ganze Zahl k als Eingabe nimmt und in l nach

Ist die Warteschlange q nicht leer und ist das vorderste Element von q ein Zeichen c, dann wird von der Funktion SOME (c, q 0 ) zurückgegeben, wobei q 0 eine Warteschlange ist, die

Die Klasse soll genau eine Deklaration einer statischen Methode public static AListModulo selection_sort( AListModulo l) {...} enthalten. Die Methode wird folgendermaßen spezifiert:.

Kontrollen können auch kurzfristig an anderen Stellen

Der Konzern- fehlbetrag für die ersten neun Monate 2007 beträgt minus 34,7 Mio Euro, der Konzernüberschuss der SBS Broadcasting Group seit Konzernzugehörigkeit zur

- Diese Algorithmen liefern nie eine unkorrekte Antwort, jeoch besteht die M¨oglichkeit, dass keine Antwort gefunden wird.. Beispiel f¨ ur Las

Patrick Kurtz, Bundesanstalt für Arbeitsschutz und Arbeitsmedizin Effect of noise exposure in the entertainment sector?. Esko Toppila, Finnish Institute of Occupational Health