Programmierung Java



16. Dezember 2008

Nachbesprechung der Klausur




12. Dezember 2008 (Freitag)

Klausur "Programmierung mit Java"

Hinweise zur Klausur:
Die Klausur orientiert sich an den auf dieser Webseite zusammengefaßten Themen.
Fachbegriffe sind an geeigneter Stelle in Antworten immer gern gesehen, die Betonung liegt hier allerdings auf "geeigneter Stelle".

Hier sind die im Unterricht behandelten Power Point Folien mit ergänzenden Informationen zu den Such- und Sortier-Algorithmen:
suchen.ppt [78 KB]
sortieren.ppt [158 KB]

Nicht klausurrelevant ist: Quick Sort, UML




09. Dezember 2008 (Dienstag)


PAP: Programmablaufplan

ein Ablaufdiagramm für ein Computerprogramm
auch als "Flussdiagramm" oder "Programmstrukturplan" bezeichnet
bei modernen Programmiersprachen (wie z.B. Java) eher nicht mehr gebräuchlich
DIN 66001 http://www.cabeweb.de/html/din66001.htm
Software PAP-Designer: http://www.gso-koeln.de/papdesigner/Hauptseite.html

PAP-Aufgabe

Der folgende Link zeigt ein Beispiel für ein PAP-Diagramm:
http://upload.wikimedia.org/wikipedia/commons/3/38/Flussdiagramm_%28Programmablaufplan%29.png

Bilden Sie dieses Beispiel-PAP-Diagramm mit Hilfe der Software PAP-Designer nach!
Welche Aufgabe erfüllt das durch das Diagramm skizzierte Programm?
Programmieren Sie das Programm mit Eclipse in Java!


UML: Unified Modelling Language

standardisierte Sprache für die Modellierung von Software und anderen Systemen
ISO 19501
insbesondere geeignet für objektorientierte Programmiersprachen (z.B. Java)
es gibt verschiedene Arten von UML-Diagrammen
Software ArgoUML: http://argouml.tigris.org/
[UML ist nicht Klausurrelevant]



03. Dezember 2008 (Mittwoch)

Rekursion
rekursive Methoden

Die Fakultäts-Funktion der Mathematik als rekursive Methode in Java.

Binäre Suche
- Verbesserung der sequentiellen Suche
- Implementierung als rekursive Funktion

Interpolationssuche
- Verbesserung der binären Suche

Was bedeutet hier "Verbesserung"?
Warum ist die Binäre Suche besser als die Sequentielle Suche und warum ist die Interpolationssuche besser als die Binäre Suche?
Zwischen der Binären Suche und der Interpolationssuche gibt es nur einen kleinen Unterschied im Quellcode. Welchen?

Thema: Sortieralgorithmen
- Selection Sort
- Bubble Sort
- Insertion Sort
- Quick Sort [Quick Sort ist nicht Klausurrelevant]

Such- und Sortieralgorithmen: sus.jar [6 KB]

Ein Java-Applet zur anschaulichen Verdeutlichung von Selection-, Bubble- und Insertion-Sort:
http://nova.umuc.edu/~jarc/idsv/lesson10.html

Ein Java-Applet zur anschaulichen Verdeutlichung von Quick- und Merge-Sort:
http://nova.umuc.edu/~jarc/idsv/lesson11.html

Welcher Sortieralgorithmus ist "besser" als ein anderer?
Welche Kriterien machen einen guten Sortieralgorithmus aus?

Ein eindrucksvoller Geschwindigkeitsvergleich verschiedener Sortieralgorithmen:
http://www.inf.hs-anhalt.de/~Worzyk/IiN/applets/sort/sortAlgorithms.html




25. November 2008 (Dienstag)

Nachbesprechung der Aufgabe vom letzten Unterrichtstag.
medienverwaltung2.jar [12 KB]

Der Umgang mit Objekten:
Erzeuge eine Instanz einer Klasse und weise sie einer Instanzvariable zu.

instanceof-Operator (Kapitel 5.7.2.3):
Der instanceof-Operatur erzeugt einen boolschen Wert (true oder false).

static und nicht static (dynamisch):
Dynamische Objekte werden zur Laufzeit erzeugt und können erst danach verwendet werden.
Statische Methoden und Felder existieren automatisch ab dem Moment des Programmstarts, sie können sofort verwendet werden (es gibt allerdings einige Besonderheiten zu beachten).

