• Keine Ergebnisse gefunden

Gliederung der Veranstaltung

N/A
N/A
Protected

Academic year: 2022

Aktie "Gliederung der Veranstaltung"

Copied!
31
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 12. Juli 2013

Programmieren

Übersicht

Programmieren I

Art der Veranstaltung: Wintersemester, Bachelor, 6 LP, 2 VL + 2 UE + Rechnerübung Kurzbeschreibung: In der Vorlesung »Programmieren I« werden die Grundlagen der impe- rativen und objektorientierten Programmierung anhand der Programmiersprache »Java«

besprochen und in der Übung, in der die Teilnehmer kleine Programme selbstständig ent- wickeln sollen, angewendet.

Stichwörter:Algorithmen und Programme, Programmiersprachen, Grundlagen der impera- tiven und objektorientierten Programmierung, Java, einfache Datentypen, Referenztypen, Felder und Zeichenketten, Anweisungen, Klassen, Objekte, Methoden, Vererbung, Schnitt- stellen, Rekursion, Ausnahmebehandlung, Programmkorrektheit, Test von Programmen, Ein- und Ausgabe.

Termine:

Beginn: Fr. 19. Oktober 2012

Vorlesung: Mo. 15:00–16:30 Uhr PK 15.1 Übung: Fr. 11:30–13:00 Uhr SN 19.1 Sprechstunde: Mi. 10:30–11:30 Uhr IZ 244

Programmieren II

Art der Veranstaltung: Sommersemester, Bachelor, 6 LP, 2 VL + 2 UE + Rechnerübung Kurzbeschreibung: Der zweite Teil der Veranstaltung erweitert und vertieft die im ersten Semester erworbenen Kenntnisse. In den Übungen werden Datenstrukturen wie Listen, Bäume und Graphen sowie Such- und Sortierverfahren programmiert. Darüber hinaus werden die Grundlagen der Parallel- und der Grafikprogrammierung behandelt.

Stichwörter:Strukturierung von Programmen, Vertiefung der objektorientierten Program- mierung, Aufzählungstypen, Annotationen, weiterführende Sprachkonzepte von Java, Da- tenstrukturen, generische Klassen, Listen, Bäume, Graphen, Hashverfahren, Such- und Sortierverfahren, Parallelprogrammierung, Grafikprogrammierung, Überblick über C und C++, Zeiger, Mehrfachvererbung, Überladen von Operatoren, Ausblick.

Termine:

Beginn: Di. 02. April 2013

Vorlesung: Di. 08:00–09:30 Uhr SN 19.1 Übung: Fr. 11:30–13:00 Uhr SN 19.1 Sprechstunde: Mi. 10:30–11:30 Uhr IZ 244

(2)

Gliederung der Veranstaltung

Vorbemerkungen 1 Einführung

1.1 Vom Algorithmus zum Programm 1.2 Programmiersprachen

1.3 Korrektheit, Komplexität und Entscheidbarkeit 1.4 Hard- und Software-Grundlagen

2 Erste Schritte in Java

3 Java: Grundlagen der Sprache 3.1 Lexikalische Elemente 3.2 Datentypen und Variable 3.3 Speicherung von Werten 3.4 Ausdrücke

3.5 Anweisungen

3.6 Beispiele aus der Praxis

3.7 Ein Blick auf imperatives Programmieren 4 Objektorientierte Programmierung in Java

4.1 Klassen, Objekte und Methoden 4.2 Vererbung

4.3 Modifikatoren

4.4 Klassenvariable und statische Methoden 4.5 Abstrakte Klassen

4.6 Schnittstellen 4.7 Zusammenfassung

5 Rekursion/Funktionale Programmierung 5.1 Einführung und Begriffe

5.2 Beispiele rekursiver Methoden in Java 5.3 Ein Blick auf funktionales Programmieren 6 Zuverlässigkeit von Programmen

6.1 Behandlung von Ausnahmesituationen 6.2 Grundlagen der Programmverifikation 6.3 Die Zusicherungsanweisung

6.4 Testen von Programmen

7 Klassen und Methoden zur Ein- und Ausgabe

(3)

8 Weiterführende Sprachkonzepte von Java 8.1 Lokale und anonyme Klassen

8.2 Weiteres zu den Wrapper-Klassen 8.3 Aufzählungstypen

8.4 Die Klassen String,StringBuffer und StringTokenizer 8.5 Strukturierung von Programmen

8.6 Annotationen Zwischenstand

9 Java und Datenstrukturen 9.1 Lineare Listen

9.2 Generische Datentypen 9.3 Keller und Schlangen 9.4 Graphen

9.5 Suchen und Sortieren 9.6 Hash-Verfahren 9.7 Persistenz von Daten

9.8 Das Java Collections Framework 10 Parallelprogrammierung in Java

10.1 Das Problem des gegenseitigen Ausschlusses 10.2 Grundlagen und Begriffe

10.3 Verwaltung von Threads

10.4 Kommunikation und Synchronisation 10.5 Die speisenden Philosophen

10.6 Das Concurrent-Paket 11 Grafikprogrammierung in Java

11.1 Grundlagen

11.2 Grafische Grundelemente 11.3 Fensterklassen

11.4 Ereignisse und Widgets 11.5 Applets

11.6 Die Swing-Klassen 12 Ausblick

12.1 Objektorientierte Programmierung: Entwurfsmuster 12.2 Programmierparadigmen und -sprachen

12.3 Gegenstände der Softwaretechnik 12.4 Java 8

Schlussbemerkungen Quellenverzeichnis

(4)

A Übungen, Ergänzungen, Fallstudien, Wiederholungen A.1 Unix-Grundlagen

A.2 Vom Algorithmus zum Programm: Programmentwicklung A.3 Felder

A.4 Regeln zur Formatierung von Java-Programmen A.5 Java-Operatoren

A.6 Fallstudie: Gaußsche Wochentagsformel A.7 Abstraktion und Modellierung

A.8 Fallstudie: Objektorientierung (Polynome) A.9 Objektorientierte Konzepte

A.10 Fallstudie: Abstrakte Klassen (Funktionen) A.11 Berechenbarkeit

A.12 Fallstudie: Rekursion, Backtracking (Sudoku) A.13 Ein interaktiver Blick auf die Java-API

A.14 Fallstudie: Rekursion, Backtracking (Sudoku, Wildcards) A.15 Algorithmen und Datenstrukturen (Übersicht)

A.16 Fallstudie: Komplexität von Algorithmen (1) A.17 Paradigmen und Sprachen (Übersicht) A.18 Die Programme des JDK

A.19 Alias-Name, Gültigkeit, Sichtbarkeit und Lebensdauer A.20 Fallstudie: Mergesort, Divide-and-Conquer, Generizität A.21 Fallstudie: Keller (Klammerstrukturen)

A.22 Abstrakte Datentypen (ADT)

A.23 Fallstudie: Graphen, Breitensuche (Zusammenhangskomponenten) A.24 Fallstudie: Graphen, Darstellung von Graphen (Brücken)

A.25 Skriptsprachen, C-Shell, JavaScript A.26 Parallelprogrammierung: Fairness A.27 Fallstudie: Bäume (AVL-Bäume)

A.28 Fallstudie: Greedy-Algorithmen, Graphen (kürzeste Pfade) A.29 Fallstudie: Zeichnen von Funktionen

A.30 Die Programmiersprache C B Themen der Übungsaufgaben

B.1 1. Übungsblatt B.2 2. Übungsblatt B.3 3. Übungsblatt B.4 4. Übungsblatt B.5 5. Übungsblatt B.6 6. Übungsblatt B.7 7. Übungsblatt B.8 8. Übungsblatt B.9 9. Übungsblatt B.10 10. Übungsblatt B.11 11. Übungsblatt B.12 12. Übungsblatt

(5)

B.13 13. Übungsblatt B.14 14. Übungsblatt

(6)

Vorbemerkungen

Informatik als Wissenschaft; Überblick über die Vorlesung; Literaturempfehlungen.

1 Einführung

1.1 Vom Algorithmus zum Programm

Algorithmusbegriff; Eigenschaften von Algorithmen; Algorithmus und Programm; Pro- grammiersprache; programmieren; grundlegende Aspekte der Entwicklung von Algorith- men: Lösbarkeit, Korrektheit, Komplexität; Paradigmen zur Algorithmenbeschreibung: im- perativ, funktional, objektorientiert und logisch; Beispiel eines imperativen Algorithmus;

