Zum Inhalt springen

  • Beiträge
    72
  • Kommentare
    239
  • Aufrufe
    12.708

Modul: GdI3 -Anwendungsprogrammierung


kurtchen

850 Aufrufe

Nach Datenbanken, Mathe1 und SQL hatte ich richtig Lust, wieder einen Kurs mit Java zu belegen. Der nächste Kurs aus dieser Gruppe war "Grundlagen der Informatik 3: Anwendungen programmieren". Der Kurs deckt verschiedene Themen ab, die mit Anwendungsentwicklung zu tun haben. Aus meiner Sicht gibt es aber 3 inhaltliche Schwerpunkte:
- GUI-Programmierung
- Persistenz mit relationalen Datenbanksystemen
- Erzeugung und Verarbeitung von XML-Dateien

 

Der Kurs beginnt wie bei der W3L üblich mit einem Schnelleinstieg, der eine Art Überblick über die Themen des Kurses gibt. Bei GdI3 handelt dieser Schnelleinstieg aber nur von den GUI-Kapiteln, die auch mehr als die Hälfte des Kursumfangs ausmachen. Die GUI-Programmierung wird noch am Beispiel Swing behandelt, obwohl mit JavaFX ja ein aktuellerer Rahmen zur Verfügung steht. Das hat mich anfangs ein bisschen enttäuscht.

 

Auf den ersten 40 Seiten lernt man das Grundgerüst einer Swing-Anwendung kennen; lernt, wie man ein Fenster durch Kompositon oder Vererbung erzeugt, macht erste Erfahrungen mit Event-Handling und lernt einfache Komponenten wie Textfelder und Buttons kennen. In diesem Zusammenhang muss man auch mit inneren Klassen und mit Lambda-Ausdrücken umgehen. Hier geht es zunächst gemächlich voran. Eine wichtige Rolle spielt stets die Darstellung der Zusammenhänge zwischen den Swing-Klassen durch Klassendiagramme in UML. Es geht in erster Linie um das Verstehen der Grundkonzepte. Für meinen Geschmack war es ein bisschen viel UML und ein bisschen wenig Code. Auch das Herumexperimentieren mit den Komponenten kam mir ein bisschen zu kurz. Hier musste ich mir selber zusätzliche Gelegenheiten suchen, das Gelernte durch kleine Experimente zu vertiefen. Auf das Buch, das ich ergänzend verwendet habe, verweise ich am Ende meines Beitrages.

 

Es folgen 3 kürzere Kapitel über das Testen von GUIs, über GUI-Grafikeditoren und über Applets, die ja inzwischen keine so große Rolle mehr spielen. Da Applets am Anfang sehr wichtig für die Etablierung der Sprache Java waren, konnte man sie wohl nicht übergehen. Die Kapitel über Grafikeditoren sind nicht so umfangreich, dass man hinterher wirklich mit so einem Werkzeug umgehen könnte. Man weiß, dass es so etwas gibt und welche Vor- und Nachteile die Arbeit mit einem Editor haben kann. Ich habe die Aufgaben alle von Hand gecodet und ich glaube, so lernt man in diesem Stadium auch am meisten.

 

Das Kapitel über Grafikprogrammierung fand ich nicht sehr zugänglich. Natürlich hätte man hier schnell zeigen können, wie man ein paar Linien und Formen zeichnet, aber die Intention war, zu vermitteln, was der Grafikontext ist und wozu man die Methode paint() überschreibt. Später im Kurs ist das einmal Grundlage dafür, Swing-Komponenten ein wenig zu erweitern und mit einer eigenen Optik auszustatten. Außerdem lernt man, wie man Grafiken lädt und anzeigt.

Interessanter ist das Kapitel, das die Ereignisverarbeitung in Java im Detail behandelt. Hier lernt man das Beobachter-Muster kennen und begreift, wie Adapterklassen die Ereignisverarbeitung vereinfachen. Das Praxisbeispiel ist ein sehr einfacher UML-Editor.

 

An diesem Punkt des Kurses begann mir zu dämmern, das GUI-Programmierung eine recht zeitaufwändige Angelegenheit sein kann. Man landet schnell bei ziemlich umfangreichem Code, der gar nicht mehr so leicht zu navigieren ist.

 

