Sie sind auf Seite 1von 10

»Grundlegende Programmiertechniken«, WS 2010/2011

Dipl.-Inform. Angela Klutsch


angela.klutsch <at> uni-due.de

Ü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.

Vorteil: höhere Codequalität, höhere Disziplin, Mentoring


Nachteil: meistens werden die Rollen nicht oder zu selten gewechselt
2. Aufgabenteilung: Teilen Sie die Aufgabe in zwei etwa gleichgroße Teile. Der ein
e
Programmierer bearbeitet den einen Teil, der zweite des anderen. Beiden
Programmierern ist es im Wesentlichen selbst überlassen, wie sie die Teilprobleme
lösen. Überlegen Sie sich im Vorfeld geeignete Schnittstellen, sodass Sie wechselsei
tig
die Klassen, Methoden, Interfaces etc. des anderen nutzen können, falls dies zur Lös
ung
der Gesamtaufgabe erforderlich ist. Überlegen Sie sich im Vorhinein Antworten zu
folgenden Fragen: Welche Sichtbarkeitsmodifikatoren sollten gewählt werden? Welche
Parameter braucht eine bestimmte Methode? Wie heißen die Pakete und Klassen des
Partners? Welche Interfaces, abstrakten Klassen etc. werden benutzt?

Vorteil: beide Programmierer arbeiten unabhängig von einander, Zeit- und


Ortsunabhängigkeit, sehr praxisorientiert
Nachteil: wechselseitige Abhängigkeit zur Lösung der Gesamtaufgabe, da die
Gesamtaufgaben nur gelöst werden kann, wenn beide Programmierer ihre Arbeit
gut erledigen, erfordert Disziplin von beiden Partnern
Aufgabenbeschreibung:
Sie sollen für einen Laden ein Programm zur Lagerverwaltung schreiben. Dafür sind für
alle
möglichen Artikelsorten Klassen anzulegen. Alle Artikel haben eine Artikelnummer,
eine
Bezeichnung, den aktuellen Lagerbestand des Artikels und natürlich einen Verkaufs-
und
Einstandspreis.
Je nachdem welche Artikel in diesem Laden verkauft werden, haben die Artikelsort
en
unterschiedliche Eigenschaften und Verhaltensweisen. Werden Bücher in Ihrem Laden
angeboten, sollen Sie zu jedem Buch die Seitenanzahl, den Verlag und den Name de
s ersten
Autors speichern können. Möglicherweise sollten verschiedene Genres unterschieden we
rden.
Bei Zeitschriften hingegen sind der Verlag und die Ausgabe interessant.
Werden Kleidungsstücke verkauft, sollte dokumentiert werden, welche Größen verfügbar sin
d
und wie viele Stück davon in welcher Größe im Lager sind. Bei Hosen können beispielsweis
e
Caprihosen, Badehosen, Stoffhosen, Lederhosen uvm. unterschieden werden. Ähnliche
Unterscheidungen kann man für andere Kleidungsstücke machen.
Bei der Lagerhaltung für einen Juwelier sollte zwischen Ringen, Ketten, Ohrringen
und Uhren
unterschieden werden, wobei es auch dabei wieder Untergruppierungen gibt, die mögl
ichst
genau abgebildet werden sollen. Möglicherweise hat der Juwelier auch einige Edelst
eine auf
Lager.
Eine Parfümerie verkauft diverse Cremes und Duftwässerchen, die in Kategorien einget
eilt
werden können. Manche Cremes enthalten Inhaltsstoffe, die für bestimmte Personengrup
pen
unverträglich sind, was Sie natürlich bei den entsprechenden Produkten kenntlich mac
hen
können müssen.
Entscheiden Sie sich zuerst für den Laden, für den Sie das Lagerhaltungsprogramm sch
reiben
wollen. Überlegen Sie sich, welche Artikel dieser Laden verkauft und welche Inform
ationen man
zu diesen Artikeln abfragen können möchte. Die oben beschriebenen Läden dienen nur zur
Ideenfindung.
Auf jeden Fall sollte es in Ihrer Lagerhaltung möglich sein, Artikel nachzubestell
en, sofern dies
sinnvoll ist. Beispielsweise macht es heute keinen Sinn Tageszeitungen von geste
rn oder
Ballkleider aus der Kollektion von letztem Jahr nachzubestellen. Für andere Artike
l, bei denen
es aber sinnvoll ist, sie nachzubestellen wie z.B. bei Büchern oder Suppendosen, s
ollte diese
Option vorhanden sein.
Möglicherweise ist es für Ihre Lagerhaltung wichtig zu wissen, welche Artikel z.B.
wasserempfindlich oder welche für Sportler, Kinder oder andere Personengruppen gee
ignet
sind. Auch solche Information sollten in Ihrem Lagerhaltungsprogramm berücksichtig
t werden.
Es soll außerdem möglich sein, Produkte zu verkaufen und angeliefert zu bekommen, wo
durch
sich der Lagerbestand der jeweiligen Artikel ändert.
Die Buchhalterin wünscht sich für die jährliche Inventur eine Funktion, mit der eine L
iste der
eingelagerten Artikel samt Anzahl und Gesamtwert ausgegeben werden kann.
Überlegen Sie sich auch zum Punkt Lagerhaltung eigene Problemfälle. Die oben angeführt
en
dienen nur zur Ideenfindung. Verwenden Sie Interfaces und abstrakte Klassen, wo
es sinnvoll
ist.
Schreiben Sie einen main-Methode, damit man einige Ihrer Methoden ausprobieren k
ann.
Die volle Punkteanzahl gibt es nur für besonders kreative Lösungen.
Dokumentieren Sie Ihren Programmcode ausreichend, sodass ihn auch Dritte aber au
ch Ihr
Partner problemlos lesen und verstehen können. Schreiben Sie Ihre/n Namen in einen
dokumentierenden Kommentar neben den Tag @author.
Zippen Sie Ihre Quellcodedatei(en), d.h. die relevanten Dateien mit der Endung .
java, und
laden Sie diese gezippte Datei bis spätestens 10. Dezember 2010 18 Uhr (einmal) in
Moodle
hoch. Die gezippte Datei sollte den Namen <Ihr/e Nachname/n>_bonus7.zip haben.