Grafische Benutzerschnittstellen mit JFace und zentralen Benutzeraktionen

Bild des Benutzers Axel Pospischil
Druckversion dieser SeiteDruckversion dieser SeiteSeite per E-Mail sendenSeite per E-Mail senden
figure pics/Boo94_Concurrency_P79.png

Der Autor sucht nach Möglichkeiten plattformunabhängige, grafische Benutzerschnittstellen mittlerer Größe zu erstellen, die den Anspruch auf Enterprise Niveau haben (multiple Fenster, zentraler Datenbestand), jedoch von kleinen Entwicklerteams (2+) in kurzer Zeit erstellt werden können. Dazu soll ein robustes, gut dokumentiertes und gewartetes natives GUI Framework verwendet werden (JFace, ein freies Klassenframework von IBM (eclipse.org) für die Java Plattform 5). Die erstellte Applikation soll dabei übersichtlich, gut wartbar und erweiterungsfähig sein. Auf die Verwendung von GUI Buildern wird verzichtet. Es wird zum Einen ein Prozess zum Mappen von Entwurfsmustern auf konkrete Anwendungen vorgestellt. Zum Anderen durch Reverse Engineering des Musters ”Actions and Contributions” aus JFace gezeigt, wie man Muster in quelloffenen Umgebungen identifizieren und für die weitere Verwendung im Team dokumentieren kann.



Lesen sie das ganze Dokument

Die gesamte Dokumentation können Sie im PDF Format herunterladen:
Im Anschluss lesen sie einige Auszüge.

Vorwort

Wer kennt das nicht? Die ersten Gespräche mit dem Kunden verlaufen vielversprechend. Die vielfältigen Möglichkeiten zur Softwareentwicklung im Kopf, finden sich schnell zahlreiche Anforderungen auf der Liste wider, ohne dass genau klar ist, wie diese tatsächlich umgesetzt werden können. ”Benutzerfreundlichkeit” oder ”Usability” ist dabei eine Standardanforderung für grafische Oberflächen.
Moderne Entwicklungsumgebungen für grafische Benutzerschnittstellen lassen einen leicht vergessen, dass diese maschinell erstellte Software später auch gewartet werden muss. Doch wie kann man sich von diesen Werkzeugen unabhängig machen? Wie kann verhindert werden, dass das Rad immer wieder neu erfunden wird? Der Autor zeigt auf, wie die objektorientierte Vorgehensweise helfen kann, die Komplexität der Anforderungen an grafische Benutzerschnittstellen in den Griff zu bekommen.
Ein Softwareprojekt verbringt heutzutage nur noch 10-25% seines Lebenszyklus in der eigentlichen Entwicklungsphase. 75-90% werden für Wartungs- und Erweiterungsarbeiten eingeplant. Dies bedeutet zwangsläufig auch, dass für die Entwicklung immer weniger Zeit zur Verfügung steht. Wie kann dies organisiert werden und welche Hilfsmittel stehen dem Entwickler und Softwarearchitekten dabei zur Verfügung?
Entwurfsmuster speichern das Wissen über softwaretechnische Fragestellungen. Doch wie lässt sich dieses Wissen für reale Anwendungen nutzen? Die wichtigsten Standardwerke über Entwurfsmuster stammen aus der Mitte der 90er Jahre. Konzepte und Muster für die Entwicklung grafischer Oberflächen und deren Implementierung gehen bis auf die frühen 80er Jahre und weiter zurück. Schon bei deren Lektüre wird rasch klar, dass ein tieferes Verständnis der Quellen notwendig und das objektorientierte Programmierparadigma mehr ist, als die stereotype Anwendung von Entwurfsmustern. Sie ist ein kreativer Prozess, der tief mit den realen Anforderungen verbunden ist.
Hinzu kommen eine Fülle an Möglichkeiten zur Implementierung grafischer Benutzerschnittstellen: auf verschiedenen Betriebssystemplattformen, Programmiersprachen und Rechnerarchitekturen. Weitere Faktoren sind die stetig wachsende Zahl an verfügbaren Klassensammlungen, deren Anzahl auch für Experten schwer überschaubar ist. Welche Produkte eignen sich für das konkrete Ziel, grafische Oberflächen plattformübergreifend zu realisieren, ohne dabei zu stark von einem Hersteller abhängig zu sein? Und wie kann man das Wissen, welches in quelloffenen Klassensammlungen vorhanden ist, für eigenen Projekte nutzbar machen und dokumentieren?
Viele Entwickler sehen sich als Mitglied einer weltweiten Gemeinschaft, die versucht, die Probleme der Informatik und deren Forschungsgegenstände zu dokumentieren, zu kommentieren und zu beschreiben. Dies schliesst Laien, Akademiker, Fachleute und Anwender mit ein. Ihre wesentliche Kommunikationsplattform ist die Entwicklung und Nutzung von Open Source Software.
Der Zuwachs an freien Programmiersprachen, Frameworks und Werkzeugen ist enorm. Demgegenüber steht eine gut ausgestattete Konkurenz mit kommerziellen, hochintegrierten Entwicklungsumgebungen und Plugins, die natürlich auch Ihren Preis haben. Zahlreiche ”Schenkungen” von Software an die Community und eine Standardisierungswelle sondergleichen dokumentieren diesen Vorgang deutlich: IBM: Eclipse.org. Sun: OpenSolaris, Java. Apple: MacOSX. Microsoft: CLR und C# u.s.w.
Der Autor ist der festen Überzeugung, dass dies nicht aus reiner Gutmütigkeit geschieht. Die Anforderungen an Software sind mittlerweile so komplex, dass es für eine Firma alleine zu kostspielig ist, diese Software zu warten und weiterzuentwickeln. Man ist dringend auf eine weltweite Zusammenarbeit angewiesen.
Der Autor wird Vorgehensweisen aufzuzeigen, um das bereits in hohem Masse und ausgezeichneter Qualität verfügbare Wissen aus Sekundärliteratur, Entwurfsmustern, aber auch aus quelloffenen Klassensammlungen zu extrahieren und für die eigene Softwareentwicklung zugänglich zu machen. Dabei soll nicht verschwiegen werden, dass dies im ersten Anlauf keinesfalls schnell vonstatten geht. Hat man aber erst einmal ein Grundverständnis erlangt und die Umsetzung der Prinzipien des objektorientierten Paradigmas praktiziert, kann dies die Effizienz der Entwicklung und die Qualität der Softwareprodukte erheblich steigern.

