Klausurhinweise Fortgeschrittene Programmiertechnik Angewandte ...
Klausurhinweise Fortgeschrittene Programmiertechnik Angewandte ...
Klausurhinweise Fortgeschrittene Programmiertechnik Angewandte ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Hochschule Konstanz 19.02.2013<br />
Fakultät Informatik<br />
Prof. Dr. O. Bittel<br />
<strong>Klausurhinweise</strong><br />
<strong>Fortgeschrittene</strong> <strong>Programmiertechnik</strong><br />
<strong>Angewandte</strong> Informatik<br />
Bachelor<br />
1 Allgemeines<br />
• Die Klausur ist ohne Hilfsmittel!<br />
• Sie dürfen ein beidseitig beschriebenes DIN A4 Blatt mitbringen.<br />
• Die Beschreibung der Java-Collections (siehe Anhang A in den Vorlesungsunterlagen) wird zur<br />
Verfügung gestellt.<br />
• Bringen Sie bitte Schreibstifte mit (unterschiedliche Farben; möglichst kein Rotstift).<br />
• Papier wird zur Verfügung gestellt.<br />
• Es werden Wissensfragen gestellt. Beispiel: „Was ist eine abstrakte Klasse?“<br />
• Es wird algorithmisches Wissen abgefragt.<br />
Beispiele: „Sortieren Sie folgende Zahlen mit Quicksort ...“.<br />
Fügen Sie folgende Zahlen in einen binären Suchbaum ein: ...“<br />
• Fragen zu Programmbeispielen. Es wird Jave-Code vorgegeben. Es sind Fragen dazu zu<br />
beantworten. Beispiel: „Was gibt das folgende Programm aus?“<br />
• Programmieraufgaben. Beispiele: „Vervollständigen Sie folgende Klasse“.<br />
„Schreiben Sie eine rekursive Javamethode“.<br />
• In der Klausur lassen sich insgesamt 120 Punkte erreichen (entspricht 120 Min.).<br />
Voraussichtlich 4.0 bei 50 Punkten und 1.0 bei 110 Punkten.<br />
2 Grundlagen<br />
Datentyp, Primitive Datentypen, Referenztypen, Objekte, Klassen, Interface, Implementierung,<br />
dynamische Bindung, Vererbung, Überschreiben und Überladen, Reifenfolge bei Konstruktoraufrufen,<br />
Zugriffsrechte, Klasse Object, abstrakte Klassen, Schablonenmuster, Subtyp, Zuweisungsregel,<br />
Kovarianz von Feldern.<br />
Typische Wissens-Fragen:<br />
• Was ist der Unterschied zwischen Referenztypen und primitive Datentypen?<br />
• Welche Referenztypen gibt es in Java (2 Angaben)?<br />
1/4
• Erklären Sie die Begriffe statischer und dynamischer Typ einer Variable. Was bedeutet<br />
dynamische Bindung (1 Satz)?<br />
• Was ist ein Interface?<br />
• Was ist eine abstrakte Klasse?<br />
• ...<br />
Typische Programmieraufgaben bzw. Fragen zu Programmbeispielen:<br />
• Code-Beispiel mit Konstruktoraufrufen vorgegeben. Reihenfolge herausfinden.<br />
• Code-Beispiel zu Vererbung und Interface. Fragen dazu. Code ergänzen.<br />
• Code-Beispiel zu Kovarianz von Feldern.<br />
• Codebeispiel zu Zuweisungsregel. Fragen nach korrekter Typisierung beantworten.<br />
• Code-Beispiel vorgegeben. Speicherbelegung angeben.<br />
3 Programmiermethodik<br />
• Kapselung, Geheimnisprinzip, Verletzung des Geheimnisprinzips.<br />
• Substitutionsprinzip.<br />
• immutable Klassen (Vor- und Nachteile).<br />
• Vertragsbasiertes Programmieren: Precondition, Postcondition und Invariante.<br />
4 Datentyp Liste<br />
• Liste<br />
• Liste als Feld<br />
• einfach verkettete Liste, Hilfskopfknoten, Liste als einfach verkettete Liste<br />
• doppelt verkettete Liste<br />
• sortierte Liste<br />
• A 3.1 bis A 3.7.<br />
5 Datentyp Keller und Schlange<br />
• Keller, Keller als Feld, Keller als einfach verkettete Liste,<br />
• Schlange, Schlange als zirkuläres Feld,<br />
Schlange als linear verkettete Liste mit Zeiger auf vorderem und hinterem Ende der Schlange.<br />
6 Generische Datentypen – Teil 1<br />
• Unterscheide: polymorpher Container (z.B. polymorpher Keller) durch Vererbung oder durch<br />
Generizität.<br />
• Generische Klasse und parameterisierter Typ.<br />
• Hüllklassen.<br />
• Type Erasure Technik. Reifikation im Zusammenhang mit Feldern.<br />
2/4
• Iteratorkonzept. For-each-Schleife. Iterator- und Iterable-Interface (Man muss das Interface nicht<br />
auswendig können. Wenn es jedoch als API-Beschreibung gegeben ist, dann sollte es eingesetzt<br />
werden können.). Verstehen wie Iteratoren bei linear verketteten Listen bzw. Feldern als innere<br />
Klassen implementiert werden können.<br />
• Collection, List, Queue, Deque, ArrayList, LinkedList und ArrayDeque. API muss<br />
selbstverständlich nicht auswendig gewusst werden. Man sollte jedoch in der Lage sein, bei<br />
Vorgabe eines Teils der API die Collection-Klassen anwenden zu können.<br />
7 Rekursion<br />
• Rekursionstiefe, Zusammenhang zwischen Rekursionstiefe und System-Stack.<br />
• Rekursion über Felder und linear verkettete Listen.<br />
• Teile-und-Hersche-Verfahren.<br />
• Eliminierung der Endrekursion.<br />
• Besprochene Beispiele von rekursiven Funktionen verstanden haben.<br />
8 Komplexitätsanalyse<br />
• Definition Laufzeit eines Algorithmus.<br />
• Größenordnung mit O-Notation. Verschiedene Größenordnungen verstehen und vergleichen<br />
können.<br />
• Laufzeitanalyse bei einfachen Schleifenbeispielen.<br />
• Worst-Case-Analyse bei Fallunterscheidungen und while-Schleifen.<br />
Einfache Beispiele analysieren können.<br />
• Aufrufstruktur-Methode bei rekursiven Funktionen.<br />
• Laufzeiten für verschiedene Typen von Teile-und-Herrsche-Funktion (4 Typen) wissen und<br />
anwenden können.<br />
9 Sortierverfahren<br />
• Sortieren durch Einfügen, Auswählen, Vertauschen, QuickSort (mit und ohne Drei-Median-<br />
Strategie), MergeSort und HeapSort (inklusive Heap-Begriff) verstanden haben und auf<br />
Zahlenbeispiele anwenden können.<br />
• Worst-Case-Problematik bei QuickSort verstanden haben.<br />
• Stabilität von Sortierverfahren.<br />
10 Bäume<br />
• Definition von Bäumen. Begriffe: Wurzel, Kindknoten, Elternknoten, Tiefe eines Knotens, Höhe<br />
eines Baums, Ebene eine Baums.<br />
• Spezialfälle: Binärbäume und vollständige Binärbäume.<br />
• Implementierung von Bäumen: verkettete Strukturen bei Binärbäumen, Liste mit<br />
Geschwisterknoten bei allgemeinen Bäumen, Felder bei Binärbäumen. Java-Funktionen verstehen<br />
bzw. Teile selbst schreiben können.<br />
• Durchlaufen von Bäumen: pre-order, post-order, in-order, level-order.<br />
3/4
• Binäre Suchbäume: Definition, Suchen, Einfügen und Löschen von Zahlen beispielhaft<br />
durchführen können.<br />
• Aufgaben 9.2 bis 9.8.<br />
11 Generische Datentypen – Teil 2<br />
• Generische Methoden.<br />
• Typbeschränkung, z.B. . Interface Comparator.<br />
• Wildcards mit oberen bzw. unteren Typschranken. Typisierungsregeln. PECS-Prinzip.<br />
• Collection Set und TreeSet. Collection Map und TreeMap.<br />
• Generische Such- und Sortiermethoden aus java.util.Arrays und java.util.Collections:<br />
API lesen, verstehen und anwenden können.<br />
12 GUI-Programmierung<br />
• Aufbau eines JFrame verstehen.<br />
• Hierarchische Containerstruktur verstehen.<br />
• Einige Bedienelemente nennen und Ihre Funktionalität beschreiben können.<br />
• Ereignisverarbeitung verstanden haben: Ereignisse (events), Beobachter (Listener) und<br />
Registrierung von Beobachter bei Bedienelementen, Aufruf von Beobachtern bei Ereignissen).<br />
• Typische Architekturen von GUI-Programmen kennen.<br />
13 Entwutfsmuster<br />
• Entwurfsmuster verstehen und anwenden können.<br />
4/4