Programmiertechnik II
Sommersemester 2018Überblick
Die Lehrveranstaltung vermittelt Theorie und Praxis der Programmierung von Software am Beispiel der Sprachen Java und Prolog.
Diskutiert werden Algorithmen und Datenstrukturen zum Sortieren und Suchen, Graphenalgorithmen, Algorithmen und Datenstrukturen zur Implementierung objekt-orientierter Sprachen sowie die deklarative Programmierung. Diese Inhalte werden in den allgemeineren Kontext der Softwareproduktion eingebettet.
Termine:
Vorlesung:
- Di 13:30-15:00, HS1
- Do 09:15-10:45, HS1
Übungen finden ungefähr alle 2 Wochen zum Vorlesungstermin am Donnerstag statt. Zu den Übungen werden Übungsaufgaben ausgegeben (insgesamt 6 Serien). Diese sollen in Zweier-Gruppen bearbeitet und den Tutoren präsentiert werden. Für eine Zulassung zur Klausur ist der Erwerb von mindestens 50% aller Punkte der jeweiligen Übungsaufgaben erforderlich.
Lösungen zu den Übungsaufgaben müssen über das Abgabesystem unter http://osm.hpi.de/submit/ eingereicht werden. Sie können sich dort unter Auswahl der HPI-OpenID-Providers mit Ihrem HPI-Benutzerkonto anmelden.
Literatur
- Heinz Peter Gumm, Manfred Sommer; "Einführung in die Informatik"; 9. Auflage, Oldenburg Verlag, 2011
- Niklaus Wirth: "Algorithmen und Datenstrukturen"; Stuttgart: Teubner (1979); ASIN: B003E6764A
- Robert Sedgewick; "Algorithmen in Java"; 3. Auflage, Pearson, 2003, ISBN: 978-3-8273-7072-3
- Donald E. Knuth; "The Art of Computer Programming, Vol. III: Sorting and Searching"; 2nd Edition, Reading, Massachusetts: Addison-Wesley, 1998, ISBN 0-201-89685-0
- William F. Clocksin, Christopher S. Mellish; "Programmieren in Prolog"; Springer-Verlag, 1981, ISBN 0387110461
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein; "Introduction to Algorithms"; Third Edition, MIT-Press, 2009, ISBN 978-0-262-53305-8
Hausaufgaben
-
Serie 1; Abgabe bis zum 21.04.2018 (21
Uhr)
Rahmen derlibarena
,testapp.c
-
Serie 2; Abgabe bis zum 01.05.2018 (21
Uhr)
Vorlage C++, Rahmenprogramm C -
Serie 3; Abgabe bis zum 22.05.2018 (21
Uhr)
Eingabeklasse,passwd
(Download mitcurl
oderwget
empfohlen). -
Serie 4; Abgabe bis zum 05.06.2018 (21
Uhr)
multiply.c
,multiply.java
Folien der Besprechung,mandel.java
-
Serie 5; Abgabe bis zum 26.06.2018 (21
Uhr)
Liste der Abhängigkeiten, Vorlage ant-File: JUnit4, alternativ: JUnit5 -
Serie 6; Abgabe bis zum 10.07.2018 (21
Uhr)
-
Serie 7; Freiwillige Abgabe bis zum
24.07.2018 (21 Uhr)
Gesammelte Validatoren zum Selbsttest: validators.tar.gz
Mündliche Prüfungen
Die mündlichen Prüfungen finden in den letzten zwei Septemberwochen
(17.09.-28.09.2018) im Raum C-1.8 statt.
Eine Terminauswahl ist online mit Ihrem
HPI-Benutzerkonto möglich.
Pro Termin werden zwei Personen geprüft. Es steht Ihnen frei zu Beginn der Prüfung einen Fachvortrag (ohne Hilfsmittel) von drei bis fünf Minuten über ein von Ihnen gewähltes Thema aus der Vorlesung zu halten.
Sie finden Aufzeichnungen der Lehrveranstaltung im tele-task System unter https://tele-task.de/archive/series/overview/1207/.
Ablauf
- Konzepte OOP
- Implementierung OOP
- Programmiersprache Java
- Algorithmische Komplexität
- Sortieren
- Suchen
- Graphen
- Deklarative Programmierung
Unit 2: Objektorientierte Programmierung
- Programmieren im Großen
- Von Modulen zu Objekten
- OO Konzepte im Überblick
- Regeln für objektorientierten Entwurf
- Liskov Substitution Principle (LSP)
- Vererbung
- Polymorphie
Unit 3: Freispeicherverwaltung
- Freispeicherverwaltung
- Lebensdauer von Objekten
- Referenzzählung
- Garbage Collection
Unit 3b: Typen, Module, Klassen, Objekte
- Abstrakte Datentypen
- Konstruktion neuer Datentypen
- Charakteristika von Objekten
- Polymorphie und Vererbung
- Objekte in C
- Mehrfachvererbung, Interfaces, Exceptions
- Java Geschichte
- Lexik, Datentypen, Variablendeklarationen
- Methoden und Klassen
- Zugriffssteuerung
- Konstruktoren und Überladung
- Programme, Pakete, Java-Werkzeugkette
- Ausdrücke, Blöcke, Sichtbarkeit
- Anweisungen
- OO: Klassen, Vererbung, späte Bindung
- Abstrakte Klassen und Schnittstellen
- Ausnahmebehandlung, weitere Konzepte
- Beispiele (tar)
- Vernetzungsprobleme – ein Beispiel
- Quickfind, Quickunion
- Laufzeitbetrachtung
- Empirische Analyse
- Mathematische Analyse
- Komplexitätsklassen
- O() Notation
- Lineare und binäre Suche
-
Beispiele (tar),
Reverse.java
- Test-Driven Development (TDD)
- Testen mit JUnit 4
- Einschub: Annotationen in Java
- Bestimmung des Testergebnisses
- Exceptions testen
- Fixtures: definierten Ausgangszustand herstellen
- Integration von Testfällen
- Parametrisierung von Tests
- Beispiele (tar)
- Primitive Datentypen
- Strings
- Objekttypen
- Arrays
- Mengen: Collection, Set
- Implementierungsstrategien: verkettete Listen
- Listenoperationen
- Maps: HashMap, TreeMap
- Collections im Überblick
- Generische Typen
- Beispiele (tar)
Unit 8: Elementare Sortieralgorithmen
- Sortieren
- Elementdarstellung, Primitive Operationen
- Internes vs. Externes Sortieren
- Bewertung
- Zahl Vergleiche, Austauschoperationen, Speicherplatzbedarf
- InsertionSort, SelectionSort, BubbleSort
- Komplexität der einfachen Algorithmen
- ShellSort
- Sortieren von Listen
- Beispiele (tar)
Unit 9: Optimierte Sortieralgorithmen
- Quicksort
- Grundidee, Partitionierung, Rekursion
- Analyse von Quicksort
- Optimierung für kleine Mengen
- Mergesort
- Mischen von Stapeln
- Mischen im selben Speicher
- Top-Down-Mergesort, Bottom-Up-Mergesort
- Heapsort
- Priority Queues
- Heap-Eigenschaft
- Radixsort
- Sortieren anhand spezieller Eigenschaften der Schlüssel
- Timsort
- Beispiele (tar)
- Symboltabellen und binäre Suchbäume
- Symboltabellen
- Binäre Suchbäume
- Balanzierte Bäume
- 2-3-4-Bäume
- Rot-Schwarz-Bäume
- AVL-Bäume
- Skiplisten
- Datenstrukturen – Hash-Tabellen
- Hashfunktionen
- String-Hashing
- Offene Adressierung
- Hash-Tabellen und Binäre Suchbäume
- Beispiele (tar)
Unit 11: Logische Programmierung: Prolog
- Boolesche Logik
- Closed World Assumption
- Fakten, Prädikate
- Regeln
- Listen
- Generatoren
- Cut
- Beispiele (tar)