Für wen diese Arbeit geschrieben ist

Diese Arbeit ist etwas für Sie, wenn ...

  • Sie selbständiger Programmierer sind, keine große Programmierabteilung hinter Ihnen steht und sie mit fertigen GUI Code versorgt.
  • Noch nicht so genau wissen, wie sie Entwurfsmuster in konkreten Programmcode umsetzen können.
  • Mehr Zeit mit der Anwendung guten Softwaredesigns verbringen wollen, als mit dem Schreiben von GUI Code.
  • SWT kennen, aber sich schon immer geärgert haben, warum die Dinge eigentlich genauso kompliziert sind, wie mit SWING und sie zusätzlich noch Allokieren/Deallokieren müssen.
  • Open Source mögen, aber auch gerne Anwendungen schreiben, die sie vermarkten können.
  • Eclipse als Programmierumgebung schätzen, weil Sie das objektorientierte Programmieren und Refactoring optimal unterstützt.
  • Sie ein UML Werkzeug mit Roundtripengineering besitzen oder ausprobieren wollen, weil Sie der Überzeugung sind, dass gutes Softwaredesign für wartungsfreundlichen Code mindestens ebenso wichtig ist, wie der Code, der darunter liegt.
  • Ihre Anwendungsentwicklung so planen möchten, dass spätere Erweiterungen und Änderungen möglich sind, weil Sie wissen dass ein Softwareprojekt den überwiegenden Teil seiner Zeit in der Wartung verbringt.
  • Sie de Schaffung einer konkreten Umgebung für die Entwicklung kleinerer performanter, plattformunabhängiger Software vorhaben oder sich darauf vorbereiten möchten.
  • GUIs lieber per Hand erstellen, als mit einem GUI Builder.

Diese Arbeit ist (wahrscheinlich) nicht für Sie, wenn ...

  • Sie meinen, diese Arbeit sei ein schnelles HowTo für den Umgang mit einem hochintegrierten Entwicklungswerkzeug wie Rational Rose, Together Control Center oder mit GUI Buildern, wie JBuilder & Co.
  • Sie eine Arbeit über HCI (Human Computer Interaction) erwarten.
  • Sie etwas über die Anforderungen an Tests und deren Umsetzung zu diesem Thema erfahren möchten.
  • Sie etwas über das Deployment von SWT/JFace Anwendungen für verschiedene Plattformen wissen möchten.
  • Sie eine Arbeit über ”User Interface Design” oder ”Usability” von grafischen Benutzeroberflächen vermuten.
  • Sie alles über die Lizenzproblematik bei der Entwicklung kommerzieller Software mit Open Source Anwendungen erfahren möchten.
  • Sie etwas über Entwicklungsprozesse für die Anwendungsentwicklung (Rapid Development, FURPS+) erfahren möchten in Anlehnung an Prozesse wie [1], [2], [3] oder [4]
  • Sie die Daten über Kosten Zeitaufwand TCO, Vergleiche und Erfahrungen mit anderen Projekten suchen.
  • Sie genaues über die Anforderungprofile auf Seiten der Hardware / Software erfahren möchten.