In der obigen JAR-Datei gibt es parallel die Klassen Medienverwaltung.java und Medienverwaltung2.java.
Erstere besitzt nur statische Methoden und Felder. Die andere zeigt die dynamische Variante, siehe insbesondere die main-Methode.

JavaDoc-Kommentare
Automatisches erstellen von HTML-Seiten aus den JavaDoc-Kommentaren im Quelltext.

Thema: Suchalgorithmen

Sequentielle Suche
- Suchen immer von Beginn an
- Suchen ab einer definierten Startposition

Vergleich des Quellcodes zwischen beiden Varianten der sequentiellen Suche.
Was sind die Vor-/ Nachteile der einen gegenüber der anderen Variante?
(Insbesondere im Hinblick auf die Daten im zu durchsuchenden Array.)




21. November 2008 (Freitag)

Skizzieren Sie auf einem Blatt Papier die Vererbungshierarchie der Klassen im Projekt Medienverwaltung vom letzten Unterrichtstag!

Erweiterung des Projekts Medienverwaltung:
Schaffen einer Menüstruktur mit Hauptmenü und Untermenüs
Schaffen einer Ein- und Ausgabemöglichkeit für CDs und Zeitschriften (noch nicht für DVDs und Zeitungen)




18. November 2008 (Dienstag)

Wiederholung der "ungeschriebenen Gesetze der Programmierung".
Es gibt auch niedergeschriebene Regeln bei der Java-Programmierung:
http://www.et-inf.fho-emden.de/~swtlab/formulare/javaregeln.html

Wichtiger Grundsatz: Trennung von Anwendungslogik und Ausgabe.

Einführung in die Objektorientierten Programmierung (OOP):
Abstraktion (Kapitel 7.1.2)
(Daten-) Kapselung (Kapitel 7.1.3, Getter- und Setter-Methoden, private- und public-Deklaration)
Wiederverwendung von Quellcode (Kapitel 7.1.4, Vererbung, Vererbungshierarchie)

Klassen und Instanz einer Klasse
Instanzvariablen (Kapitel 4.3.1)

Erstes OOP-Beispiel mit Vererbung: oop1.jar [5 KB]
Projekt Medienverwaltung: medienverwaltung.jar [6 KB]
Hinweise:
*.jar-Dateien sind Archiv-Dateien, welche i.d.R. mehrere anderen Dateien enthalten. Sie können ein JAR-Archiv z.B. mit einem ZIP-Programm öffnen.
Alternativ können Sie in Eclipse in einem bestehenden Projekt den "src"-Ordner markieren und über den Menüpunkt "File / Import" im Zweig "General / Archive File" die JAR-Datei zum Import auswählen.




11. November 2008 (Dienstag)

Besprechung der Programmier-Aufgabe von letzter Woche
Type-Cast-Operator (Kapitel 5.7.1, Die Umwandlung eines Datentyps in einen anderen Typ, z.B. Umwandlung von int in double)
Wiederholung SWITCH-Anweisung
Wiederholung Methoden (Name, Übergabeparameter, Rückgabewert)

Neue Programmieraufgabe: zahlenprojekt.pdf [12 KB]
Musterlösung dieser Aufgabe: zahlenprojekt.zip [ KB]
Diese Programmieraufgabe hat leider eine ganze Reihe Personen stark gefordert oder sogar überfordert. Ziel dieser Aufgabe und der vorgestellten Musterlösung war folgendes:


Wiederholung von in den letzten Wochen vorgestellten Java-Anweisungen in einer Praxisaufgabe.
Erstellen von vielen Methoden, die jeweils ein sehr kleines und überschaubarens Problem lösen. (Teile das Gesamtproblem auf in viele kleine Teil-Probleme, Divide-And-Conquer)
Zusammenfügen dieser vielen kleinen Methoden zu einem Gesamtprogramm.
Die Schwierigkeit dabei besteht in der vorausschauenden Festlegung der benötigten Methoden.
Schauen Sie in die Musterlösung und Sie werden erkennen, dass die einzelnen Methoden jeweils sehr aussagekräftige Namen tragen, d.h. allein am Namen erkennen Sie schon, welche Aufgabe die Methode erfüllt.
Ebenfalls erfüllt die Musterlösung eine ganz zentrale Forderung in der Programmierung: Trennen Sie die Anwendungslogik von der Augabe!
Dies bedeutet für die Programmierung: Entweder berechnet eine Methode etwas und gibt den berechneten Wert zurück, oder eine Methode ist für eine Ausgabe auf dem Bildschirm verantwortlich. Aber es gibt keine Methode, die etwas berechnet und das Ergebnis gleichzeitig ausgibt.
Der Vorteil dieser Vorgehensweise wird sofort deutlich, wenn Sie in der Musterlösung die Methode ermittleMittelwert betrachten: hier wird die Methode ermittleSumme aufgerufen, was nur funktioniert, weil in ermittleSumme keine Ausgabe auf dem Bildschirm erfolgt.