der Algorithmus von Euklid; Zustand; Zustandstransformation; Datenstrukturen.

1.2 Programmiersprachen

Entwicklung der Programmiersprachen; Definition von Programmiersprachen; lexikalische Struktur; Syntax; Semantik; Pragmatik; Klassifikation der Programmiersprachen: Ma- schinensprachen, Assembler und problemorientierte Sprachen; Implementierung von Pro- grammiersprachen: Interpreter, Compiler, Mischverfahren, Just-in-Time-Compiler; Verar- beitung von Java-Programmen.

1.3 Korrektheit, Komplexität und Entscheidbarkeit

Spezifikation; Korrektheit; partielle und totale Korrektheit; Verifikation; Nachweis der par- tiellen und totalen Korrektheit des euklidischen Algorithmus; Schleifeninvariante; Test; Va- lidation; Komplexität; Komplexität des euklidischen Algorithmus; O-Notation, landausche Symbole; Entscheidbarkeit; Halteproblem; Nachweis der Unentscheidbarkeit des Haltepro- blems; Berechenbarkeit; Existenz nicht berechenbarer Funktionen.

1.4 Hard- und Software-Grundlagen

Aufbau eines Rechners; eine mögliche Arbeitsumgebung; Systemsoftware; Anwendungs- software; Softwarewerkzeuge; Betriebssystem; textuelle und grafische Oberfläche; wichtige Betriebssysteme; Dateiverwaltungssystem; Editor; Programmierwerkzeuge; Programmier- umgebungen.

2 Erste Schritte in Java

Abstraktion; Modellbildung; Beispiel: Kontoverwaltung; Klassen- und Objektdiagramm;

Kommentare; Klasse; Objekt; Attribut; Methode; Parameter; Rückgabewert; Variable;

Konstruktor; Applikation; main-Methode; Hinweis auf Applets; Regeln zur Code-Forma- tierung; Programmkommentare; der Dokumentationsgenerator javadoc; objektorientierte

(7)

Programmiersprachen; der euklidische Algorithmus als statische Methode; Sprachmerk- male von Java; Entwicklung von Java; einige Java-Konzepte; die Programme des JDK;

Zusammenfassung.

3 Java: Grundlagen der Sprache

3.1 Lexikalische Elemente

Lexik; Lexem; Eingabezeichen; Unicode, Unicode-Transformationsformat; Kommentare;

Dokumentationskommentare; Bezeichner (identifier); Regeln zur Wahl von Bezeichnern;

Literale; Wahrheitswerte; Zahlen; Zeichen; Zeichenketten; Null-Literal; Schlüsselwörter;

reservierte Wörter; Trennzeichen; Operatoren; Interpunktionszeichen.

3.2 Datentypen und Variable

Struktur von Java-Programmen; Übersicht über die Datentypen; primitive Datentypen:

boolean, char, byte, short, int, long, float, double; Wertebereiche und Literale der primiti- ven Datentypen; Variable; Instanz- und Klassenvariable; lokale Variable; Deklaration und Initialisierung von Variablen; Lebensdauer; Sichtbarkeit; Arrays; Deklaration, Allokation und Initialisierung von Arrays; mehrdimensionale Arrays; Strings; Referenztypen; Erzeu- gung von Objekten; Zuweisung von Referenztypen; Vergleich von Referenztypen; Garbage Collector; die Begriffe »statisch«, »dynamisch« und »semidynamisch«; einschränkende und erweiternde Typkonvertierungen; Typkonvertierungen für primitive Datentypen; impliziter und expliziter Cast.

3.3 Speicherung von Werten

Beispiele für fehlerhafte Rechnungen mit einem Java-Programm; Speicherung von Informa- tion; Byte Order; big endian, little endian; ASCII- und ISO-Latin-1-Zeichensatz; Unicode- Zeichensatz; Unicode-Transformations-Formate (UTF); Speicherung ganzzahliger Daten- typen; Zweierkomplement; Gleitkommadarstellung reeller Zahlen und ihre Problematik;

Beispiel; Summe von Zahlen unterschiedlicher Größenordnung; Auslöschung; Vergleich von Gleitkommazahlen; Java-Beispiel; Pseudoarithmetik; Speicherung von primitiven und Re- ferenztypen; schematisches Speicherbild.

3.4 Ausdrücke

Ausdruck; Operand; Operator; Stelligkeit eines Operators; Rückgabewert; Priorität eines Operators; Linksassoziativität; Rechtsssoziativität; Seiteneffekt; Auswertungsreihenfolge;

arithmetische, relationale und logische Operatoren; ganzzahlige Division; Zuweisungsopera- toren; Fragezeichen-Operator; cast-Operator; weitere Operatoren; Vorrangregeln für Ope- ratoren.

(8)

3.5 Anweisungen

Übersicht über die Java-Anweisungen; elementare Anweisungen; leere Anweisung; Block;

Variablendeklaration; definite assignment; Datenflussanalyse; Ausdruck als Anweisung;

If- und Switch-Anweisung; While- und Do-Anweisung; abweisende und nicht abweisende Schleifen; For-Anweisung; erweiterte For-Anweisung; Break- und Continue-Anweisungen mit Marken; Return-Anweisung; Beispiele: größter Teiler einer Zahl, Primzahlberechnung, Vertauschen zweier Werte, Maximum zweier Zahlen, Maximum dreier Zahlen, Maximum eines Feldes, Summe ganzer Zahlen, Summe der Elemente eines Felds; Summe der Elemente einer Matrix; Betrag einer Zahl, Fakultät einer Zahl, Potenz, Fibonacci-Folge.

3.6 Beispiele aus der Praxis

Vertiefung der bisher behandelten Sprachkonzepte an Beispielen aus verschiedenen Ge- bieten: Berechnung von Zinseszinsen; Teilbarkeit; Darstellung einer natürlichen Zahl zu einer beliebigen Basis; schnelle Exponentiation; Horner-Schema; Skalarprodukt von Vek- toren; Länge eines Vektors; Produkt von Matrizen; Nullmatrix; Beispiel zu Break- und Continue-Anweisungen mit Marken; Newton-Verfahren zur Nullstellenbestimmung; Bub- blesort; Erzeugung von Pseudozufallszahlen mit der linearen Kongruenzmethode.

3.7 Ein Blick auf imperatives Programmieren

Variable; Zustand; Wertzuweisung; Sequenz; Selektion; Iteration; Ein- und Ausgabe; Zu- stand eines Objekts; Zustand des Programms; der Algorithmus von Euklid in imperativer Fassung in den Sprachen Java, JavaScript, Pascal, C, Modula-2 und Scheme; Ausblick auf Konzepte imperativer Programmiersprachen: Funktionen, Prozeduren, Datentypen, Mo- dule, Ausnahmebehandlung, Parallelverarbeitung; Algorithmus von Euklid: imperative vs.

funktionale Version, funktionale Variante in Scheme und Haskell.

4 Objektorientierte Programmierung in Java

4.1 Klassen, Objekte und Methoden

Objekt; Zustand; statische und dynamische Eigenschaften; Schnittstelle; Dienst eines Ob- jekts; Nachricht; wert- und identitätsbasierte Objektmodelle; Kapselung und Geheimnis- prinzip; Abstraktion und Modellierung; Klasse; Objekt; Instanz; Methode; Memberva- riable; Instanzvariable; Attribut; Erzeugung und Initialisierung von Objekten; Deklara- tion von Variablen und Methoden; Zuweisung von Objekten; Semantik von Variablen und Zuweisungen; Storage-Semantik; Assignment-by-sharing; Parameter einer Methode;

Aufruf einer Methode; Punktnotation;this-Zeiger; Parameterübergabe; Rückgabewert ei- ner Methode; Überladen von Methoden; Signatur einer Methode; Konstruktoren; Default- Konstruktor; Verkettung von Konstruktoren; Destruktoren; get-/set-Methoden;toString;

equals; typischer Aufbau einer Klasse; Beispiele: Adresskartei, Horner-Schema, Aufruf von Methoden, Bubblesort, Newton-Verfahren, Methoden mit einer variablen Parameterzahl;

Fallstudie: Polynomarithmetik.

(9)

4.2 Vererbung

