Beruflich Dokumente
Kultur Dokumente
Übungsblatt 7
Übung 1 GrowableStack
In Übungsblatt 5, Übung 1, haben Sie die Klasse Stack implementiert. In dieser Übung s
ollen
Sie eine Klasse GrowableStack schreiben, die von Stack erbt.
Ein Stack zählt prinzipiell zu den dynamischen Datenstrukturen, weil er beliebig v
iele Objekte
speichern kann. In der Klasse Stack aus dem 5. Übungsblatt speichern wir die Stack
-
Elemente allerdings in einer statischen Datenstruktur, nämlich in einem Array. Die
Größe eines
Stack-Objekts wird bei dessen Erzeugung festgelegt und kann dann nicht mehr geände
rt
werden.
Nun sollen Sie eine Klasse GrowableStack schreiben, die den Kellerspeicher autom
atisch
vergrößert, wenn er voll ist und ein neues Element auf den Keller gelegt werden soll
.
GrowableStack soll zwar ebenfalls wie seine Superklasse mit einem Array implemen
tiert
werden, ist aber dynamisch, weil die Größe des Kellerspeichers an den tatsächlichen Be
darf
angepasst wird.
Zur Vergrößerung des Kellers muss ein neues doppelt so großes Array angelegt werden. A
lle
bisher im kleinen Stack gespeicherten Elemente müssen in das größere Array kopiert wer
den.
Fügen Sie in der Klasse Stack die Methoden getLength() und isOverflow() ein, um di
e
Anzahl der im Stack gespeicherten Objekte zurückzugeben und um festzustellen, ob d
er Stack
voll ist. Die private Variable overflow kann, sofern sie nicht mehr gebraucht wi
rd, gelöscht
werden. Überlegen Sie, ob man auch die Variable underflow einsparen kann.
GrowableStack soll natürlich auch auf die Methoden push, pop, top und isEmpty von
Stack zugreifen können. Ggf. müssen Sie dafür einige kleine Änderungen in der Klasse Sta
ck
durchführen. Schränken Sie die Sichtbarkeit der Variablen in der Klasse Stack geeign
et ein.
Übung 2 Polymorphie
Finden Sie heraus, welche Methode untersuche bei den 4 Methodenaufrufen in der m
ain-
Methode aufgerufen werden. Erklären Sie, was bei den einzelnen Methodenaufrufen ge
nau
passiert. Tipp: Modifizieren Sie die Klassen untersuche, stillHalten und tapferS
ein
geeignet, sodass Sie auch überschriebene Methoden von einander unterscheiden können.
Person.java
1
public class Person {
2
public void stillHalten() {
3
}
4
}
Kind.java
1
public class Kind extends Person {
2
public void tapferSein() {
3
}
4
}
Arzt.java
1
public class Arzt {
2
public void untersuche(Person person) {
3
person.stillHalten();
4
}
5
}
Kinderarzt.java
1
public class Kinderarzt extends Arzt {
2
public void untersuche(Kind kind) {
3
kind.stillHalten();
4
kind.tapferSein();
5
}
6
}
Main.java
1
public class Main {
2
public static void main(String[] args) {
3
Kinderarzt kinderarzt = new Kinderarzt();
4
Arzt arzt = kinderarzt;
5
Person person = new Person();
6
Kind kind = new Kind();
7
8
arzt.untersuche(person);
9
arzt.untersuche(kind);
10
11
kinderarzt.untersuche(person);
12
kinderarzt.untersuche(kind);
13
}
14
}
Bonusaufgabe aus Übungsblatt 7 (12 Punkte)
Diese Aufgabe können Sie alleine oder zu zweit lösen. Falls Sie sich für eine Partnera
rbeit
entscheiden, schreiben Sie bitte die Namen der beiden Programmierer in einen
dokumentierenden Kommentar vor den Klassenkopf einer jeden Klasse.
Die Paararbeit soll nur einmal in Moodle hochgeladen werden. Das erleichtert den
Übungsgruppenleitern die Korrektur Ihrer Arbeiten und Sie erhalten schneller einen
Kommentar
zu Ihrem Programm und die Bonuspunkte. Beiden Partnern werden ggf. Bonuspunkte
gutgeschrieben. (Bei Partnerarbeit müssen Sie sich nicht die Bonuspunkte teilen, d
.h. es ist
durchaus möglich, dass beiden Partnern jeweils 12 Punkte gutgeschrieben werden.)
Diese Aufgabe behandelt sowohl die 7. als auch die 8. Vorlesung. Deshalb haben S
ie zur
Bearbeitung dieser Aufgabe eine Woche mehr Zeit. Ihre Lösung müssen Sie also erst bi
s
spätestens 10. Dezember 2010, 18 Uhr in Moodle hochladen.
Partnerarbeit:
Falls Sie diese Aufgabe zu zweit bearbeiten wollen, sollten Sie eine der zwei fo
lgenden
Vorgehensweisen wählen.
1. Pairprogramming: Bei der Erstellung des Quellcodes arbeiten jeweils zwei
Programmierer an einem Rechner. Ein Programmierer schreibt den Code, während der
andere über die Problemstellung nachdenkt, den geschriebenen Code kontrolliert und
Probleme, die ihm dabei auffallen, sofort anspricht. Diese können dann sofort im
Gespräch zu zweit gelöst werden. Die beiden Programmierer sollten sich bezüglich
dieser beiden Rollen abwechseln.