Seite 1 von 11 Objektorientierte Programmierung Name: Zeit: 120 Minuten (2 Stunden) Programmiersprache Java 8 Nr. Aufgabe 1 Theoriemix 20 2 Matrix-Transposition 20 3 Organigramm 20 4 Vorlesungskalender 20 5 Textanalyse 20 6 Huffman-Codierung 20 max. Punkte Total 120 Punkte Seite 1 von 11
Seite 2 von 11 Aufgabe 1: Theoriemix a) (4P) Welchen Wert und Typ ergeben folgende Ausdrücke? Geben Sie an, falls es dabei Fehler gibt. Ausdruck Ergebniswert Ergebnistyp 1 + 2 * 3 1 < 2-3 / 2-3.0 / 2 1 / 0 1 / 0.0 "ABC".equals("abc") '9' - '0' b) (4P) Bestimmen Sie die Variablenzustände nach den folgenden Anweisungen. int a = 0, b = 0, c = 0; boolean d = (a++ > 0 && b-- < 0) --c < 0; Variable a Zustand am Schluss b c D c) (8P) Gegeben sind zwei Klassen. class Figure { public void surround(figure other) { /* Methode 1 */ } } public void surround(rectangle other) { /* Methode 2 */ } class Rectangle extends Figure { @Override public void surround(figure other) { /* Methode 3 */ } } @Override public void surround(rectangle other) { /* Methode 4 */ } Welche der obigen Methoden wird nachfolgend jeweils aufgerufen? Begründen Sie kurz. Rectangle a = new Rectangle(); Rectangle b = new Rectangle(); a.surround(b); Methode 1 Methode 2 Methode 3 Methode 4 Grund: Seite 2 von 11
Seite 3 von 11 Figure a = new Rectangle(); Rectangle b = new Rectangle(); a.surround(b); Methode 1 Methode 2 Methode 3 Methode 4 Grund: Rectangle a = new Rectangle(); Figure b = new Rectangle(); a.surround(b); Methode 1 Methode 2 Methode 3 Methode 4 Grund: Figure a = new Rectangle(); Figure b = new Rectangle(); a.surround(b); Methode 1 Methode 2 Methode 3 Methode 4 Grund: d) (4P) Was geschieht bei der Ausführung der Methode test(). Geben Sie die einzelnen Schritte an. void test() { int[] array = null; try { System.out.println("first"); System.out.println(array[0]); System.out.println("last"); System.out.println(array[array.length - 1]); } catch(nullpointerexception e) { System.out.println("null"); } catch(arrayindexoutofboundsexception e) { System.out.println("empty"); } finally { System.out.println("length"); System.out.println(array.length); } } Seite 3 von 11
Seite 4 von 11 Aufgabe 2: Matrix-Transposition Eine Matrix-Transposition spiegelt Zeilen und Spalten, d.h. die erste Spalte wird die erste Zeile, die zweite Spalte die zweite Zeile und so weiter. Beispiel: Vorher 1 2 3 4 5 6 Nachher 1 4 2 5 3 6 Implementieren Sie eine Methode, welche eine Matrix transponiert. Die Matrix kann als int[][] repräsentiert werden. Behandeln Sie Fehlerfälle bei einem ungültigen Matrix-Argument. Seite 4 von 11
Aufgabe 3: Organigramm Objektorientierte Programmierung Ein Organigramm regelt die Vorgesetzen-Hierarchien in einem Unternehmen. Seite 5 von 11 Beispiel: Anna Meier Geschäftsführung Peter Müller Leiter Entwicklung Claudia Kaufmann Leiterin Verkauf Reto Zahler Buchhaltung Klaus Schmid Ingenieur Frank Schnell Senior-Verkäufer Pia Schneider Ingenieurin Joe Do Praktikant - Peter Müller ist direkter Vorgesetzter von Klaus Schmid und direkter Unterstellter von Anna Meier. Hinweis: Ihre Lösung muss allgemein sein und nicht nur das Beispiel unterstützen a) (5P) Designen Sie Klasse(n), um Organigramme zu verwalten. Konstruktoren und Getter/Setter können Sie weglassen. Seite 5 von 11
Seite 6 von 11 b) (8P) Für einen Angestellten sollen alle seine direkten und indirekten Unterstellten gezählt werden. Implementieren Sie eine Methode. c) (7P) Für einen Angestellten sollen alle seine direkten und indirekten Vorgesetzten als Liste (von unten nach oben) bestimmt werden. Implementieren Sie eine Methode. Seite 6 von 11
Seite 7 von 11 Aufgabe 4: Vorlesungskalender An der Hochschule gibt es verschiedene Studienprogramme: Bachelor, Master sowie spezielle Nachdiplomstudien (Advanced Studies). Im Rektoratssystem werden die verschiedenen Studienprogramme (Degrees) per Enum-Typ dargestellt: enum Degree { Bachelor, Master, AdvancedStudies } class Lecture { Lecture(Degree degree, String name) { } } Degree getdegree() { } String getname() { } a) (10P) Die Vorlesungsdauer variiert nach Studienprogramm (siehe Tabelle). Schreiben Sie eine neue Methode getnofweeks() für die Klasse Lecture, welche die Anzahl Wochen zurückgibt. Studienprogramm Anzahl Wochen Bachelor 14 Master 18 AdvancedStudies 6 b) (10P) Das Design mit dem Enum-Typ ist unbefriedigend. Entwerfen Sie eine Alternative mit Typ- Polymorphismus. Das Ziel ist es, dass es kein if oder switch innerhalb getnofweeks() braucht. Irrelevante Code-Teile können Sie einfach auslassen. Seite 7 von 11
Seite 8 von 11 Seite 8 von 11
Seite 9 von 11 Aufgabe 5: Textanalyse Eine Textdatei soll analysiert werden. Pro vorkommendes Textzeichen (inkl. Leerzeichen und Sonderzeichen) soll bestimmt werden, wie viele Male es vorkommt. Beispiel: This is a text. Analyze it! Vorkommen: 'T' -> 1 'h' -> 1 'i' -> 3 's' -> 2 'a' -> 2 't' -> 3 'e' -> 2 '. ' -> 1 Und so weiter. Programmieren Sie eine Logik, welche eine beliebige Textdatei einliest und die Zeichenvorkommen darin berechnet. Encoding und IOException können Sie ignorieren. Java API Auszug Klasse FileReader FileReader(String path) throws IOException int read() throws IOException void close() Konstruktor. Öffnet Textfile zum Lesen. Eine positive Rückgabe codiert ein Textzeichen. Rückgabe -1 bedeutet end of file. Textstrom schliessen. Seite 9 von 11
Seite 10 von 11 Aufgabe 6: Huffman-Codierung Angenommen, man kennt für jeden Buchstaben die Häufigkeit seines Vorkommens. Beispiel (mit beschränkter Anzahl Buchstaben): Buchstabe Häufigkeit e 0.4 (d.h. 40%) t 0.3 (d.h. 30%) s 0.2 (d.h. 20%) r 0.1 (d.h. 10%) Dann lässt sich daraus ein Huffman-Baum als Objektstruktur erstellen. Huffman-Bäume sind binär, d.h. Zwischenknoten haben immer genau zwei Unterknoten. 1.0 e 0.4 0.6 t 0.3 0.3 s 0.2 r 0.1 Hinweis: Ihre Lösung muss allgemein sein und nicht nur das Beispiel unterstützen a) (5P) Designen Sie Klasse(n) für einen Huffman-Baum. Konstruktoren und Getter/Setter können Sie weglassen. Seite 10 von 11
Seite 11 von 11 b) (15P) Entwickeln Sie eine Logik, welche einen Huffman-Baum konstruiert. o Die Häufigkeit von Buchstaben sei in einer Map<Character, Double> gegeben (Abbildung jedes Buchstabens auf seine Häufigkeit). o Zu Beginn gibt es pro Buchstaben einen Teilbaum bestehend aus nur einem Knoten (dem Buchstaben und der Häufigkeit seines Buchstabens). o Die zwei Teilbäume mit den kleinsten Häufigkeiten werden zu einem neuen Teilbaum verschmolzen. Der neue Teilbaum hat die Summe der Häufigkeiten seiner zwei Teilbäume. o Dies wird solange wiederholt, bis es nur noch ein Baum übrigbleibt. Seite 11 von 11