Beziehungen zwischen Klassen; Vierecke und ihre Beziehungen; einfache Vererbung; Basis- klasse; Oberklasse; abgeleitete Klasse; Unterklasse; Spezialisierung; Generalisierung; Zu- weisungen; Polymorphie; Verdecken von Variablen; Überlagern von Methoden; dynamische Methodensuche; diesuper-Notation; die KlasseObject; die MethodeString toString();

die Methode boolean equals(); die Methode Object clone(); Konstruktoren; der Su- perklassenkonstruktor; Reihenfolge der Aufrufe von Konstruktoren; finale Klassen; Ver- erbungshierarchien; Vererbungshierarchien als gerichtete Bäume; mehrfache Vererbung;

Klassendiagramm; Objektdiagramm; Beziehungen zwischen Klassen und Objekten: der instanceof-Operator; Beziehungen zwischen Objekten: Assoziation, Kardinalität, Multi- plizität, Aggregation, Komposition.

4.3 Modifikatoren

Modifikator; die Modifikatoren public,final und abstractfür Klassen; die Modifikato- ren public,private, protected, static, final und abstract für Variable und Metho- den; Bemerkungen zum Einsatz von Modifikatoren; Hinweis auf weitere Modifikatoren.

4.4 Klassenvariable und statische Methoden

Klassenvariable; Deklaration und Zugriff; Beispiel: Objektzähler; Konstante; Klassenme- thoden; Deklaration und Zugriff; Beispiele: Objektzähler, Tabelle der Quadratwurzeln; die Methode main und ihr Argument; statische Konstruktoren; utility class.

4.5 Abstrakte Klassen

Abstrakte und konkrete Methoden; abstrakte und konkrete Klassen; Fallbeispiel für ab- strakte Klassen und Polymorphismus: Gehaltsberechnung; polymorphe Methoden in Kon- struktoren.

4.6 Schnittstellen

Definition einer Schnittstelle; Implementierung einer Schnittstelle; Beispiel; das Interface Comparable; die Klasse String; kleinstes Element und Bubblesort als Beispiele; Generizi- tät; mehrfache Implementierung; Schnittstellen und Vererbung; Verwendung von Schnitt- stellen; Konstanten.

4.7 Zusammenfassung

Überblick und Zusammenfassung über objektorientiertes Programmieren; Vorgehensweise beim objektorientierten Programmieren.

(10)

5 Rekursion/Funktionale Programmierung

5.1 Einführung und Begriffe

Motivierendes Beispiel: Berechnung der Quersumme einer natürlichen Zahl durch eine ite- rative und eine rekursive Methode; partielle und totale Funktionen; Definitionsbereich;

Möglichkeiten zur Definition von Funktionen: Tabelle, Ausdruck; rekursive Definitionen;

Ersetzungssystem; Auswertung; Formen der Rekursion: lineare Rekursion, Endrekursion, Baumrekursion, geschachtelte Rekursion, verschränkte oder wechselseitige Rekursion; Bei- spiele: Fakultät, Fibonacci-Folge, Algorithmus von Euklid, schnelle Exponentiation, Sum- me, Skalarprodukt; dynamische Algorithmen; operationelle und denotationale Semantik einer rekursiven Definition; Innermost-, Outermost- und Mixed-Auswertung; Ackermann- Funktion.

5.2 Beispiele rekursiver Methoden in Java

Fallbeispiele rekursiver Methoden: Newton-Verfahren, Intervallschachtelung (Bisektion), Geldwechsel, Türme von Hanoi, das Acht-Damen-Problem; der Fragezeichen-Operator;

for-Anweisungen mit Initialisierungs- und Update-Listen; Wiederholung des Bubblesort- Algorithmus; Quicksort; Wrapper-Klassen der primitiven Datentypen; einige Konstrukto- ren und Methoden der Wrapper-Klassen; Autoboxing und Unboxing.

5.3 Ein Blick auf funktionales Programmieren

Funktionen höherer Ordnung; funktionale Algorithmen; funktionale Programmiersprachen;

Lisp und Scheme; funktionale Version des Algorithmus von Euklid; Haskell; Algorithmus von Euklid in Scheme und Haskell.

6 Zuverlässigkeit von Programmen

Motivierendes Beispiel.

6.1 Behandlung von Ausnahmesituationen

Die AusnahmenArithmeticExceptionundArrayIndexOutOfBoundsException; Behand- lung von Ausnahmen; Beispiele für Ausnahmen; grundlegende Begriffe: Ausnahme, Auslö- sen einer Ausnahme, Behandeln einer Ausnahme; die try-catch-Anweisung; prinzipielle Vorgehensweise; die MethodeparseInt; Beispiel: Zahldarstellung zu verschiedenen Basen;

Fehlerobjekte; Fortsetzen nach einer Ausnahme; mehrere catch-Klauseln; die finally- Klausel; die catch-or-throw-Regel; Weitergabe einer Ausnahme; die throws-Klausel; die Klassen Throwable, Error, Exception, RuntimeException und ArithmeticException;

die throw-Anweisung; Erzeugen und Auslösen von Ausnahmen; eigene Fehlerklassen; Bei- spiele; wichtige Javadoc-Markierungen.

(11)

6.2 Grundlagen der Programmverifikation

Hoare’sche Logik; Hoare’scher Kalkül; Nachbedingung; Vorbedingung; Schleifeninvariante;

Axiomenschema; Ableitungsregeln; Zustand; partielle und totale Korrektheit; Korrektheit und relative Vollständigkeit des Kalküls; Beispiele: ganzzahlige Division mit Rest, schnelle Exponentiation; abessinische Bauernmethode zur Multiplikation ganzer Zahlen.

6.3 Die Zusicherungsanweisung

Die assert-Anweisung; Aufruf des Compilers und des Interpreters; Anwendungen der assert-Anweisung; Beispiel: ganzzahlige Division mit Rest; Anwendung in öffentlichen Methoden; Anwendung in privaten Methoden; Nachbedingungen; Vorbedingungen; Schlei- feninvariante; Kontrollflussinvariante; komplexe Zusicherungen; Klasseninvariante; beding- te Übersetzung; Ausschalten von Zusicherungen; Seiteneffekte; Einschalten von Zusiche- rungen.

6.4 Testen von Programmen

Phasen der Software-Entwicklung; Modelle der Software-Entwicklung; Dokumente; Mo- dellierungssprachen; UML; Struktur- und Verhaltensdiagramme; Werkzeuge; Spezifikati- on; Verifikation; Sicherheits- und Lebendigkeitseigenschaften; Validierung; Test; systema- tisches Testen; Modultest; Integrationstest; Auswahl der Testdaten; Black- und White- Box-Tests; Überdeckungsmaße für White-Box-Tests; JUnit: Einführung mit Beispiel.

7 Klassen und Methoden zur Ein- und Ausgabe

Möglichkeiten zur Ein- und Ausgabe von Daten; Grundlagen; wahlfreier und sequentieller Zugriff; Streams; Byte- und Character-Streams; Öffnen und Schließen einer Datei; Brücken- klassen; die Stream-Basisklassen; die KlassePrintStream; die KlasseSystem; die Methode exit;System.out,System.inund System.err; Properties; Ausgabe auf dem Bildschirm;

Ausgabe in eine Datei; Eingabe von der Tastatur; Lesen aus einer Datei; Pufferung der Ein- und Ausgabe; die Klasse File; Transaktion; Anlegen und Löschen einer Datei; Zu- griff auf den Pfadnamen; Informationen über eine Datei; Ändern von Verzeichniseinträgen;

Beispiel: rekursiver Durchlauf durch ein Verzeichnis; formatierte Ausgabe; Formatstring;

Steuerzeichen; die Klasse Scanner.

8 Weiterführende Sprachkonzepte von Java

8.1 Lokale und anonyme Klassen

Lokale Klassen; Definition und Benutzung lokaler Klassen; Beispiel; statische lokale Klas- sen; anonyme Klassen; Beispiel; Realisierung von Funktionen höherer Ordnungen durch Schnittstellen; Beispiel für anonyme Klassen; Erweiterung desnew-Operators; Anwendung lokaler und anonymer Klassen.

(12)

8.2 Weiteres zu den Wrapper-Klassen

Wiederholung der Datentypen; Wrapper-Klassen zu den primitiven Datentypen; Konstruk- toren der Wrapper-Klassen; Wertrückgabe; parse-Methoden; Konstante und weitere Me- thoden; die Klasse Integerals Beispiel; Autoboxing und Unboxing.

