Programmieren 3
WS 2011/12, Studiengang Bachelor Allgemeine Informatik, Hochschule RheinMain
Sebastian Flothow
sebastian@flothow.de
Häufig anzutreffen im Labor für verteilte Systeme (C207)
Termine
- Beginn der Vorlesung: 2011-10-10
- Beginn des Praktikums: 2011-10-17
- Fragestunde: 2012-02-17 10:00, C035
Unter einer Fragestunde verstehe ich eine Fragestunde, d.h. ich beantworte Fragen – wenn keine Fragen gestellt werden sage ich nichts.
- Klausur: 2012-02-24 14:00, B002
- Abgabe der Projektaufgabe: 2012-02-26
- Abnahme der Projektaufgabe: 2012-02-28 10:00, C413
- Fragestunde zur Nachklausur: 2012-06-28 13:30, C001
Unter einer Fragestunde verstehe ich eine Fragestunde, d.h. ich beantworte Fragen – wenn keine Fragen gestellt werden sage ich nichts.
- Nachklausur: 2012-07-05 11:15, C407
- Klausureinsicht: 2012-07-27 16:00, C035
Materialien
(Die in der Vorlesung live geschriebenen Quelltexte sind tendentiell etwas krautig – bei den Praktikumsaufgaben bitte ordentlich programmieren.)
Projektaufgabe
Projektaufgabe.pdf, Quelltext dazu: parametrizedcomplexfractal.hpp
Klausuraufgaben
Eine Sammlung potentieller Klausuraufgaben: Klausuraufgaben.pdf (2. Fassung); die Quelltexte daraus: klausuraufgaben-src.tar.gz
Klausur: klausur_2012-02-24.pdf
Nachklausur: klausur_2012-07-05.pdf
2011-10-10
- Inhalt der Vorlesung:
- Definition und Zweck von Threads; rechenintensive vs. blockierende Tasks (I/O); Prozessoren/Kerne/Hardware-Threads
- Beispiel: Zeitintensive Berechnung in GUI erst ohne, dann mit Hintergrund-Thread
- Erzeugen von Threads, extends Thread vs. implements Runnable
- java.util.concurrent.*, BlockingQueue, ExecutorService, ReadWriteLock
- Quelltext aus der Vorlesung: SquareCalc.zip
- API-Doku zu Java 6: http://download.oracle.com/javase/6/docs/api/
2011-10-17
- Praktikum: Blatt1.pdf
Beispiellösung: marcelldietl.blatt1.zip von Marcell Dietl
- Inhalt der Vorlesung:
- Beispiel: Die speisenden Philosophen: Lock, try/finally, synchronized
- Deadlock-Vermeidung durch Ressourcenbelegung in einheitlicher Reihenfolge
- Beispiel: Paralleles Inkrementieren einer Variablen in mehreren Threads
- Ablauf von read-modify-write-Sequenzen auf Maschinenebene, volatile (und wofür es sich nicht eignet), AtomicInteger
- Ansätze zu Vermeidung der üblichen Probleme (simultane Schreibzugriffe, sichtbare inkonsistente Zwischenzustände bei gleichzeitigen Schreib- und Lesezugriffen): unveränderliche Objekte (z.B. BigInteger), synchronized Lists etc. (aus der Hilfsklasse Collections)
- Netzwerk: TCP vs. UDP, Zusicherungen von TCP; Verwendung von Sockets
- Quelltexte aus der Vorlesung: Philosophers.zip, ThreadedIncrement.zip
- Leseempfehlung: Das Java-Tutorial zu Concurrency
- Skript zu Java von Prof. Dr. Panitz, hier relevant ist Kapitel 11 (Steuerfäden)
2011-10-24
- Praktikum: Blatt2.pdf, Quelltext dazu: DiningSavages.zip
Nachtrag: Die Aufgabe stammt aus dem freien eBook The Little Book of Semaphores von Allen B. Downey, in dem zahlreiche Synchronisationsprobleme vorgestellt werden. Ich hatte auf die Quellenangabe zunächst verzichtet, damit nicht alle die dort vorgestellte Lösung nachprogrammieren.
Beispiellösungen: Abel_Prog3_Blatt2_Aufg1.zip von Jan Abel, WolfDarius_Prog3AI_Blatt02_DiningSavages.zip von Darius Wolf
- Inhalt der Vorlesung:
- Netzwerk-Beispielprogramme Client/Server, Socket, ServerSocket
- Verbindungsende bei TCP
- UDP, DatagramSocket
- Javadoc
- Quelltexte aus der Vorlesung: NetClient.zip, EchoServer.zip, UDPTest.zip, UDPSender.zip
- Es gibt auch ein Java-Tutorial zu Sockets
2011-10-31
- Praktikum: Blatt3.pdf
Beispiellösung: Weinhandl_Blatt3.tar.gz von Alexander Weinhandl
- Inhalt der Vorlesung:
- C++-Versionen, C++11, Boost
- Hello World in C++
- iostream, cin, cout, cerr
- Teilschritte des Kompilierens, Übersetzungseinheiten: Compiler.pdf
- C++-Strings
- Quelltext aus der Vorlesung: helloworld.cpp
- Literaturempfehlung: Nicolai Josuttis: Objektorientiertes Programmieren in C++, 2. Auflage. Der Autor führt auch eine Website zum Buch.
(Die Bibliothek hat auch ein Exemplar der ersten Auflage, allerdings stammt diese aus der Zeit vor der Standardisierung von C++.)
- Skript zu C++ von Prof. Dr. Panitz
- Auf cplusplus.com gibt es ein Tutorial zu C++ und eine recht übersichtliche API-Dokumentation zur Standardbibliothek
2011-11-07
- Praktikum: Blatt4.pdf
Hinweis zu Aufgabe 3: Mit Befehlszeilenparametern sind Befehlszeilenparameter gemeint, d.h. das Programm soll in der Form „./ersetzen suchstring ersatzstring” aufgerufen werden.
Beispiellösung: Weinhandl_Blatt4.tar.gz von Alexander Weinhandl
- Inhalt der Vorlesung:
- Klassen, public/protected/private, friend
- const für Methoden und Parameter
- Konstruktoren, Initialisierungslisten, Destruktoren
- new/delete
- Pointer, Referenzen
- Vererbung
- Polymorphie, virtuelle Methoden
- Quelltexte aus der Vorlesung: helloworld2.cpp, Personen.tar.gz
2011-11-14
- Praktikum: Blatt5.pdf
Beispiellösung: Abel_Blatt5_r2.tar.gz von Jan Abel (2. Fassung mit korrigierter Baumhöhenberechnung)
- Inhalt der Vorlesung:
- Statische Felder und Methoden
- Konstanten
- Abstrakte Klassen
- Mehrfachvererbung
- Operatorüberladung
- Default-Parameter
- Impliziter Konstruktoraufruf bei automatischer Typkonversion, explicit
- make
- Quelltexte aus der Vorlesung: Personen2.tar.gz, Rational.tar.gz
2011-11-21
- Praktikum: Blatt6.pdf, Quelltexte dazu: movable.hpp, iotest.cpp
Korrektur: Bei Aufgabe 1 sollen natürlich die Quelltexte von Blatt 5 Aufgabe 2 weiterverwendet werden.
Das Interface Movable ist missraten, ich muss beim Schreiben desselben umnachtet gewesen sein. Eine korrigierte Fassung findet sich weiter unten.
Beispiellösung: Abel_Prog3_Blatt6.tar.gz von Jan Abel
- Inhalt der Vorlesung:
- Speicherverwaltung: Kopierkonstruktor und Zuweisungsoperator
- Templates: Funktionstemplates, Klassentemplates, Typinferenz, Instanziierung von Templates
- gdb, ddd, valgrind
- Quelltexte aus der Vorlesung: Personen3.tar.gz, Rational2.tar.gz, template.tar.gz
2011-11-28
2011-12-05
2011-12-12
2011-12-19
2012-01-09
2012-01-16
2012-01-23
- Praktikum: Kein neues Blatt mehr
- Inhalt der Vorlesung:
- Einige ältere Klausuren von Prof. Dr. Panitz mit C++-Aufgaben, die zum Lernen nützlich sein könnten: