16.01.2014 Aufrufe

Klausurhinweise Fortgeschrittene Programmiertechnik Angewandte ...

Klausurhinweise Fortgeschrittene Programmiertechnik Angewandte ...

Klausurhinweise Fortgeschrittene Programmiertechnik Angewandte ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!