8.3 Aufzählungstypen

Motivation; Aufzählungstypen; Enum-Klassen; Eigenschaften und Methoden der Aufzäh- lungstypen; selbstdefinierte Methoden in Enum-Klassen; Datenfelder in Enum-Klassen;

Enum-Konstruktoren; Anwendungsmöglichkeiten für Enum-Klassen; Beispiel: Berechnung des Wochentags eines gegebenen Datums.

8.4 Die Klassen String, StringBuffer und StringTokenizer

Wiederholung und Erweiterung der Klasse String; Konstruktoren; Methoden zur Zei- chenextraktion, zum Vergleich, zum Suchen und Ersetzen sowie Konvertierungsfunktionen;

die Klasse StringBuffer; Unterschiede zur Klasse String; Konstruktoren; einige Metho- den der KlasseStringBuffer; Beipiel: Effizienzsteigerung bei häufiger Konkatenation; die Klasse StringTokenizer; Konstruktoren und einige Methoden; Beispiel.

8.5 Strukturierung von Programmen

Programmelemente von Java; Pakete; Applikationen; Applets; Verwendung von Paketen;

qualifizierter und unqualifizierter Import; statischer Import; das Paketjava.lang; wichtige Java-Pakete; Klassen des Pakets java.util; Bedeutung der Paketnamen; Erstellen eige- ner Pakete; Verzeichnisstruktur der Pakete; das Default-Paket; Zugriffsrechte für Klassen, Methoden und Variable; dieCLASSPATH-Variable.

8.6 Annotationen

Annotation; Metainformation; Annotationsprozessor; reflektive Auswertung; annotierte Programmelemente; Annotationen vs. Kommentare vs. Modifikatoren; die vordefinier- ten Annotationen @Deprecated, @Override, @SuppressWarnings, @Retention, @Target,

@Documentedund @Inherited; Erstellung von Annotationen; Beispiel.

Zwischenstand:

Kurze Zusammenfassung der bisherigen Inhalte.

Jetzt kommen Anwendungen.

(13)

9 Java und Datenstrukturen

9.1 Lineare Listen

Definition und grundlegende Eigenschaften linearer Listen; typische Listenoperationen; „li- neare Liste“ als abstrakter Datentyp; Schnittstelle und Implementierung des abstrakten Datentyps; Strukturinvariante; ausführliche Herleitung der insert-Methode mit Erhal- tung der Strukturinvariante; modifizierte Schnittstelle mit zugehöriger Implementierung;

Behandlung von Elementklassen; Implementierung durch Felder; sortierte Listen; alterna- tive Implementierung mit Zeiger auf das erste Element und Zusatzinformationen; Senti- nel; Aufzählungen; Implementierung und Anwendung von Aufzählungen; zirkuläre Listen;

die Josephus-Funktion; Implementierung von Datenstrukturen; Wiederholung: die Klasse Object; die Klasse Class; Kopieren von Objekten; flache und tiefe Kopien; die Methode clone() der Klasse Object; die Schnittstelle Cloneable; Kopieren einer Liste; unverän- derliche Klassen.

9.2 Generische Datentypen

Wiederverwendbarkeit (reusability); Generizität; generische Methoden; generische Klas- sen; generische Schnittstellen; Beispiel: lineare Listen; die Klasse Number; Typebounds;

Klassen als Typebounds; Schnittstellen als Typebounds; Klassen und Schnittstellen als Typebounds; Wildcards; Invarianz; Bivarianz; Kovarianz; Kontravarianz; Übersicht; er- laubte Operationen; Wiederholung: Typkompabilität; Generizität in Java; Zusammenstel- lung kompatibler Datentypen; Kovarianz bei Array-Typen.

9.3 Keller und Schlangen

Keller; LIFO-Prinzip; Anwendungen; Kelleroperationen; Implementierung eines Kellers durch eine Liste; Implementierung eines Kellers durch ein Feld; Schlangen; FIFO-Prinzip;

Anwendungen; Operationen für Schlangen; Implementierung einer Schlange durch eine Lis- te; Implementierung einer Schlange durch ein Feld; Deques; Bemerkungen zur Java-API.

9.4 Graphen

Graph; Knoten; Kante; gerichteter Graph; ungerichteter Graph; bewerteter Graph; Mehr- fachkante; Zyklus; Schlinge; Attribute; Anwendungsbeispiele; Adjazenz; Grad eines Kno- tens; Pfad; Zusammenhang; vollständiger Graph; gewichteter Graph; Speicherung von Gra- phen: Kantenliste, Knotenliste, Adjazenzmatrix, Adjazenzliste; Komplexität der Operatio- nen; Variationen dieser Möglichkeiten.

9.5 Suchen und Sortieren

Baum; Definition; Wurzel; innerer Knoten; Blatt; Pfad; Tiefe; Anwendungen von Bäu- men; Anzahl der Knoten in einem Binärbaum; Durchlauf durch einen Binärbaum; binäre

(14)

Suchbäume und ihre Implementierung; Sortieren mit binären Suchbäumen; Erzeugung von Zufallszahlen; Bubblesort; Quicksort.

9.6 Hash-Verfahren

Grundlagen; Hash-Funktion; Hash-Tabelle; Kollision; Beispiel; Behandlung von Kollisio- nen; Hash-Verfahren ohne Überlaufbereich; lineare Verschiebung; quadratische Verschie- bung; Hash-Verfahren mit linearer Liste als Überlaufbereich; die Klasse Hashtable; die Klasse HashMap.

9.7 Persistenz von Daten

Persistenz von Daten; Serialisierung und Deserialisierung von Objekten; der Modifika- tor transient; die Schnittstelle Serializable; Anwendungen: Schreiben und Lesen von Objekten in bzw. aus Dateien; tiefes Kopieren durch Serialisierung; Versionierung von se- rialisierten Daten; das Programm serialver; dynamisches Laden von Klassen; Beispiele aus dem Paket java.lang.reflect.

9.8 Das Java Collections Framework

Kollektionen; das Java Collections Framework; Überblick über wichtige Schnittstellen, Implementierungen und Algorithmen:Collection,AbstractCollection,AbstractList, AbstractSet,AbstractMap,Set,SortedSet,List,Queue,Deque,Map,SortedMap,Stack, Vector, TreeSet, HashMap, Iterable, Iterator, ListIterator; Anwendung: sortierte endliche Mengen am Beispiel „Lottotipp“; Comparator; die Kollektion-Algorithmen; Bei- spiel: die KlasseArrayList;ArrayListundLinkedListim Vergleich; Prioritätsschlangen;

die Klasse PriorityQueue.

10 Parallelprogrammierung in Java

10.1 Das Problem des gegenseitigen Ausschlusses

Das Problem des gegenseitigen Ausschlusses; elementare Aktion; Ausführung paralleler Prozesse; interleaving semantics; Beispiel: Betriebsmittelzuweisung; Abstraktion des Pro- blems; verschiedene Lösungsansätze; Szenarium; Sicherheitseigenschaft; Lebendigkeitsei- genschaft; Verklemmung; Verschwörung; der Algorithmus von Dekker; aktives Warten.

10.2 Grundlagen und Begriffe

Prozess; Thread; leicht- und schwergewichtige Prozesse; sequentielle und parallele Ver- arbeitung; Parallelität; Quasi-Parallelität; Nebenläufigkeit; unabhängige und gekoppel- te Anweisungen und Prozesse; Beispiele; Prozessverwaltung; Erzeugen und Beenden von Prozessen; Kommunikation; gemeinsame Variable; Nachrichtenaustausch; Synchronisation;

(15)

synchrone und asynchrone Arbeitsweise; Konzepte zur Nebenläufigkeit in Programmier- sprachen; Semaphore; Monitore; Standardaufgaben der Parallelprogrammierung; Erzeuger- Verbraucher-Problem; Leser-Schreiber-Problem; Problem der speisenden Philosophen; Ne- benläufigkeit in Java.

10.3 Verwaltung von Threads

Die Klasse Thread; Erzeugung eines Threads durch Überlagerung von run; die Methode start; Ende einer Anwendung; Dämonen; als “deprecated” gekennzeichnete Methoden;

Transaktionen; Beenden eines Threads; weitere Methoden der KlasseThread; Lebenszyklus eines Threads; die Schnittstelle Runnable; Beispiel.

10.4 Kommunikation und Synchronisation

