Technische Universität Braunschweig
Institut für Programmierung und Reaktive Systeme
Dr. Werner Struckmann
29. Januar 2017
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 imperativen und objektorientierten Programmierung anhand der Programmiersprache »Java«
vermittelt und in der Übung, in der die Teilnehmer kleine Programme selbstständig entwickeln sollen, angewendet.
Stichwörter: Algorithmen und Programme, Programmiersprachen, Grundlagen der imperativen und objektorientierten Programmierung, Java, primitive Datentypen, Referenztypen, Felder und Zeichenketten, Anweisungen, Klassen, Objekte, (statische) Attribute,
(statische) Methoden, Konstruktoren, Vererbung, Schnittstellen, abstrakte Klassen, Beziehungen zwischen Klassen und Objekten, Rekursion, funktionale Programmierung, Ausnahmebehandlung, Programmkorrektheit, Test von Programmen, Ein- und Ausgabe.
Termine:
Beginn: Mo. 17. Oktober 2016
Vorlesung: Mo. 15:00–16:30 Uhr PK 15.1
Übung: Do. 08:00–09:30 Uhr PK 15.1
Sprechstunde: Mi. 10:30–11:30 Uhr
IZ 244
Diese Datei wird im Laufe des Semesters wöchentlich aktualisiert!
Gliederung der Veranstaltung
Vorbemerkungen
1 Algorithmus und Programm
1.1 Vom Algorithmus zum Programm
1.2 Programmiersprachen
1.3 Korrektheit, Komplexität und Entscheidbarkeit
1.4 Software-Grundlagen
2 Erste Schritte in Java
3 Java: Grundlagen der Sprache
3.1 Lexikalische Elemente
3.2 Datentypen und Variable
3.3 Ausdrücke
3.4 Speicherung von Werten
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
Quellenverzeichnis
A Themen der Übungsaufgaben
A.1 1. Übungsblatt
A.2 2. Übungsblatt
–2–
A.3
A.4
A.5
A.6
A.7
3.
4.
5.
6.
7.
Übungsblatt
Übungsblatt
Übungsblatt
Übungsblatt
Übungsblatt
–3–
Vorbemerkungen
Informatik als Wissenschaft; inhaltlicher Überblick über die Vorlesung; organisatorische
Aspekte; Literaturempfehlungen.
1 Algorithmus und Programm
1.1 Vom Algorithmus zum Programm
Algorithmusbegriff; Spezifikation; Eigenschaften von Algorithmen; Algorithmus und Programm; Programmiersprache; programmieren; grundlegende Aspekte der Entwicklung von
Algorithmen: Paradigma, Komplexität, Korrektheit, Verifikation, Berechenbarkeit, Entscheidbarkeit, Church’sche These, Entwurf von Algorithmen, abstrakter Datentyp, Varianten des Algorithmusbegriffs, Hinweis auf Standardalgorithmen; Paradigmen zur Algorithmenbeschreibung: imperativ, funktional, objektorientiert und logisch; weitere Paradigmenbegriffe: prozedural, deklarativ, hybrid; Beispiel eines imperativen Algorithmus; der
Algorithmus von Euklid; Zustand; Zustandstransformation; Datenstrukturen; Typsystem;
natürliche und künstliche Sprachen; Sprachen der Informatik.
1.2 Programmiersprachen
Entwicklung der Programmiersprachen; Definition von Programmiersprachen; lexikalische
Struktur; Syntax; Semantik; Pragmatik; Klassifikation der Programmiersprachen: Maschinensprachen, Assembler und problemorientierte Sprachen; Implementierung von Programmiersprachen: Interpreter, Compiler, Mischverfahren, Just-in-Time-Compiler; Verarbeitung von Java-Programmen.
1.3 Korrektheit, Komplexität und Entscheidbarkeit
Spezifikation; Korrektheit; partielle und totale Korrektheit; Verifikation; Nachweis der partiellen und totalen Korrektheit des Algorithmus von Euklid; Schleifeninvariante; Test; Validation; Komplexität; Komplexität des Algorithmus von Euklid; O-Notation, landausche
Symbole; Entscheidbarkeit; Herleitung der Komplexität eines Sortieralgorithmus; Halteproblem; Nachweis der Unentscheidbarkeit des Halteproblems; Berechenbarkeit; Existenz
nicht berechenbarer Funktionen.
1.4 Software-Grundlagen
Systemsoftware; Anwendungssoftware; Softwarewerkzeuge; Betriebssystem; textuelle und
grafische Oberfläche; wichtige Betriebssysteme; Dateiverwaltungssystem; Editor; Programmierwerkzeuge; Programmierumgebungen.
–4–
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-Formatierung; Programmkommentare; der Dokumentationsgenerator javadoc; objektorientierte
Programmiersprachen; der Algorithmus von Euklid als statische Methode; Sprachmerkmale von Java; Entwicklung von Java; einige Java-Konzepte; einige Programme des JDK;
Zusammenfassung der Einführung.
3 Java: Grundlagen der Sprache
3.1 Lexikalische Elemente
Lexik; Lexem; Eingabezeichen; Unicode, Unicode-Transformationsformat; Ausgabe von
Systemeigenschaften; 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 primitiven Datentypen; Variable; Instanz- und Klassenvariable; lokale Variable; Deklaration und
Initialisierung von Variablen; Zuweisung: Storage-Semantik, Assignment by sharing of references; Lebensdauer; Sichtbarkeit; Arrays; Deklaration, Allokation und Initialisierung von
Arrays; mehrdimensionale Arrays; Strings; Referenztypen; Erzeugung 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 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; Zuweisungsoperatoren; Fragezeichen-Operator; cast-Operator; weitere Operatoren; Vorrangregeln für Operatoren.
3.4 Speicherung von Werten
Beispiele für fehlerhafte Rechnungen mit einem Java-Programm; Speicherung von Information; Byte Order; big endian, little endian; ASCII- und ISO-Latin-1-Zeichensatz; UnicodeZeichensatz; Unicode-Transformations-Formate (UTF); Speicherung ganzzahliger Daten-
–5–
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 Referenztypen; schematisches Speicherbild.
3.5 Anweisungen
Die Java Language Specification; Beispiele aus dem Kapitel zur Syntax; Übersicht über
die Java-Anweisungen; elementare Anweisungen; leere Anweisung; Block; Variablendeklaration; definite assignment; Datenflussanalyse; Ausdruck als Anweisung; If- und SwitchAnweisung; While- und Do-Anweisung; abweisende und nicht abweisende Schleifen; ForAnweisung; 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 Gebieten: Berechnung von Zinseszinsen; Teilbarkeit; Darstellung einer natürlichen Zahl zu
einer beliebigen Basis; schnelle Exponentiation; Horner-Schema; Skalarprodukt von Vektoren; Länge eines Vektors; Produkt von Matrizen; Nullmatrix; Beispiel zu Break- und
Continue-Anweisungen mit Marken; Newton-Verfahren zur Nullstellenbestimmung; Bubblesort; Erzeugung von Pseudozufallszahlen mit der linearen Kongruenzmethode.
3.7 Ein Blick auf imperatives Programmieren
Variable; Zustand; Wertzuweisung; Sequenz; Selektion; Iteration; Ein- und Ausgabe; Zustand 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, Module, 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 Objekts; Nachricht; wert- und identitätsbasierte Objektmodelle; Kapselung und Geheimnisprinzip; Abstraktion und Modellierung; Klasse; Objekt; Instanz; Methode; Membervariable; Instanzvariable; Attribut; Erzeugung und Initialisierung von Objekten; Deklaration von Variablen und Methoden; Zuweisung von Objekten; Semantik von Variablen
und Zuweisungen; Storage-Semantik; Assignment-by-sharing; Parameter einer Methode;
–6–
Aufruf einer Methode; Punktnotation; this-Zeiger; Parameterübergabe; Rückgabewert einer Methode; Überladen von Methoden; Signatur einer Methode; Konstruktoren; DefaultKonstruktor; 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.
4.2 Vererbung
Beziehungen zwischen Klassen; Vierecke und ihre Beziehungen; einfache Vererbung; Basisklasse; Oberklasse; abgeleitete Klasse; Unterklasse; Spezialisierung; Generalisierung; Zuweisungen; Polymorphie; Verdecken von Variablen; Überlagern von Methoden; dynamische
Methodensuche; die super-Notation; die Klasse Object; die Methode String toString();
die Methode boolean equals(); die Methode Object clone(); Konstruktoren; der Superklassenkonstruktor; Reihenfolge der Aufrufe von Konstruktoren; finale Klassen; Vererbungshierarchien; Vererbungshierarchien als gerichtete Bäume; mehrfache Vererbung;
Klassendiagramm; Objektdiagramm; Beziehungen zwischen Klassen und Objekten: der
instanceof-Operator; Beziehungen zwischen Objekten: Assoziation, Kardinalität, Multiplizität, Aggregation, Komposition.
4.3 Modifikatoren
Modifikator; die Modifikatoren public, final und abstract für Klassen; die Modifikatoren public, private, protected, static, final und abstract für Variable und Methoden; Bemerkungen zum Einsatz von Modifikatoren; Hinweis auf weitere Modifikatoren.
4.4 Klassenvariable und statische Methoden
Klassenvariable; Deklaration und Zugriff; Beispiel: Objektzähler; Konstante; Klassenmethoden; 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 abstrakte Klassen und Polymorphismus: Gehaltsberechnung; polymorphe Methoden in Konstruktoren.
4.6 Schnittstellen
Definition einer Schnittstelle; Implementierung einer Schnittstelle; Beispiel; das Interface
Comparable; Aussage der API über die Methode compareTo; die Klasse String; kleinstes
Element und Bubblesort als Beispiele; Generizität; mehrfache Implementierung; Schnittstellen und Vererbung; Verwendung von Schnittstellen; Konstanten.
–7–
4.7 Zusammenfassung
Wiederholung, Überblick und Zusammenfassung über objektorientiertes Programmieren;
Vorteile der Vererbung; Vorgehensweise beim objektorientierten Programmieren.
5 Rekursion/Funktionale Programmierung
5.1 Einführung und Begriffe
Rekursives Konzept; Fakultät; Motivierendes Beispiel: Berechnung der Quersumme einer natürlichen Zahl durch eine iterative 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; Beispiele: Fakultät, Fibonacci-Folge, Algorithmus von Euklid, schnelle Exponentiation, Summe, 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 BubblesortAlgorithmus; Quicksort; Wrapper-Klassen der primitiven Datentypen; einige Konstruktoren 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; Zusammenfassung der Aspekte; Java 8: Beispiele für
funktionales Interface, Lambda-Ausdrücke, static-Methode im Interface, default-Methode
im Interface; Hinweis: Streams und Pipeline-Operationen werden wir später behandeln.
6 Zuverlässigkeit von Programmen
Motivation.
6.1 Behandlung von Ausnahmesituationen
Die Ausnahmen ArithmeticException und ArrayIndexOutOfBoundsException; Behandlung von Ausnahmen; Beispiele für Ausnahmen; grundlegende Begriffe: Ausnahme, Auslösen einer Ausnahme, Behandeln einer Ausnahme; die try-catch-Anweisung; prinzipielle
–8–
Vorgehensweise; die Methode parseInt; Beispiel: Zahldarstellung zu verschiedenen Basen;
Fehlerobjekte; Fortsetzen nach einer Ausnahme; mehrere catch-Klauseln; die finallyKlausel; 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; Beispiele; wichtige Javadoc-Markierungen.
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; Schleifeninvariante; Kontrollflussinvariante; komplexe Zusicherungen; Klasseninvariante; bedingte Übersetzung; Ausschalten von Zusicherungen; Seiteneffekte; Einschalten von Zusicherungen.
6.4 Testen von Programmen
Phasen der Software-Entwicklung; Modelle der Software-Entwicklung; Dokumente; Modellierungssprachen; UML; Struktur- und Verhaltensdiagramme; Werkzeuge; Spezifikation; Verifikation; Sicherheits- und Lebendigkeitseigenschaften; Validierung; Test; systematisches Testen; Modultest; Integrationstest; Auswahl der Testdaten; Black- und WhiteBox-Tests; Überdeckungsmaße für White-Box-Tests; JUnit: Einführung mit Beispiel.
–9–
Quellenverzeichnis
[1] Alagić, Suad; Arbib, Michael A.: The Design of Well-Structured and Correct Programs. New York: Springer Verlag, 1978
[2] Alber, Klaus; Struckmann, Werner: Einführung in die Semantik von Programmiersprachen. 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. Auflage. Harlow London: Addison-Wesley, 2006
[7] Bentley, Jon: Programming Pearls. Reading, Massachusetts: Addison-Wesley Publishing 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: Oldenbourg 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 Verlag, 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
– 10 –
[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. Auflage. München: Carl Hanser Verlag, 2007
[22] Hettel, Jörg; Tran, Man T.: Nebenläufige Programmierung mit Java. 1. Auflage.
Heidelberg: dpunkt.verlag, 2016
[23] Hoffmann, Dirk W.: Theoretische Informatik. 1. Auflage. München: Hanser Verlag,
2009
[24] Hohlfeld, Bernhard; Struckmann, Werner: Einführung in die Programmverifikation. Mannheim Wien Zürich: BI-Wissenschaftsverlag, 1992
[25] Kecher, Christoph: UML 2. 3., durchgesehene Auflage. Bonn: Galileo Press, 2009
[26] Krienke, Rainer: Shell-Programmierung für Unix und Linux. 3., erweiterte Auflage.
München: Hanser Verlag, 2007
[27] Krüger, Guido: Handbuch der Java-Programmierung.
Addison-Wesley Verlag, 2012
7. Auflage.
München:
[28] Krüger, Guido; Hansen, Heiko: Java-Programmierung – Das Handbuch zu Java 8.
8. Auflage. Köln: O’Reilly Verlag, 2014
[29] Lahres, Bernhard; Raýman, Gregor: Objektorientierte Programmierung. 2., aktualisierte und erweiterte Auflage. Bonn: Galileo Computing, 2009
[30] Lang, Hans W.: Algorithmen in Java. 2. Auflage. München: Oldenbourg Wissenschaftsverlag, 2006
[31] Lewis, John; Chase, Joseph: Java—Software Structures. 2. Auflage. Upper Saddle
River, New Jersey: Pearson Education International, 2005
[32] Louis, Dirk; Müller, Peter: Java — Der umfassende Programmierkurs. Köln:
O’Reilly Verlag, 2014
[33] Mehlhorn, Kurt; Sanders, Peter: Algorithms and Data Structures. 1. Auflage.
Berlin Heidelberg: Springer Verlag, 2008
– 11 –
[34] Nowak, Johannes: Fortgeschrittene Programmierung mit Java 5. 1. Auflage. Heidelberg: Dpunkt Verlag, 2005
[35] Oechsle, Rainer: Parallele und verteilte Anwendungen in Java. 2., vollständig überarbeitete und erweiterte Auflage. München: Carl Hanser Verlag, 2007
[36] Ottmann, Thomas; Widmayer, Peter: Algorithmen und Datenstrukturen. 5. Auflage. Heidelberg Berlin: Spektrum Akademischer Verlag, 2012
[37] Pomberger, Gustav; Dobler, Heinz: Algorithmen und Datenstrukturen. 1. Auflage.
München: Pearson Studium, 2008
[38] Ratz, Dietmar; Scheffler, Jens; Seese, Detlef; Wiesenberger, Jan: Grundkurs
Programmieren in Java. 6. aktualisierte und erweiterte Auflage. München Wien:
Hanser Verlag, 2011
[39] Ratz, Dietmar; Scheffler, Jens; Seese, Detlef; Wiesenberger, Jan: Grundkurs
Programmieren in Java. 7. überarbeitete und erweiterte Auflage. München Wien:
Hanser Verlag, 2014
[40] Rechenberg, Peter: Was ist Informatik? 3. Auflage. München: Hanser Verlag, 2000
[41] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Linux – Nutzung mit der grafischen Oberfläche KDE. 1. Auflage. Hannover: Regionales Rechenzentrum für Niedersachsen RRZN, 2000
[42] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Grundlagen
der Programmierung. 4. Auflage. Hannover: Regionales Rechenzentrum für Niedersachsen RRZN, 2004
[43] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Unix – Eine
Einführung in die Benutzung. 18. Auflage. Hannover: Regionales Rechenzentrum für
Niedersachsen RRZN, 2008
[44] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Java 6
(1. Band). 7. Auflage. Hannover: Regionales Rechenzentrum für Niedersachsen RRZN,
2009
[45] Regionales Rechenzentrum für Niedersachsen RRZN (Hrsg.): Java 6
(2. Band). 2. Auflage. Hannover: Regionales Rechenzentrum für Niedersachsen RRZN,
2011
[46] Saake, Gunter; Sattler, Kai-Uwe: Algorithmen und Datenstrukturen. 4., überarb. Auflage. Heidelberg: dpunkt.verlag, 2010
[47] Schiedermeier, Reinhard: Programmieren mit Java. 2., aktualisierte Auflage. München: Pearson Studium, 2010
[48] Schiedermeier, Reinhard; Köhler, Klaus: Das Java-Praktikum. 1. Auflage. Heidelberg: Dpunkt Verlag, 2008
– 12 –
[49] Sedgewick, Robert: Algorithms. 2. Auflage. Reading, Mass.: Addison-Wesley, 1988
[50] Sedgewick, Robert: Algorithmen in Java, Teil 1–4. 3. überarbeitete Auflage. München: Addison-Wesley Verlag, Pearson Studium, 2003
[51] Sedgewick, Robert: Algorithms in Java, Part 5. 3. Auflage. Boston: Addison-Wesley
Verlag, 2004
[52] Struckmann, Werner; Wätjen, Dietmar: Mathematik für Informatiker – Grundlagen und Anwendungen. 2. Auflage. Berlin Heidelberg: Springer Vieweg Verlag,
2016
[53] Vogt, Carsten: C für Java-Programmierer. 1. Auflage. München: Hanser Verlag,
2007
[54] Weinert, Albrecht: Java für Ingenieure. 1. Auflage. München: Fachbuchverlag
Leipzig im Carl-Hanser-Verlag, 2001
[55] Weiss, Mark A.: Data Structures & Problem Solving Using Java. 3. Auflage. Boston:
Pearson Addison Wesley, 2006
[56] Weiss, Mark A.: Data Structures and Algorithm Analysis in Java. 2. Auflage. Boston:
Pearson Addison Wesley, 2007
[57] Zeller, Andreas; Krinke, Jens: Programmierwerkzeuge. 1. Auflage. Heidelberg:
Dpunkt Verlag, 2000
– 13 –
A Themen der Übungsaufgaben
A.1 1. Übungsblatt
Aufgabe 1: Unix-Grundlagen, an- u. abmelden, Passwortänderung.
Aufgabe 2: Editor, Java-Compiler u. -Interpreter.
Aufgabe 3: Editor, Java-Compiler, Fehlermeldungen.
Aufgabe 4: Änderung eines Java-Ausdrucks.
A.2 2. Übungsblatt
Aufgabe 5: Unix-Grundlagen, Wiederholung.
Aufgabe 6: Ein erstes Programm: Arithmetische und Vergleichsoperatoren, lineares Programm (Lösung quadratischer Gleichungen), Ein-/Ausgabe.
Aufgabe 7: Ausgabeanweisung.
Aufgabe 8: Compilermeldungen, Fehlersuche und -berichtigung.
Aufgabe 9: Einfache Ausdrücke, Eingabe von der Kommandozeile.
A.3 3. Übungsblatt
Aufgabe 10: Kommentare.
Aufgabe 11: Bezeichner.
Aufgabe 12: Bezeichner, Deklarationen.
Aufgabe 13: Ausdrücke und Operatoren: Zeichenketten, Konkatenation, Zuweisungsoperatoren, bitweise Operatoren.
Aufgabe 14: Einführung in das Programmieren; arithmetische Operatoren, Fallunterscheidung, Eingabe über Kommandozeile (Zeitzone).
Aufgabe 15: Einführung in das Programmieren; arithmetische Operatoren, Fallunterscheidung, Eingabe über Kommandozeile (Zeitzone). Erweiterung der vorigen Aufgabe.
Aufgabe 16: Einführung in das Programmieren; arithmetische Operatoren, Fallunterscheidung, Eingabe über Kommandozeile (13-stellige ISBN).
Pflichtaufgabe 17: Zweidimensionales array.
– 14 –
A.4 4. Übungsblatt
Aufgabe 18: Zeichensätze, Darstellung und Speicherung von Zeichen und ganzzahligen
Werten.
Aufgabe 19: Literale, Speicherung von Gleitkommazahlen, der primitive Datentyp float.
Operatoren, Anweisungen.
Aufgabe 20: Deklarationen, primitive Datentypen.
Aufgabe 21: Operatoren.
Aufgabe 22: If-Anweisung.
Aufgabe 23: Umsetzen eines gegebenen Algorithmus: Drei Schleifentypen von Java.
Pflichtaufgabe 24: Einlesen von Textdateien.
A.5 5. Übungsblatt
Aufgabe 25: Anwendung einfacher Schleifen (σ-Funktion).
Aufgabe 26: Anwendung einfacher Schleifen (Geburtstagsproblem).
Aufgabe 27: Variable, Ausdrücke, Schleifen (fröhliche und traurige Zahlen).
Aufgabe 28: Anweisungen, Ausgabe (Klasse BrowserTest).
Aufgabe 29: Variable, Ausdrücke, Schleifen, Ausgabe (Mid-Square-Methode).
Aufgabe 30: 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 (Mengen,
Zeichen als Elemente).
Pflichtaufgabe 31: Aufgabe zur objektorientierten Programmierung des Spiels.
A.6 6. Übungsblatt
Aufgabe 32: Klasse, Objekt, Attribut, Methode, Methoden der Klasse Object: clone,
equals, toString, Aufgabe zur objektorientierten Programmierung ohne Vererbung (Uhrzeiten).
Aufgabe 33: Vererbung, Überlagern von Methoden.
Aufgabe 34: Wiederholung der Objektorientierung, 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).
Aufgabe 35: Abstrakte Klassen, Vererbung, Überlagern von Methoden, Schnittstellen,
Polymorphismus (Figuren, Dreiecke, Kreise).
– 15 –
Aufgabe 36: Abstrakte Klassen, Vererbung, Überlagern von Methoden, Schnittstellen,
Polymorphismus (Funktion, Wertetabelle, Newton-Verfahren, Parabel).
Pflichtaufgabe 37: Objektorientierung mit abstrakter Klasse.
A.7 7. Übungsblatt
Aufgabe 38: Nachvollziehen eines rekursiven Algorithmus (Geldwechsel).
Aufgabe 39: Auswertung einer rekursiv definierten Funktion.
Aufgabe 40: Iterative und rekursive Implementierung einer rekursiv definierten Funktion.
Aufgabe 41: Diverse Auswertungen (innermost, outermost) einer rekursiv definierten
Funktion.
Aufgabe 42: Implementierung eines rekursiven Algorithmus (Sortieren eines Feldes).
Pflichtaufgabe 43: Ein Programm mit Rekursion.
– 16 –