Das für mich interessanteste Kapitel war "GUI-Gestaltung - Theorie und Praxis". Hier lernt man viele verschiedene Swing-Komponenten im Zusammenspiel kennen: Fenster, Menüs, Multifunktionsleisten, Listen, Dialoge und die unterschiedlichsten darin enthaltenen Interaktionselemente. Als Fallbeispiel dient eine Artikel- und Lieferantenverwaltung. Konzeptionell lernt man etwas über das MVC-Muster. Sehr interessant fand ich die Abschnitte, wie man auf der Grundlage der objektorientierten Analyse ein GUI konzipieren kann. Die hier vorgestellten Heuristiken sind für kaufmännisch-administrative Anwendungen gedacht, aber der Stoff war sehr aufschlussreich, weil einem klar wird, dass man nicht immer das Rad neu erfinden muss. Lohnend war auch der Abschnitt über Layout-Manager. Hier ging es zunächst um die Layout-Manager, die Swing von Haus aus mitbringt. Es brauchte eine Weile, bis ich das Konzept des schon recht flexiblen GridBag-Layoutmanagers verstanden hatte. Wirklich schwierig fand ich die Ausführungen zur Entwicklung eigener Layout-Manager. Hier konnte ich nicht in allen Punkten folgen.

 

Nach einem kurzen Kapitel über modellgetriebene Entwicklung am Beispiel von Enterprise Architekt landete man beim zweiten großen inhaltlichen Block: Persistenz mit relationalen Datenbanken. Ich hatte mir vorgestellt, recht pragmatisch zu lernen, wie ich mit JDBC eine Verbindung zu einer relationalen Datenbank wie z.B. MySQL aufbaue. Darum ging es auch zunächst, aber eigentlich ging es vor allem um das DAO-Muster, das Fachkonzept und Datenbank schön entkoppelt, so dass man z.B. die verwendete Datenbank relativ leicht wechseln könnte, ohne Code in den Fachkonzeptklassen ändern zu müssen. Man arbeitet allein an der schlanken Schnittstelle. Das wird dann schon recht komplex und ich habe eine ganze Weile gebraucht, bis ich das Zusammenspiel der vielen verschiedenen Klassen begriffen habe. Der Clou an der Angelegenheit ist natürlich, dass nicht jeder Entwickler verstehen muss, was hier im Detail passiert. In der Regel wird interessieren was vor der Schnittstelle passiert. Diese Abschnitte waren für mich sehr lohnend, weil ich hier das Gefühl hatte, nicht allein etwas über Java zu lernen.

 

Weniger gelungen fand ich den Abschnitt über die Java Persistence API. Hier ist es mir leider auch nicht gelungen, die Codebeispiele aus dem Kurs zum Laufen zu bringen.

 

Es folgt ein kurzes Kapitel über Nebenläufigkeit. Das ist nötig, weil Swing nicht threadsicher ist. Wer in Java GUIs programmiert muss sich mit Nebenläufigkeit auseinander setzen. Hier lernt man aber nur das nötigste, denn es gibt ein eigenes Modul "Nicht-sequentielle Programmierung", in dem Nebenläufigkeit viel ausführlicher behandelt wird.

 

Nun folgte ein umfangreiches Fallbeispiel "Auftragsverwaltung", bei dem die verschiedenen Abschnitte der Entwicklung vorgestellt wurden: Pflichtenheft und Glossar, OOA-Modell, GUI, Architektur und Komponenten, OOD des Fachkonzeptes, Persistenzschicht und natürlich auch die Ausprogramierung der entwickelten Modelle. An diesem Punkt möchte ich erwähnen, dass die Code-Beispiele in diesem Kurs viel umfangreicher sind als in GdI1 und GdI2. Anliegen des Kurses ist auch, dass der Lernende den Überblick über größere Mengen Code behalten kann. Die BlueJ-IDE aus den ersten beiden Modulen reicht hier nicht mehr aus. Die Studierenden sollen sich mit Eclipse vertraut machen. Die herunterladbaren Codebeispiele sind auch dafür aufbereitet. Ich mag Eclipse nicht und habe lieber mit Netbeans gearbeitet, was natürlich auch in Ordnung war, aber manchmal ein bisschen Mehrarbeit bedeutet hat. Bei vielen Aufgaben programmiert man nicht mehr "from scratch" sondern soll vorhandenen Code weiterentwickeln. Interessant waren auch Aufgaben, bei denen man Fehler aufspüren und beheben sollte. Dazu musste man erkunden, wie das Zusammenspiel vieler Klassen in unterschiedlichen Paketen funktioniert. Hier genügte oft wenig Code, um das Problem zu lösen, aber es kostete viel Zeit, zu verstehen, wo dieser Code hin musste, um seine Wirkung zu entfalten. Es verschaffte mir eine gewisse Befriedigung, mich in umfangreicheren Code einarbeiten zu können und mich dann auch darin zurecht zu finden. Den Abschluss dieses sehr aufschlussreichen Fallbeispiels bildeten 2 Abschnitte über Berechtigungssteuerung und Internationalisierung.

 