Kommunikation durch gemeinsame Variable; Synchronisation durch Monitore; Beispiel:

Bankbetrieb und verlorene Buchungen; der Modifikator synchronized; synchronisierte Methoden und Blöcke; Sperren für Objekte und Klassen; Grundregel zur Synchronisati- on; Wartemenge eines Objekts; die Methoden wait und notify; Fairness; der Modifika- tor volatile; weak/strong transition/process fairness; Lösung des Erzeuger-Verbraucher- Problems; die Methode notifyAll; Beispiel: Parkhausbetrieb; Priorität eines Threads;

Thread-Gruppen; Übersicht über die Methoden der Klasse Object; Programmierrichtlini- en zur Parallelprogrammierung.

10.5 Die speisenden Philosophen

Problemstellung; Lösung in Java mit waitund notifyAll.

10.6 Das Concurrent-Paket

Überblick; die Schnittstellen und Klassen Executor, Executors und ExecutorService;

das Erzeuger-Verbraucher-Problem; die Schnittstellen und Klassen Lock, ReentrantLock und Condition; die Klasse ArrayBlockingQueue; die Klasse Semaphore; Nachrichtenaus- tausch; das Rendez-Vous-Konzept; Hinweis auf die Synchronizer-Klassen (zum Beispiel Exchange), das Unterpaketatomic und die „Concurrent Collections“; Zusammenfassung:

Programmierung von Nebenläufigkeit.

11 Grafikprogrammierung in Java

11.1 Grundlagen

Schnittstelle für Anwenderprogramme; API; das Abstract Window Toolkit (AWT); die Swing-Bibliothek; Hinweis auf das Standard Window Toolkit (SWT); Möglichkeiten des AWTs; grundsätzliche Vorgehensweise; der grafische Kontext; Beispiel: ein einfaches Fens- ter; Ein-Ausgabe-Programmierung; ereignisgesteuerte Programmierung; Delegation Based

(16)

Event Handling; Quelle eines Ereignisses; Beobachter; Single-Cast-Ereignis; Multi-Cast- Ereignis; Schließen eine Fensters; Adapter-Klassen; die KlasseWindowAdapterals Beispiel.

11.2 Grafische Grundelemente

Das grafische Koordinatensystem; Benutzerbereich eines Fensters; Auswahl elementarer Grafikroutinen zur Darstellung von Text, Linien, Rechtecken, Polygonen, Ellipsen und Ellipsenbögen; Schriftarten; Schriften mit Serifen; serifenlose Schriften; Schriften mit va- riabler und konstanter Zeichenbreite; Fett- und Kursivdruck; Methoden zur Ermittlung von Font-Informationen und -Metriken; das RGB-Farbmodell; vordefinierte Farben; ge- bräuchliche Farbwerte; Erzeugung und Verwendung von Farben; die KlasseSystemColor.

11.3 Fensterklassen

Die Behälterklassen Component, Container, Applet, Window und Frame; Aufrufen und Schließen eines Fensters; Eigenschaften eines Fensters.

11.4 Ereignisse und Widgets

Ereignis; Ereignisquelle; Beobachter; ereignisgesteuerte Programmierung; Single-Cast- und Multi-Cast-Ereignis; Adapter-Klasse; Überblick über die Ereignisklassen und Beobachter- Schnittstellen; Low-Level-Events; Widget; wichtige Widgets; Beispiele: Rollbalken, Label, Button, Textfeld, Checkbox, Checkboxgroup, Choice; Realisierung von Widgets.

11.5 Applets

Anwendungen und Applets; Eigenschaften von Applets; Beispiel; grundlegende Methoden;

Umwandlung zwischen Anwendungsprogrammen und Applets; Beispiel.

11.6 Die Swing-Klassen

Die Java Foundations Classes; AWT und Swing im Vergleich; der Peer-Ansatz; leicht- und schwergewichtige Komponenten; einfaches Beispiel mit AWT- und Swing-Klassen; Ein- ordnung der Swingklassen; die Komponentenklassen Component,Container,JComponent, FlowLayout, BorderLayout, GridLayout, Graphics, JLabel, AbstractButton, JRadio Button, JComboBox, JList, JTextComponent, JScrollPane, JPanel, JProgressBar; die Behälterklassen JFrame, JWindow, JDialog, JApplet, JMenuBar, JToolBar,Border; Bor- derFactory, Vorgehensweise zur Erstellung von grafischen Oberflächen; Adapterklassen;

Strukturierung von Behälter- und Beobachterklassen; Beispiel: Fenster mit Menü- und Werkzeugleiste.

(17)

12 Ausblick

12.1 Objektorientierte Programmierung: Entwurfsmuster

Entwurfsmuster; Beispiele für Entwurfsmuster; die Entwurfsmuster „Singleton“, „Immu- table“ und „Observer“.

12.2 Programmierparadigmen und -sprachen

Annotationen; Wiederholung der imperativen, funktionalen und objektorientierten Pro- grammierparadigmen (s. Abschnitte 1.1, 1.2, 3.7, 5.3); funktionale Programme in Scheme;

das deduktive (logische) Paradigma; Fakt; Regel; Horn-Klausel; Anfrage; Ziel; kleine Bei- spiele in Prolog; Funktionen und Relationen; deklaratives Programmieren; wichtige Pro- grammiersprachen im Überblick.

12.3 Gegenstände der Softwaretechnik

Der Begriff „Softwaretechnik“; Software-Entwicklung; Software-Management; Software- Qualitätssicherung; die Modellierungssprache UML (Unified Modeling Language); die Dia- grammtypen der UML; Anwendungsfalldiagramm; Klassendiagramm; Sequenzdiagramm.

12.4 Java 8

Java-Entwicklung; Java-8: Closures, Lambda-Projekt.

Schlussbemerkungen

Rückschau auf die Vorlesungen „Programmieren I und II“; Anmerkungen zum Studium und zum Bachelorstudiengang Informatik; Programmierausbildung im Bachelorstudien- gang Informatik; Vorschau auf weitere Veranstaltungen; Inhalt der Vorlesung „Software Engineering I“; Zielsetzung und Ablauf des „Software-Entwicklungspraktikums“; weitere Veranstaltungen zum Thema „Programmieren“.

(18)

Quellenverzeichnis

[1] Alagić, Suad;Arbib, Michael A.: The Design of Well-Structured and Correct Pro- grams. New York: Springer Verlag, 1978

[2] Alber, Klaus; Struckmann, Werner: Einführung in die Semantik von Program- miersprachen. Mannheim Wien Zürich: BI-Wissenschaftsverlag, 1988

[3] Barnes, David J.; Kölling, Michael: Objects First With Java. 1. Auflage. Harlow, England: Prentice Hall, 2003

[4] Bell, Douglas; Parr, Mike: Java für Studenten. 3. Auflage. München: Pearson Studium, 2003

[5] Ben-Ari, Mordechai: Grundlagen der Parallelprogrammierung. 1. Auflage. München Wien: Carl Hanser Verlag, 1985

[6] Ben-Ari, Mordechai: Principles of Concurrent and Distributed Programming. 2. Auf- lage. Harlow London: Addison-Wesley, 2006

[7] Bentley, Jon: Programming Pearls. Reading, Massachusetts: Addison-Wesley Pu- blishing Company, 1986

[8] Bloch, Joshua; Gafter, Neal: Java Puzzlers. 1. Auflage. Upper Sadle River NJ, Boston: Addison-Wesley Verlag, 2005

[9] Breymann, Ulrich: C++ – Einführung und professionelle Programmmierung. 9., neu bearbeitete Auflage. München: Hanser Verlag, 2007

[10] Budd, Timothy:Classic Data Structures in Java. 1. Auflage. Boston: Addison-Wesley Verlag, 2001

[11] Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford:

Algorithmen – Eine Einführung. 3., überarb. u. erw. Auflage. München Wien: Olden- bourg Verlag, 2010

[12] Deitel, Harvey M.; Deitel, Paul J.: Java—How to Program. 6. Auflage. Upper Saddle River, New Jersey: Pearson Education International, 2005

[13] Duden: Informatik. 4. Auflage. Mannheim: Dudenverlag, 2006

[14] Ehrenberger, Wolfgang: Software-Verifikation. 1. Auflage. München: Hanser Ver- lag, 2002

[15] Esser, Friedrich: Java 6 Core Techniken. 1. Auflage. München: Oldenbourg Verlag, 2008

