Informatik I WS 05/06

Werbung
Informatik I WS 05/06
Prof. Dr. W. May
Dipl.-Inform. Oliver
Fritzen
Übungsblatt
8
Ausgegeben
am:
16.12.2005
Abgabe bis:
10.1.2006
(Theorie)
13.1.2006
(Praktisch)
Dipl.-Inform. Christian
Kubczak
Thema: Sortieren, Objektorientierung
Die Praxis-Aufgaben auf diesem Übungsblatt bearbeiten Sie bitte am Rechner und
führen Sie Ihrem Tutor vor. Die Theorie-Aufgaben bearbeiten Sie bitte und werfen die
Lösungen zum oben genannten Termin in die Zettelkästen im Erdgeschoss der NAM.
Eine Bearbeitung in Zweier-Teams innerhalb Ihrer Übungsgruppe ist möglich. Nutzen
Sie zum Testieren auch das Angebot der abendlichen Freien Übungen.
Leider ist bei Aufgabe 1 auf diesem Zettel ein kleines Missgeschick passiert. Deswegen kursiert der
Zettel nun mit 2 verwandten, aber unterschiedlichen Versionen von Aufgabe 1.
Um niemanden zu benachteiligen, wird das ganze wie folgt geregelt:
Auf diesem, dem vorliegenden Zettel hier ist eine neue Aufgabe 1, die beide Versionen von Aufgabe 1
auf den alten Zetteln umfasst. Statt wie vorher 20 Punkten gibt es hierfür nun 20 Punkte + 20
Extra-Punkte (der Zettel wird weiterhin mit 100 Punkten gewichtet, man kann nun maximal 120 von
100 Punkten erreichen). Es entsteht also niemandem ein Nachteil, egal welche Version man bisher
bearbeitet hat. Sorry for the inconvenience!
Aufgabe 1 (Praktisch: 20+20* Punkte):
Bundesliga
1. Schreiben sie die Klasse Sortierer mit einer statischen Methode void
sortiere(Comparable[] array) (siehe Vorlesung Abschnitt 5.4), die ein Feld von
Objekten - die das Interface Comparable implementieren - anhand deren
compareTo-Methode sortiert. Verwenden Sie dazu einen der bekannten Sortieralgorithmen mit
Laufzeit O(n log n) aus der Vorlesung.
2. Implementieren sie nun für das Bundesliga-Beispiel die Methode compareTo() und wenden
sie den Sortierer darauf an.
Die Klassen Team.java, Bundesliga.java und BundesligaTest.java liegen wie üblich
im Java-Verzeichnis zum Download bereit.
Aufgabe 2 (Praktisch: 50 Punkte):
Arithmetische Formeln als Objekte darstellen
Betrachten Sie folgende Grammatik, die arithmetische Ausdrücke über Integerwerte und die
Operatoren + und * beschreibt:
<Formula> ::= <Number> | <Operator>
<Operator>::= "(" <Formula><OpCode><Formula> ")"
<OpCode> ::= "+" | "*"
sowie das korrespondierende UML-Diagramm:
Implementieren sie die Klassen gemäß dem obigen UML-Klassendiagramm so dass man damit die
oben beschriebenen Formeln repräsentieren kann. Insbesondere:
1. Implementieren sie, wie im Diagramm vorgegeben, die Methoden getValue(), equals(),
clone() und toString().
Berücksichtigen sie für equals() dass die Formeln
f = (3+7)*5 und g = 5*(7+3)
nur den gleichen numerischen Wert ergeben, aber unterschiedliche Formeln sind.
f.equals(g) muss also ein "false" liefern. (25 Punkte)
2. Formula enthält eine abstrakte Methode compareTo(Object other) um zwei Formeln
gemäß ihrer numerischen Werte, die sie repräsentieren, zu vergleichen. Schreiben sie für jede
nicht-abstrakte Subklasse von Formula eine Implementierung. (10 Punkte)
3. Schreiben sie eine Methode public Formula expand() die ein Produkt ausmultipliziert
(z.B. a * (b + c) = a*b + a*c ). Ergebnis sollte stets ein neues Objekt sein das die
ausmultiplizierte Teilformel repräsentiert. Welche Fälle sind beim Ausmultiplizieren zu
unterscheiden? (15 Punkte)
Testen sie ihre Klassen mit der Klasse FormulaTest.java im Java-Verzeichnis.
die Interfaces Clonable und Comparable sind Teil des Java-APIs und damit bereits vorgegeben,
sie müssen sie nur benutzen.
Signaturen und Beschreibungen zu den generischen Operationen equals(), clone() finden sie
unter http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html ,
die Interfaces Clonable und Comparable sind unter
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html
und http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html beschrieben.
Aufgabe 3 (Theoretisch: 30 Punkte):
David und Victoria
Hinweis: Bearbeiten sie diese Frage theoretisch - auch die Code-Fragmente - und geben sie die
Lösung auf Papier ab. Dies ist keine Testataufgabe!
Betrachten sie obiges UML-Diagramm, versehen mit folgenden Zusatzinformationen:
Berühmtheiten, Sportler, Ehefrauen und Ehemänner sind offenbar allesamt Personen
Victoria ist berühmt und gleichzeitig Davids Ehefrau.
David ist Victorias Ehemann und gleichzeitig Sportler.
Ehefrauen antworten bei Interviews stets: "Da muss ich erst meinen Mann fragen."
Ehemänner antworten bei Interviews stets: "Da muss ich erst meine Frau fragen."
Berühmtheiten fragen bei Interviews stets: "Wird das heute noch gesendet?"
Sportler antworten bei Interviews stets: "Ja, ich sach mal ..."
Bei Victoria steht der Beruf im Vordergrund, während bei David die Familie (= Ehe) zuerst
kommt.
Aufgabenstellung:
1. Handelt es sich bei der Beziehung hasWife bzw hasHusband um eine Aggregation oder um
eine Komposition? Begründung.
2. Lösen sie die Fälle von Mehrfachvererbung im Diagramm durch Delegation auf (Lösung als
UML-Diagramm angeben)
3. Geben sie die Implementierungen von StarAndWife und HusbandAndAthlete als Code an
(auf Papier). Was antwortet Victoria bei der Frage nach einem Interview? Was antwortet David?
Herunterladen