Und nun begann der dritte größere inhaltiche Block des Kurses. Am Fallbeispiel der technischen Anwendung "Wetterstation" wurde die Verarbeitung von XML-Dateien behandelt. Die Wetterstation ist eine GUI-Anwendung, die sich Wetterdaten von einem Server holt und am Bildschirm in Form verschiedener Instrumente darstellt. Die Wetterdaten kommen im XML-Format und müssen geparst werden. Hier war ich froh, Webprogrammierung schon belegt zu haben, denn so hatte ich Vorkenntnisse in XML. Zwar gab es auch hier eine knappe Einführung in XML, aber allein damit wären mir diese Abschnitte schwer gefallen.

 

Im letzten Kapitel wurde am Beispiel Othello (oder auch Reversi) ein Strategiespiel mit GUI entwickelt. Hier spielt Grafikprogramierung eine Rolle, aber eigentlich ging es um den Minimax-Algorithmus, der den besten Zug ermitteln sollte. Im Prinzip schon ein kleiner Vorgeschmack auf GdI4 "Algorithmen und Datenstrukturen".

Für die Online-Klausur ist es nützlich, den Code der Übungen und Aufgaben griffbereit zu haben. Manche Aufgaben hätte ich in der zur Verfügung stehen Zeit nicht ausprogrammieren können, wäre mir nicht recht früh aufgefallen, dass ich Code aus vorangegangenen Übungen anpassen kann. Ich nehme an, dass war hier auch Zweck der Übung.

 

Da man bei der GUI-Programmierung recht schnell bei umfangreichem Code landet, war ich natürlich sehr gespannt auf die Präsenzklausur. Wie wollte man den umfangreichen Inhalt in der kurzen Zeit abprüfen? Tatsächlich musste ich relativ wenig Code schreiben. Hier ging es um das Verständnis für die Zusammenhänge zwischen den verschiedenen Swing-Klassen und sehr allgemein um die objektorientierten Konzepte aus dem Modul. Sehr nützlich wäre es hier gewesen, noch einmal Stoff aus GdI2 zu wiederholen. In UML sollte man fit sein. Reines Programmieren genügte hier nicht.

 

Ich hatte aber Glück und konnte das Modul mit einem schönen Ergebnis abschließen. Auch mit meinem Tutor hatte ich Glück. Er war derselbe wie in GdI2 und es war schön, in 2 aufeinanderfolgenden Modulen die auch noch inhaltlich eng zusammenhingen vom gleichen Tutor betreut zu werden. Von ihm habe ich nicht nur gute und schnelle Rückmeldungen zu meinen Aufgaben bekommen. Ich hatte auch immer wieder Fragen, die eher auf Nebengleise führten und gelegentlich bekam ich sehr interessante Anregungen. Das hat mal wieder Spaß gemacht.

 

Anderen Studierenden, die GdI3 belegen wollen, würde ich empfehlen, zuvor "Webprogrammierung" und "SQL und relationale Datenbanken" zu belegen, um die Kapitel über XML-Parsing und Datenbankanbindung zu zu verstehen. Ein nicht zu großer zeitlicher Abstand zu GdI2 erscheint mir ebenfalls günstig. Insgesamt würde ich empfehlen, beim Bearbeiten von GdI2 gründlich vorzugehen. Die hier behandelten Grundlagen verfolgen euch über viele Module. GdI3 ist dafür ein gutes Beispiel.

 