[16] Esser, Friedrich: Scala für Umsteiger. München: Oldenbourg Verlag, 2011

(19)

[17] Ford, William H.;Topp, William R.: Data Structures with Java. 1. Auflage. Upper Saddle River, New Jersey: Pearson Education International, 2005

[18] Gallenbacher, Jens: Abenteuer Informatik. 2. Auflage. Heidelberg: Spektrum Akademischer Verlag, 2008

[19] Gamma, Erich;Helm, Richard;Johnson, Ralph;Vlissides, John:Design Patterns.

1. Auflage. Boston: Addison-Wesley Verlag, 1995

[20] Harel, David; Feldman, Yishai: Algorithmik. 1. Auflage. Berlin Heidelberg New York: Springer-Verlag, 2006

[21] Henning, Peter A.;Vogelsang, Holger:Taschenbuch Programmiersprachen. 2. Auf- lage. München: Carl Hanser Verlag, 2007

[22] Hoffmann, Dirk W.: Theoretische Informatik. 1. Auflage. München: Hanser Verlag, 2009

[23] Hohlfeld, Bernhard; Struckmann, Werner: Einführung in die Programmverifika- tion. Mannheim Wien Zürich: BI-Wissenschaftsverlag, 1992

[24] Kecher, Christoph: UML 2. 3., durchgesehene Auflage. Bonn: Galileo Press, 2009 [25] Krienke, Rainer: Shell-Programmierung für Unix und Linux. 3., erweiterte Auflage.

München: Hanser Verlag, 2007

[26] Krüger, Guido: Handbuch der Java-Programmierung. 7. Auflage. München:

Addison-Wesley Verlag, 2012

[27] Lahres, Bernhard; Raýman, Gregor: Objektorientierte Programmierung. 2., aktua- lisierte und erweiterte Auflage. Bonn: Galileo Computing, 2009

[28] Lang, Hans W.: Algorithmen in Java. 2. Auflage. München: Oldenbourg Wissen- schaftsverlag, 2006

[29] Lewis, John; Chase, Joseph: Java—Software Structures. 2. Auflage. Upper Saddle River, New Jersey: Pearson Education International, 2005

[30] Mehlhorn, Kurt; Sanders, Peter: Algorithms and Data Structures. 1. Auflage.

Berlin Heidelberg: Springer Verlag, 2008

[31] Nowak, Johannes: Fortgeschrittene Programmierung mit Java 5. 1. Auflage. Heidel- berg: Dpunkt Verlag, 2005

[32] Oechsle, Rainer: Parallele und verteilte Anwendungen in Java. 2., vollständig über- arbeitete und erweiterte Auflage. München: Carl Hanser Verlag, 2007

[33] Ottmann, Thomas; Widmayer, Peter: Algorithmen und Datenstrukturen. 4. Auf- lage. Heidelberg Berlin: Spektrum Akademischer Verlag, 2002

(20)

[34] Pomberger, Gustav;Dobler, Heinz: Algorithmen und Datenstrukturen. 1. Auflage.

München: Pearson Studium, 2008

[35] Ratz, Dietmar;Scheffler, Jens; Seese, Detlef;Wiesenberger, Jan: Grundkurs Programmieren in Java. 6. aktualisierte und erweiterte Auflage. München Wien:

Hanser Verlag, 2011

[36] Rechenberg, Peter: Was ist Informatik? 3. Auflage. München: Hanser Verlag, 2000 [37] Regionales Rechenzentrum für Niedersachsen RRZN(Hrsg.):Linux – Nut- zung mit der grafischen Oberfläche KDE. 1. Auflage. Hannover: Regionales Rechen- zentrum für Niedersachsen RRZN, 2000

[38] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Grundlagen der Programmierung. 4. Auflage. Hannover: Regionales Rechenzentrum für Nieder- sachsen RRZN, 2004

[39] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Unix – Eine Einführung in die Benutzung. 18. Auflage. Hannover: Regionales Rechenzentrum für Niedersachsen RRZN, 2008

[40] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Java 6 (1. Band). 7. Auflage. Hannover: Regionales Rechenzentrum für Niedersachsen RRZN, 2009

[41] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Java 6 (2. Band). 2. Auflage. Hannover: Regionales Rechenzentrum für Niedersachsen RRZN, 2011

[42] Saake, Gunter; Sattler, Kai-Uwe: Algorithmen und Datenstrukturen. 4., über- arb. Auflage. Heidelberg: dpunkt.verlag, 2010

[43] Schiedermeier, Reinhard:Programmieren mit Java. 2., aktualisierte Auflage. Mün- chen: Pearson Studium, 2010

[44] Schiedermeier, Reinhard; Köhler, Klaus: Das Java-Praktikum. 1. Auflage. Hei- delberg: Dpunkt Verlag, 2008

[45] Sedgewick, Robert: Algorithms. 2. Auflage. Reading, Mass.: Addison-Wesley, 1988 [46] Sedgewick, Robert: Algorithmen in Java, Teil 1–4. 3. überarbeitete Auflage. Mün-

chen: Addison-Wesley Verlag, Pearson Studium, 2003

[47] Sedgewick, Robert: Algorithms in Java, Part 5. 3. Auflage. Boston: Addison-Wesley Verlag, 2004

[48] Struckmann, Werner; Wätjen, Dietmar: Mathematik für Informatiker – Grund- lagen und Anwendungen. 1. Auflage. Heidelberg: Spektrum Akademischer Verlag, 2007

(21)

[49] Vogt, Carsten: C für Java-Programmierer. 1. Auflage. München: Hanser Verlag, 2007

[50] Weinert, Albrecht: Java für Ingenieure. 1. Auflage. München: Fachbuchverlag Leipzig im Carl-Hanser-Verlag, 2001

[51] Weiss, Mark A.: Data Structures & Problem Solving Using Java. 3. Auflage. Boston:

Pearson Addison Wesley, 2006

[52] Weiss, Mark A.:Data Structures and Algorithm Analysis in Java. 2. Auflage. Boston:

Pearson Addison Wesley, 2007

[53] Zeller, Andreas; Krinke, Jens: Programmierwerkzeuge. 1. Auflage. Heidelberg:

Dpunkt Verlag, 2000

(22)

A Übungen, Ergänzungen, Fallstudien, Wiederholungen

A.1 Unix-Grundlagen

An- und Abmelden; Passwörter; Display-Manager, Desktop-Manager, Fenster-Manager;

Anatomie eines Kommandos; Shell; Grundlagen der Shell-Bedienung; Shell als Komman- dointerpreter; Umgebungsvariable; Dateisystem; Befehle zur Dateiverwaltung; Pfad; ab- solute und relative Adressierung; Manual- und Info-Seiten; Programmbau mit make; die Unix-Werkzeuge (e)grep,find, sort.

A.2 Vom Algorithmus zum Programm: Programmentwicklung

Das Sieb des Eratosthenes als Beispiel für Programmentwicklung; Struktogramm (Nassi- Shneiderman-Diagramm); Programmablaufplan (PAP); der Zyklus der Programmentwick- lung; Eingabe (Kommandozeile, Tastatur) und Ausgabe (Bildschirm); einführendes Bei- spiel für Makefile.

A.3 Felder

Container; Arrays; Array-Typen; Zeichenfelder vs. Strings; Alloziieren und Initialisieren von Feldern; Deklaration; Zuweisung; Array-Literale; Elementzugriff; For-Each-Schleife;

Kopieren und Vergleichen von Feldern; geschachtelte Felder.

A.4 Regeln zur Formatierung von Java-Programmen

Überblick über die „Code Conventions for the Java Programming Language“:

http://www.oracle.com/technetwork/java/codeconv-138413.html.

A.5 Java-Operatoren

Wiederholung; Überblick; Beispiele.

A.6 Fallstudie: Gaußsche Wochentagsformel

Operatoren: Anwendung Gaußsche Wochentagsformel; Wiederholungsanweisungen: Kalen- der; Objektorientierung: die Klasse Gregorianischer Kalender.

A.7 Abstraktion und Modellierung

Abstraktion; Modellierung; Modellfehler; Datenfehler; Verfahrensfehler; Rundungsfehler;

Numerik; Stabilität eines Algorithmus; Kondition eines Problems; Auslöschung; Lösung quadratischer Gleichungen.

(23)

A.8 Fallstudie: Objektorientierung (Polynome)