Wie diese Arbeit geschrieben ist

  1. Die Community ist ein immer wiederkehrender Begriff in dieser Arbeit. Darum verwende ich das ”auktorale Wir” zur Beschreibung vieler Sachverhalte oder spreche Sie direkt an, um Sie mit ins Boot zu nehmen.
  2. Englische Zitate werden von mir nicht übersetzt. Ich gehe davon aus, dass der Leser als Informatiker (Quereinsteiger ausdrücklich eingeschlossen) Englisch als Arbeits- und Publikationssprache beherrscht. Dies trifft auch für aus original englischen Quellen übernommenes Bildmaterial.
  3. Die Quellcodedokumentation in den Beispielen erfolgt bewusst ausschließlich in Englisch (siehe 2.).
  4. Zum Stil möchte ich sagen, dass ich an manchen Stellen bewusst keine trockene wissenschaftliche Sprache verwende, da ich der festen Überzeugung bin, dass es dem Inhalt weder zuträglich, noch dem Leser dienlich ist, wenn er allzu schwere Kost vorgesetzt bekommt. Ich selbst ziehe englische Fachbücher meist den deutschen Übersetzungen vor (abgesehen von [5]), da sie wesentlich lockerer zu lesen sind. Der Autor entschuldigt sich auch für die synonyme Verwendung deutscher und englischer Fachbegriffe in gleichen Textpassagen.
  5. Die Bebilderung stammt aus einer Sammlung unter der ”Creative Common Licence” veröffentlichten Bilderserie eines italienischen Grafikers Coresis auf Open Graphics http://www.coresis.it.

Voraussetzungen

Skills

Grundkenntnisse über die objektorientierte Vorgehensweise, Entwurfsmuster, die Programmiersprache Java, einige wenige Grundkenntnisse in SWT (Eclipse.org). Grundkenntnisse über den Softwareentwicklungsprozess. Es sollten Ihnen die wesentlichen Darstellungsweisen der UML geläufig sein. Sie finden am Ende jedes Kapitels und innerhalb der Arbeit konkrete Hinweise auf einschlägige Literatur, die nach den Erfahrungen des Autors für ein echtes Verständnis der Objektorientierung nötig sind: ad fontes.

Software

Zur Arbeit mit Java bietet sich das Entwicklungstool Eclipse an. Eclipse unterstützt besonders die Arbeit des objektorientierten Entwurfs, Refactoring und zum Testen JUnit, was für diese Arbeit aber keine Voraussetzung ist. Jede beliebige andere Editor, der diese Prinzipien unterstützt ist prinzipiell geeignet. Grundsätzlich können sie die hier beschriebenen Prinzipien mit jedem Texteditor in Verbindung mit einem Javacompiler umsetzen.
Wenn Sie in einer anderen objektorientierten Sprache arbeiten, müssen Sie jedoch beachten, dass das letzte Kapitel nicht ohne weiteres ohne großen Aufwand in anderen Sprachen implementiert werden kann, da es die Implementierung eines Musters aus dem JFace Framework verwendet.
Die UML getriebene Entwicklung setzt ein Werkzeug zur Objektmodellierung mit Roundtrip Engineering voraus. Hier ist neben Rational Rose natürlich Together und Poseidon zu nennen ohne dabei einen Anspruch auf Vollständigkeit zu haben. Es müssen nicht alle Generierungsfunktionen (z.B. für Sequenzdiagramme) unterstützt werden, wenngleich es natürlich nicht hinderlich ist. Die Generierung von Code aus Klassendiagrammen und umgekehrt reicht völlig aus.

Themen und andere Schwerpunkte:

  • OpenSource,
  • Objektorientierung,
  • Design Patterns,
  • Java,
  • Eclipse SWT/ JFace
  • Standortbestimmung plattformunabhängiger Programmiersprachen und GUI Frameworks
  • Reduzierung der Komplexität durch die Verwendung von JFace - Actions and Contributions
  • Analyse und Wirkungsweise von JFace - Actions and Contributions
  • Pattern zur Programm- und Fensterübergreifenden Definition von Benutzeraktionen an zentralen Stelle im Controller Objekt der Anwendung.
  • Prozess zur Identifizierung von Design Patterns für konkrete Anforderungen
  • Prozess für das Reverse Engineering von Design Patterns, welche in Open Source Frameworks enthalten sind (Konkrete Anwendung, firmeninterne Dokumentation, Schulungszwecke)
  • Vorgehensweise zur Dokumentation von GUI Patterns (HCI - Human Computer Interaction)

Lesen sie das ganze Dokument

Die gesamte Dokumentation können Sie im PDF Format herunterladen:

References

Newsfeed

Newsfeeds abonnieren