Ich hatte ja schon erwähnt, dass mir das praktische Herumprobieren mit Code im Modul ein wenig zu kurz kam. Hier habe ich mir selber eine alternative Möglichkeit gesucht, nämlich das Buch "Swing - A Beginner's Guide" von Herbert Schildt. Das ist kein Uni-Lehrbuch sondern ein praktisches Programmierbuch. Im wesentlichen stellt Herr Schildt Swing-Komponenten vor und zeigt an kleinen Codebeispielen, wie man sie benutzt. In jedem Kapitel gibt es auch kleine Übungsaufgaben. Das hat mir sehr viel gebracht, um zu lernen, wie ich die sehr gut aufbereiteten Konzepte aus dem W3L-Modul ganz praktisch in Java ausprogrammieren kann. Von Herrn Schildt gibt es auch ein einführendes Buch in JavaFX, das allerdings sehr dicht geschrieben ist und sich klar an Leser richtet, die Swing-Vorkenntnisse haben.

2 Kommentare


Empfohlene Kommentare

Zitat

 Die GUI-Programmierung wird noch am Beispiel Swing behandelt, obwohl mit JavaFX ja ein aktuellerer Rahmen zur Verfügung steht. Das hat mich anfangs ein bisschen enttäuscht.

 

Können die Swing-Kenntnisse denn dann relativ einfach auf JavaFX übertragen werden, oder fängt man dann wieder sehr weit vorne an?

 

Zitat

Weniger gelungen fand ich den Abschnitt über die Java Persistence API. Hier ist es mir leider auch nicht gelungen, die Codebeispiele aus dem Kurs zum Laufen zu bringen.

 

Gibt es in solchen Fällen Unterstützung durch den Tutor?

Link zu diesem Kommentar
Zitat

Gibt es in solchen Fällen Unterstützung durch den Tutor?

Habe ich an dieser Stelle nicht versucht, weil ich vermutet habe, dass der Abschnitt für die Klausur nicht relevant ist. Das erschien mir eher als Nebenschauplatz, wo noch mal schnell etwas vorgestellt wurde.

 

In erster Linie helfen die Tutoren bei Fragen zum Kursinhalt und bei Problemen mit Übungen und Aufgaben. Wenn irgendeine Bibliothek oder ein Tool verwendet wird, ist im Kurs in der Regel eine kurze Installationsanleitung vorhanden. Da sich Software schnell weiterentwickelt, ist die aber oft schon nicht mehr ganz aktuell. Da wird dann eher auf die Homepage des Herstellers oder des Projektes verwiesen, wo die Informationen zum aktuellen Release zu finden sind. Das finde ich auch sinnvoll so.

 

Zitat

Können die Swing-Kenntnisse denn dann relativ einfach auf JavaFX übertragen werden, oder fängt man dann wieder sehr weit vorne an?

Ich nehme mal die Bücher von Herbert Schildt als Beispiel. "Swing - A Beginner's Guide" hat 590 Seiten, "Introduction to JavaFX 8 Programming" nur noch 262. Der Untertitel des zweiten Buches ist "A Fast-Paced Guide to JavaFX GUI Programming Fundamentals". Fast-paced scheint es zu treffen. Ich glaube nicht, dass das ein gutes Buch für Neulinge ist. Ich habe es nicht durchgearbeitet, aber syntaktisch scheint mir JavaFX-Code kompakter auszufallen als Swing-Code. Wenn ich mir die Code-Beispiele anschaue, habe ich das Gefühl, gut nachvollziehen zu können, was passiert. Um so etwas selber schreiben zu können, müsste ich mir die Finger schmutzig machen: Die Beispiele durcharbeiten, mir Variationen ausdenken, rumprobieren, mir eigene Probleme überlegen und die lösen.

 

Bei JavaFX kommen allerdings viele neue Features hinzu und wenn man die nutzen wollte, müsste man sich doch noch mal ganz anders einarbeiten.

 

Letztlich weiß man ja nicht, mit welcher Sprache man später beruflich zu tun haben wird. Und natürlich gibt es zu jeder Sprache verschiedene GUI-Frameworks. Das kann nicht Sinn eines Studiums sein, die alle vorzustellen. Man muss ein paar grundlegende Konzepte verstehen. Was ist ein Action-Listener, wie funktioniert Event-Handling, was sind gängige GUI-Komponenten, was macht ein Layout-Manager? Solches Wissen ist übertragbar. GdI3 bemüht sich, solche Grundkenntnisse zu vermitteln und tut dies am Beispiel Swing.

Link zu diesem Kommentar

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden


×
  • Neu erstellen...