Grundlagen der Objektorientierung; Beispiel: Polynomarithmetik (Schiedermeier, Köhler).

A.9 Objektorientierte Konzepte

Grundlagen der Objektorientierung; Objekte; Zustand; Nachricht; Klassen- und Objekt- diagramme; Beziehungen zwischen Klassen: Vererbung; Beziehungen zwischen Klassen und Objekten: der instanceof-Operator; Beziehungen zwischen Objekten: Assoziation, Mul- tiplizität, Kardinalität, Aggregation, Komposition; Ausblick auf UML-Diagramme.

A.10 Fallstudie: Abstrakte Klassen (Funktionen)

Verwendung abstrakter Klassen; Ebenen der Realisation; die abstrakte Klasse Funktion;

verschiedene Realisierungen: Parabel, Hyperbel, Verkettung von Funktionen.

A.11 Berechenbarkeit

Begriffe: Berechenbarkeit, Entscheidbarkeit; Beispiele: Diophantische Gleichungen, Halte- problem, Anzahl der Funktionen N→Nund der Algorithmen.

A.12 Fallstudie: Rekursion, Backtracking (Sudoku)

Rekursive Methoden am Beispiel „Sudoku“; Backtracking.

A.13 Ein interaktiver Blick auf die Java-API

Überblick über die Pakete java.lang, java.util, java.math, java.io und java.text sowie über die Klassen Arrays, Math, BigInteger, BigDecimal, Calendar, Random und Scanner.

A.14 Fallstudie: Rekursion, Backtracking (Sudoku, Wildcards)

Rekursive Methoden am Beispiel „Sudoku“; packages; import-und package-Anweisung;

Backtracking; Pattern-Matching mit Wildcards.

A.15 Algorithmen und Datenstrukturen (Übersicht)

Der intuitive Algorithmenbegriff; Paradigmen; formale Algorithmenbegriff; Komplexität und Korrektheit von Algorithmen; Datenstrukturen und Typsysteme; abstrakte Datenty- pen; Standardalgorithmen; Algorithmenentwurfsmethoden; Variationen des Algorithmen- begriffs.

(24)

A.16 Fallstudie: Komplexität von Algorithmen (1)

Beispielanalyse Insertionsort; landausche Symbole; Komplexitätsklassen; Komplexität re- kursiver Algorithmen; Rekurrenzgleichungen; Mastertheorem; lineare Rekurrenzgleichun- gen; Divide-and-Conquer-Algorithmen; dynamische Algorithmen; Fibonacci-Zahlen.

A.17 Paradigmen und Sprachen (Übersicht)

Natürliche, künstliche und formale Sprachen; GPL (General Purpose Language); Program- mierparadigmen und -sprachen; Skriptsprachen; paradigmenübergreifende Konzepte; DSL (Domain Specific Language); spezielle Sprachklassen; Prinzipien des Sprachentwurfs; De- finition und Implementierung von Sprachen.

A.18 Die Programme des JDK

Überblick;javac (Compiler);java(Interpreter); appletviewer(Appletviewer);jdb(De- bugger); javadoc (Dokumentationsgenerator); jar (Archivierungswerkzeug); javap (Di- sassembler);serialver(Versionierung serialisierter Daten);native2ascii(Änderung der Kodierung).

A.19 Alias-Name, Gültigkeit, Sichtbarkeit und Lebensdauer

Namensgebung: Anonymität, Alias-Name, Namenskollision; Gültigkeitsbereich; Sichtbar- keitsbereich; statische Eigenschaft; dynamische Eigenschaft; Lebensdauer; globale Variable;

lexikalischer/statischer Scope; dynamischer Scope; Schachtelung; Java als flache Sprache;

Auflösung von Namenskollisionen; hängende Referenz.

A.20 Fallstudie: Mergesort, Divide-and-Conquer, Generizität

Diskussion und Vergleich verschiedener Implementierungen von Mergesort: direkte Im- plementierung für Felder eines primitives Datentyps; Implementierung für Felder einer allgemeinen Klasse; Generizität durch eine abstrakte Klasse; Verwendung einer generi- schen Methode; Wiederholung: Divide-and-Conquer-Algorithmen, Analyse des Algorith- mus, Mastertheorem, Zusicherungen, assert-Anweisung.

A.21 Fallstudie: Keller (Klammerstrukturen)

Überprüfung von Klammerstrukturen nach [51]; die Klasse PushBackReader.

(25)

A.22 Abstrakte Datentypen (ADT)

Einsortige und mehrsortige Algebren: Gruppe, Körper, Vektorraum; Datentyp: Signatur, Axiom, Algebra; algebraische Spezifikation; abstrakte Datentypen (ADT); Kapselung; Ge- heimnisprinzip; Beispiele: Listen, Keller, Warteschlangen.

A.23 Fallstudie: Graphen, Breitensuche (Zusammenhangskomponenten)

Bestimmung der Anzahl der Zusammenhangskomponenten eines ungerichteten Graphen durch Breitensuche.

A.24 Fallstudie: Graphen, Darstellung von Graphen (Brücken)

Ungerichtete, ungewichtete Graphen, Speicherung von Graphen, Algorithmus zur Bestim- mung der Brücken eines Graphen.

A.25 Skriptsprachen, C-Shell, JavaScript

Kommandosprachen; Skriptsprachen; Beispiele für Skriptsprachen; Merkmale von Skript- sprachen; Einsatz von Skriptsprachen; Überblick: die Sprache der C-Shell, JavaScript.

A.26 Parallelprogrammierung: Fairness

Fairness: weak-transition-fairness, strong-transition-fairness, weak-process-fairness, strong- process-fairness; Verhältnis der Fairness-Begriffe zueinander; Beispiel.

A.27 Fallstudie: Bäume (AVL-Bäume)

Wiederholung: binäre Suchbäume; ausgeglichene Bäume; AVL-Bäume; Höhe von AVL- Bäumen; Einfügen und Löschen von Elementen; Rotation; Doppelrotation.

A.28 Fallstudie: Greedy-Algorithmen, Graphen (kürzeste Pfade)

Gerichtete, gewichtete Graphen, Java Collections Framework, Algorithmus von Dijkstra zur Bestimmung kürzester Pfade.

A.29 Fallstudie: Zeichnen von Funktionen

Die Fallstudie zeigt, wie durch Variablen die zur Verfügung stehende Fläche ermittelt und verwendet werden kann.

(26)

A.30 Die Programmiersprache C

Wiederholung: Das imperative Paradigma; Historie der Sprache; grundlegende Eigenschaf- ten; Standards; Struktur und Übersetzung von C-Programmen; Präprozessor; Anweisungen des Präprozessors; Java und C im Vergleich; Kontrollstrukturen; skalare und zusammen- gesetzte Datentypen; Typdefinitionen; Zeiger; Funktionen; dynamische Datenstrukturen;

Ein- und Ausgabe; Beispiel: verkettete Listen in C.

(27)

B Themen der Übungsaufgaben

B.1 1. Übungsblatt

Aufgabe 1: Unix-Grundlagen, an- u. abmelden, Passwortänderung.

Aufgabe 2: Unix-Grundlagen, Dateien, Verzeichnisse.

Aufgabe 3: Unix-Grundlagen, Editor, Java-Compiler u. -Interpreter.

Aufgabe 4: Unix-Grundlagen, Java-Compiler u. -Interpreter, Fehlermeldungen.

Aufgabe 5: Unix-Grundlagen, Java-Compiler u. -Interpreter.

Aufgabe 6: Intuitiver Algorithmusbegriff.

B.2 2. Übungsblatt

Aufgabe 7: Unix-Grundlagen, Wiederholung.

Aufgabe 8: Ein erstes Programm: Arithmetische und Vergleichsoperatoren, lineares Pro- gramm (Lösung quadratischer Gleichungen), Ein-/Ausgabe.

Aufgabe 9: Ausgabeanweisung.

Aufgabe 10: Compilermeldungen, Fehlersuche und -berichtigung.

Aufgabe 11: Eingabe von der Kommandozeile.

Aufgabe 12: Arithmetische Operatoren, Fallunterscheidung (Kfz-Steuer).

Aufgabe 13: Kommentare.

Aufgabe 14: Bezeichner.

Aufgabe 15: Bezeichner, Deklarationen.

B.3 3. Übungsblatt

Aufgabe 16: Ausdrücke und Operatoren: Zeichenketten, Konkatenation, Zuweisungsope- ratoren, bitweise Operatoren.