Wer die Vorgehensweise aus dem Zahlenprojekt noch etwas üben möchte, dem sei folgende ähnliche Programmieraufgabe empfohlen: wortprojekt.pdf [13 KB]




04. November 2008 (Dienstag)

Wdh. Schleifen (for, while, do-while)
Wdh. Konstanten und Arrays
String-Vergleiche
Praktische Anwendungen anhand eines Beispielprogramms

Aufgabe

bestellsystem2.zip [ KB]

Dieses Programm bricht bei Ausführung mit einem Fehler ab.
Verändern Sie den Quellcode derart, dass kein Abbruch aufgrund eines Fehlers mehr passiert und die ersten Menüpunkte weiter durch eine Zahl, der Menüpunkt Ende aber mit einem x gewählt werden kann.




28. Oktober 2008 (Dienstag)

Einlesen von der Tastatur mit Hilfe der Scanner-Klasse (Kapitel 2.3.3)
SWITCH-Anweisung (mit und ohne break) (Kapitel 6.2.2)
Schleifen (Kapitel 6.3), WHILE, DO, FOR
Zeichenketten: String (Kapitel 11.2)
Methoden (Kapitel 7.3), Fachbegriffe: Name der Methode, Übergabeparameter, Rückgabewert
Arbeiten mit der Java-API-Doc http://java.sun.com/javase/6/docs/api/

Beispielprogramm Bestellsystem

Nachfolgend zum Download das Java-Programm des Bestellsystems.
bestellsystem.zip [ KB]

Aufgabe: Machen Sie sich den Inhalt und den Ablauf des Programms verständlich.
Orientieren Sie sich beispielsweise an folgenden Fragen:

Woran erkennt man den Aufruf einer Methode?
Woran erkennt man welche Übergabeparameter eine Methode hat?
Woran erkennt man welchen Rückgabewert eine Methode hat?
Wie kann man einen weiteren Menüpunkt dem Programm hinzufügen?
Wie kann man die for-Schleife durch eine while-Schleife ersetzen?
Wie kann man die for-Schleife durch eine do-while-Schleife ersetzen?

Lassen Sie das Programm im Debug-Modus ablaufen!
Machen Sie sich insbesondere mit den Unterschieden zwischen "Step-over" und "Step-Into" vertraut.




21. Oktober 2008 (Dienstag)

Im folgenden finden Sie Stichpunktartig die Inhalte dieses Unterrichtstages.
Die Kapitelnummern beziehen sich auf das Handbuch der Java-Programmierung, siehe ganz unten.


Grundlagen der Java-Programmierung
Download und Installation des JDK
Hello World (Kapitel 2.2)
Übersetzen von Quelltext in Bytecode auf der Kommandozeile
Ausführen des Bytecodes auf der Kommandozeile
Installation von Eclipse
Anlegen eines neuen Projekts in Eclipse
Erstellen einer neuen Klasse in Eclipse
Kopieren von Beispielprogrammen aus dem Handbuch der Java-Programmierung in Eclipse
Starten von Java-Programmen unter Eclipse
Der Eclipse-Debug-Modus, setzen von Breakpoints, schrittweise Ausführung
Die main-Methode als Startpunkt bei der Ausführung
Kommentare in Java (Kapitel 4.1.2)
Fachbegriff: Bezeichner
Primitive Datentypen (Kapitel 4.2)
Variablen (Kapitel 4.3), Fachbegriffe: Deklaration, Initialisierung, Sichtbarkeit
Ausgaben auf der Konsole: System.out.println()
Arrays (Kapitel 4.4)
Arithmetische Operatoren (Kapitel 5.2)
Die leere Anweisung und der Block (Kapitel 6.1)
IF-Anweisung (Kapitel 6.2.1)



Nützliche Links zur Programmierung


Java API Specification
http://java.sun.com/javase/6/docs/api/

The Really Big Index - A list of all content pages in the The Java Tutorial
http://java.sun.com/docs/books/tutorial/reallybigindex.html

Guido Krüger, Thomas Stark
Handbuch der Java-Programmierung
http://www.javabuch.de/
(HTML-Version des Buchs zum kostenlosen Download)