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?