Aufgabe 17: Zeichensätze, Darstellung von Zeichen und ganzzahligen Werten.

Aufgabe 18: Dualzahlen.

Aufgabe 19: Darstellung von Gleitkommazahlen, der primitive Datentyp double.

Aufgabe 20: Deklarationen, primitive Datentypen.

Aufgabe 21: Operatoren.

Aufgabe 22: If-Anweisung.

(28)

Pflichtaufgabe 23: Einführung in das Programmieren; arithmetische Operatoren, Fall- unterscheidung, Eingabe über Kommandozeile (Zeitzone).

Aufgabe 24: Einführung in das Programmieren; arithmetische Operatoren, Fallunter- scheidung, Eingabe über Kommandozeile (Zeitzone). Erweiterung der vorigen Aufgabe.

B.4 4. Übungsblatt

Aufgabe 25: Umsetzen eines gegebenen Algorithmus, die drei Schleifentypen von Java.

Aufgabe 26: Anwendung einfacher Schleifen (σ-Funktion).

Aufgabe 27: Anwendung einfacher Schleifen (Geburtstagsproblem).

Aufgabe 28: Geschachtelte Schleifen.

Aufgabe 29: Variable, Ausdrücke, Schleifen (fröhliche und traurige Zahlen).

Aufgabe 30: Variable, Ausdrücke, Schleifen, Ein-/Ausgabe (ISBN).

Aufgabe 31: Anweisungen, Ausgabe.

Pflichtaufgabe 32: Variable, Ausdrücke, Schleifen, Ausgabe (Mid-Square-Methode).

B.5 5. Übungsblatt

Aufgabe 33: Variable, Ausdrücke, Schleifen, Ein-/Ausgabe (Ducci-Folgen).

Aufgabe 34: Wiederholung grundlegender Konzepte: Literale, Speicherung von Werten, Operatoren, Anweisungen.

Pflichtaufgabe 35: Klasse, Objekt, Attribut, Methode, Überlagerung von Methoden der KlasseObject (toString, equals,clone), statische Methode, Instanzmethode, typischer Aufbau einer Klasse, Aufgabe zur objektorientierten Programmierung ohne Vererbung (Punkte, Geraden).

B.6 6. Übungsblatt

Aufgabe 36: Klasse, Objekt, Attribut, Methode, Methoden der Klasse Object: clone, equals,toString, Aufgabe zur objektorientierten Programmierung ohne Vererbung (Uhr- zeiten).

Aufgabe 37: Vererbung, Überlagern von Methoden.

Aufgabe 38: Klasse, Objekt, Attribut, Methode, Überlagerung von Methoden der Klasse Object(toString,equals,clone), statische Methode, Instanzmethode, typischer Aufbau einer Klasse, Aufgabe zur objektorientierten Programmierung ohne Vererbung (rationale Zahlen).

Pflichtaufgabe 39: Abstrakte Klassen, Vererbung, Überlagern von Methoden, Schnitt- stellen, Polymorphismus (Figuren, Dreiecke, Kreise).

(29)

B.7 7. Übungsblatt

Aufgabe 40: Nachvollziehen eines rekursiven Algorithmus (Geldwechsel).

Aufgabe 41: Auswertung einer rekursiv definierten Funktion.

Aufgabe 42: Iterative und rekursive Implementierung einer rekursiv definierten Funktion.

Aufgabe 43: Auswertung einer rekursiv definierten Funktion.

Aufgabe 44: Implementierung eines rekursiven Algorithmus (Sortieren eines Feldes).

Aufgabe 45: Implementierung eines iterativen und eines rekursiven Algorithmus (Bino- mialkoeffizienten).

Aufgabe 46: Rekursion, Backtracking (Teilmengensummen-Problem).

Pflichtaufgabe 47: Rekursion, Backtracking, Eingabe aus einer Datei (Irrgarten).

B.8 8. Übungsblatt

Aufgabe 48: Wiederholung: Programmverifikation, partielle und totale Korrektheit, Vor- und Nachbedingung, Schleifeninvariante,assert-Anweisung.

Aufgabe 49: Wiederholung: C0- und C1-Überdeckungstests.

Aufgabe 50: Wiederholung: Ausnahmebehandlung, assert-Anweisung, Programmveri- fikation, Test, (Ganzzahlige Arithmetik).

Aufgabe 51: Wiederholung: Programmverifikation, partielle und totale Korrektheit von Programmen, Vor- und Nachbedingung, Scheifeninvariante, assert-Anweisung, Komple- xität.

Aufgabe 52: Wiederholung: Ausnahmebehandlung, benutzerdefinierte Fehlerklasse.

B.9 9. Übungsblatt

Aufgabe 53: Wiederholung: Grundlagen des imperativen und objektorentierten Program- mierens (gemischte Zahlen).

Aufgabe 54: JDK: Debuggerjdb, Archivierungswerkzeugjar, Dokumentationsgenerator javadoc.

Aufgabe 55: Wiederholung: Grundlagen des imperativen und objektorentierten Program- mierens (Widerstandsnetz).

Aufgabe 56: Wiederholung: Komplexität, partielle und totale Korrektheit von Program- men, assert-Anweisung (Insertionsort).

Aufgabe 57: Aufzählungstypen (physikalische Einheiten).

(30)

B.10 10. Übungsblatt

Aufgabe 58: Programmierung linearer Listen durch Verkettungen.

Aufgabe 59: Programmierung linearer Listen durch Verkettungen.

Aufgabe 60: Programmierung linearer Listen durch Felder.

Pflichtaufgabe 61: Programmierung linearer Listen durch Verkettungen (Anwendung:

Verarbeitung von CSV-Dateien).

B.11 11. Übungsblatt

Aufgabe 62: Implementierung generischer Keller durch verkettete Listen und Felder, Anwendung von generischen Kellern (Löschsymbol), Testen von Programmen.

Aufgabe 63: Implementierung generischer Keller durch verkettete Listen und Felder, An- wendung von generischen Kellern (Umwandlung eines arithmetischen Ausdrucks von Infix- in Postfixnotaion mit einem Character-Keller, Auswertung des Ausdrucks in Postfixno- tation mit einem Integer-Keller).

Aufgabe 64: Generische Methoden, Keller, Java Collections Framework, Rekursion vs.

Iteration.

Aufgabe 65: Generische Klassen und Schnittstellen, binäre Suchbäume.

Pflichtaufgabe 66: Generische Datentypen; Verallgemeinerung der letzten Pflichtaufga- be; Programmierung linearer Listen durch Verkettungen (Anwendung: Verarbeitung von CSV-Dateien).

B.12 12. Übungsblatt

Aufgabe 67: Binäre balancierte Suchbäume, generische Datentypen (AVL-Bäume).

Aufgabe 68: Entwurf von Programmen, Java Collections Framework, gerichtete gewich- tete Graphen (Algorithmus von Dijkstra zur Bestimmung kürzester Wege).

Aufgabe 69: (Un)gerichtete azyklische Graphen, generische Datentypen, erweiterte Tie- fensuche (topologische Sortierung).

Pflichtaufgabe 70: Ungerichtete Graphen, Java Collections Framework, (Algorithmus von Kruskal).

B.13 13. Übungsblatt

Aufgabe 71: Entwurf von Programmen, Java Collections Framework (Kakuro).

Aufgabe 72: Ein C-Programm (Kakuro).

Aufgabe 73: Threads, Atomic-Klasse.

Pflichtaufgabe 74: Threads, Parallelisierung eines Divide-Conquer-Algorithmus (Quick- sort).

(31)

B.14 14. Übungsblatt

Aufgabe 75: Threads, Applets (Konvertierung von Celsius- in Fahrenheit-Grade).

Aufgabe 76: Grafikausgabe und -eingabe mit der Swing-Bibliothek (kleiner ganzzahliger Taschenrechner).

Aufgabe 77: Grafikausgabe mit der Swing-Bibliothek (Kakuro).

Pflichtaufgabe 78: Grafikausgabe und -eingabe mit der Swing-Bibliothek (Adressen, csv-Datei).

Referenzen

ÄHNLICHE DOKUMENTE

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen

Grundbausteine eines Java Programms Schlüsselwörter, Kommentare Variablen und Datentypen Operatoren und Ausdrücke Kontrollstrukturen. Anweisungsfolge (Sequenz) Auswahlstrukturen