Objektorientierte Programmierung

Ablauf (Planung der zeitlichen Aufteilung)

Hier wird eine ungefähre Übersicht gegeben, wann welcher Stoff behandelt werden soll. Im Laufe des Semesters ist beabsichtigt, die Liste zu aktualisieren, und den tatsächlich behandelten Stoff einzutragen. Selbstverständlich sind alle Angaben unverbindlich.

Tatsächlicher Ablauf:

1. Di, 16.10.2018:
Kapitel 0: Informationen zur Vorlesung / Organisatorisches
Inhalte, Ansprechpartner, Übungsgruppen, Hausaufgaben, Übung (Praxispunkte), Klausur, Rechnerpools, Software, Literatur, Umgang mit unterschiedlichen Vorkenntnissen, allgemeine Ratschläge.
Kapitel 1: Einführung (bis Folie 40)
Computer (Minimal-Hardware), Betriebssystem (Dateien), Entwicklung der Programmiersprachen, Historische Bemerkungen zu Java, Compiler, Interpreter, Bytecode, "Hello, World" Beispiel.
2. Di, 23.10.2018:
Kapitel 1: Einführung (Folien 57 bis 71)
Compilieren und Ausführen von Programmen, Umgang mit Syntaxfehlern, Bedeutung der vollständigen Aufklärung von Fehlern.
Kapitel 2: Erste Schritte in der Programmierung (bis Folie 68)
Wiederholung: "Hello, World" Programm, Rahmenprogramm für nächste Zeit, Bezeichner, Ausgabebefehl, Methodenaufruf, Mathematische Funktionen, Konstanten/Literale (Strings und Zahlen), Wichtigste Datentypen (int, double, String), Vier Grundrechenarten, Ganzzahlige Division und Modulo, Überladene Operatoren am Beispiel von /, Typanpassung von int nach double, Konkatenation von Zeichenketten, Anweisungsfolgen, Variablen, Deklaration mit Initialisierung, Wertausdrücke, Zuweisungen, Folgen von Zuweisungen, Simulation der Ausführung von Programmen,
3. Di, 30.10.2018:
Kapitel 2: Erste Schritte in der Programmierung (Folien 69 bis 92)
Eingaben, Bedingungen (if), Beispiele für Flussdiagramme (Programmablaufpläne), Schleifen (while), Vom Algorithmus zum Programm: Primzahltest, Fehlervermeidung und Fehlersuche. (Ausblick: Debugger.)
Kapitel 3: Syntax-Diagramme (und Grammatikregeln)
Bedeutung von formaler Syntax, Syntaxdiagramme.
Kapitel 4: Lexikalische Syntax (bis Folie 10)
Grobe Funktionsweise eines Compilers, Wortsymbole ("Token").
4. Di, 06.11.2018:
Beispiel: Euklidischer Algorithmus zur ggT-Bestimmung
Kapitel 4: Lexikalische Syntax (ab Folie 10)
Unicode, Leerplatz zwischen Wortsymbolen, sinnvolle Einrückung, Kommentare, Bezeichner, Schlüsselworte, Datentyp-Konstanten (Literale), Operatoren.
Kapitel 5: Datentypen (bis Folie 11)
Datentypen: Motivation und Übersicht, Primitive Typen vs. Referenztypen (u.a. Diskussion von == für String-Objekte).
5. Di, 13.11.2018:
Kapitel 5: Datentypen (Folie 9 bis 74)
Primitive Typen vs. Referenztypen (u.a. Diskussion von == für String-Objekte), die primitiven Datentypen von Java (ganze Zahlen: int, Begrenzung des Zahlbereiches, Gleitkomma-Zahlen: double, Warnung vor Rundungsfehlern, Boolesche Werte: boolean, Zeichen: char), Einführung zu Objekten, Methoden-Aufrufe (Bibliotheks-Funktionen), Argumentwerte und Rückgabewerte von Methoden (Ein- und Ausgabewerte von Funktionen), Lesen der Java API Dokumentation, Kurzeinführung zu Untertypen, Objekterzeugung (mit Benutzung von Konstruktoren), Beispiel String und StringBuilder, statische Methoden und Attribute, Beispiel Math. Genauere Analyse von System.out.println(_), Einführung zu Arrays, Deklaration und Erzeugen von Arrays, Zugriff auf Array-Elemente.
6. Di, 20.11.2018:
Kapitel 5: Datentypen (ab Folie 63)
Wiederholung zu Arrays, Deklaration und Erzeugen von Arrays, Zugriff auf Array-Elemente, Beispielprogramme.
Kapitel 6: Wertausdrücke (Expressions) (bis Folie 40, kurz überflogen bis 54)
Berechnung von Werten abhängig von Zuständen, Zustandsänderung als Seiteneffekt, Elementare Werteausdrücke, Zusammensetzung von Wertausdrücken mittels Operatoren und Methodenaufrufen, Operatorsyntax, Prioritäten, Veranschaulichung der Struktur von Wertausdrücken mittels Operatorbaum, Arithmetische Operatoren (Vier Grundrechenarten, Divisionsrest), Typ-Korrektheit, überladene Operatoren, automatische Typvergrößerungen ("numeric promotions"), ganz kurzer Überblicj zu booleschen Ausdrücken.
7. Di, 27.11.2018:
Kapitel 6: Wertausdrücke (ab Folie 41)
Vergleichsoperatoren, Logische Operatoren. Zuweisungen, Typanpassungen bei Zuweisungen, Cast, Abkürzungen für Zuweisungen, Inkrement/Dekrement, Auswertungsreihenfolge, Zusammenfassung.
Kapitel 7: Statements (bis Folie 47)
Einführung zu Statements, Expressions als Statements, Blöcke, Variablen-Deklarationen, Uninitialisierte Variablen, if-Statement, switch-Statement.
8. Di, 04.12.2018:
Kapitel 7: Statements (ab Folie 54)
while-Schleife, [do-Schleife], for-Schleife, Beispiele für typischen Schleifen, ["foreach"-Schleife], break, [continue], return.
Kapitel 8: Funktionen (statische Methoden) (bis Folie 18)
Motivation, erstes Beispiel, Grundbegriffe, Parameter (formal vs. aktuell), void anstelle eines Ergebnis-Typs, Aufruf von Funktionen (statische Methoden).
9. Di, 11.12.2018:
Kapitel 8: Funktionen (statische Methoden) (ab Folie 17)
void anstelle eines Ergebnis-Typs, Aufruf von Funktionen (statische Methoden), lokale Variablen, statische Attribute: globale Variablen, Verschattung, Blockstruktur, Parameterübergabe ("call by value", Referenztypen für Objekte), Möglichkeiten zur Übergabe von Daten an den Aufrufer, rekursive Methoden.
Kapitel 9: Exceptions I
Möglichkeiten zur Behandlung von Laufzeitfehlern, Motivation, try/catch(/finally), Klassifizierung von Exceptions: checked exceptions, "catch or throw" Regel.
10. Di, 18.12.2018:
Kapitel 10: Einführung in die Ein-/Ausgabe (kurz)
Motivation, Argumente aus der Kommandozeile, Einführung zu Streams und Reader/Writer. Reader/Writer, Buffered Reader, Ausgabe-Formatierung.
Kapitel 11: Klassendeklarationen (bis Folie 50)
Einfache Klassen (entsprechend Strukturen/Records), Attribute (Variablen in den Objekten), Referenzen, Objekt-Erzeugung mit new, Garbage Collection, Null-Referenz, Objekt-Identität, Typ-Gleichheit, Aufruf von Methoden, Gültigkeitsbereiche von Methoden-Deklarationen, Kapselung von Programmcode und Daten, Zugriffsschutz/Sichtbarkeit (private vs. default).
11. Di, 08.01.2019:
Kapitel 11: Klassendeklarationen (ab Folie 42)
Wiederholung zu Klassen (Attribute, Methoden, Referenzen, Zugriffsschutz: private, Schnittstelle vs. Implementierung). Einhaltung von Spezifikationen. Methode toString(). Konstruktoren, Statische Methoden und statische Attribute. Konstanten.
Kapitel 12: Subklassen/Vererbung (bis Folie 20)
Motivation, Grundbegriffe. Syntax, Vererbung.
12. Di, 15.01.2019:
Kapitel 12: Subklassen/Vererbung (ab Folie 16)
Syntax, Vererbung, Zuweisungen zwischen Ober- und Unterklasse, instanceof, Zugriffsschutz, Überschreiben von Methoden, abstrakte Klassen, final, Object
Kapitel 13: Interfaces
Motivation, Syntax von Interface-Deklarationen, implements-Klausel in Klassendeklarationen, Interfaces als Typen, Sub-Interfaces.
13. Di, 22.01.2019:
Kapitel 14: Überladene Methoden
Motivation, spezifischste Version einer Methode, Mehrdeutigkeit, Anwendung: Optionales Argument, Überschreiben vs. Überladen
Kapitel 15: Pakete
Pakete, import, Zugriffsschutz (private, default, protected, public)
Kapitel 16: Arrays für Fortgeschrittene
Initialisierung, Arrays und Subklassen, Implementierung, Methoden mit variabler Parameter-Anzahl, Mehrdimensionale Arrays
14. Di, 29.01.2019:
Kapitel 17: Strings
Klasse String, Nützliche Methoden, Unicode-Unterstützung, StringBuilder
Kapitel 18: Exceptions II
Klassenhierarchie, Deklaration eigener Exceptions
Kapitel 19: Wrapper-Klassen
Motivation, Klasse Integer, Character, Autoboxing/Unboxing.
Kapitel 20: Generische Programmierung (Parametrisierte Klassen) (bis Folie 12)
Motivation: Abstraktion von Typen, Alternative: Verwendung von Object als Elementtype für beliebige Listen.
15. Di, 05.02.2019:
Kapitel 20: Generische Programmierung (Parametrisierte Klassen) (ab Folie 12)
Erklärung zur Prüfung der Parameter-Typen zur Compilezeit, zur Laufzeit aber "Raw Types" mit Object. Daraus folgende Einschränkungen, z.B. kann new nicht für den Parameter-Typ nicht in der parametrisierten Klasse benutzt werden. Erstes Beispiel: Container<T>: Definition und Anwendung der generischen Klasse. Größeres Beispiel: Verkettete Liste mit beliebigen Element-Typ T. Interfaces mit Parameter-Typen. Typ-Beschränkungen für Parameter-Typen. Methoden mit Typ-Parametern, Beispiel: statische Methode max. Hinweis: List<Integer> ist kein Subtyp von List<Number>, obwohl Integer Subklasse von Number ist. Wildcards, z.B. List<? extends Number> (kurz).
Kapitel 21: Einführung in die Collection-Klassen
Motivation, Collection Interface Collection<E> (Methoden u.a. add(e), size(), iterator()), Hinweis auf UnsupportedOperationException, Iteratoren: Iterator<E> (Methoden hasNext(), next()), "enhanced for-loop"/"for-each loop", List<E>, ArrayList<E>, LinkedList<E>, Unterschied von Interface und Implementierung, Hinweis auf Set<E> und Map<K,V>.
Kapitel 22: Aufzählungstypen (bis Folie 3)
enum, Erstes Beispiel
...
Prof. Dr. Stefan Brass
Impressum