Das AWT soll nachfolgend als Beispiel näher beschrieben werden, um Probleme und Lösungsmöglichkeiten für eine Portierung oder Implementierung bei schon laufendem Runtime zu zeigen.
Abbildung 5.1: OMT-Diagramm: java.awt.* |
Als GUI-Klassen gibt es Komponenten und Layoutmanager. Komponenten sind entweder einzelne Objekte, wie Button, Label, List, etc., oder Container, die mehrerer Komponenten beinhalten. LayoutManager kontrollieren das Layout der Elemente innerhalb eines Containers.
Wichtigste Grafik-Klasse ist java.awt.Graphics, die ist als abstrakte Klasse definiert ist und eine systemunabhängige Schnittstelle zur Grafik herstellt. Graphics-Objekte können nicht direkt erzeugt werden, aber sie können über die getGraphics()-Routine einer Komponete angefordert werden.
Abbildung 5.2: Struktur der java.awt.peer-Interfaces |
Die Hirachie entspricht fast vollständig der des Packages java.awt. Ziel der Peer-Spezifikationen ist es, eine abstrakte Schnittstelle für die GUI-Implementierung auf verschiedenen Plattformen zu bieten (vgl. Abschnitt 2.3).
Sun hat für die Einbindung des AWT eine abstrakte Klasse java.awt.Toolkit vorgesehen. Eine AWT-Implementation muß diese erweitern und die entsprechenden Funktionen besitzen. Bei Benutzung von AWT-Objekten wird dieses Toolkit einmal instanziert und mit seinen Funktionen das entsprechende Objekt zurückgeliefert. Im Diagramm in Abbildung 5.3 wird ein kleiner Ausschnitt der von Sun entwickelten Toolkits für Windows und Motif dargestellt.
Abbildung 5.3: OMT-Diagramm: sun.awt.*.MToolkit |
Wird in einem Java-Programm ein Button-Objekt der Klasse java.awt.Button eingebunden, erzeugt das Windows-Toolkit ein Objekt der Klasse sun.awt.win32.MButtonPeer und gibt dies zurück. Damit die tatsächliche Implementierung der Grafik und GUI-Objekte mit denen der AWT-Spezifikation übereinstimmt, müssen diese Klassen die Interfaces des java.awt.peer Paketes unterstützen. Die Klasse sun.awt.win32.MButtonPeer implementiert zum Beispiel das Interface java.awt.peer.ButtonPeer.
Ein großer Teil der AWT ist somit in Java selbst geschrieben, nur um tatsächliche Objekte auf dem Bildschirm zu erzeugen, werden ca. 140 native Methoden benötigt.
Die 1.0.x Implementierung von Sun baut unter Solaris auf das Motif-Framework3 und unter Windows auf die Microsoft Foundation Classes (MFC) auf. Eine Klasse MButtonPeer mit ihrer nativen Methode create() wird deshalb auf das entsprechende C++-äquivalent der MFC mit den entsprechenden Routinen abgebildet. Das nachfolgende Programmsegment zeigt den C++-Code.
/* C++-Klasse AwtButton erbt von MFC CButton */ class AwtButton : public CButton { public: AwtButton(); ~AwtButton(); /* ... */ }
Die im OMT-Diagramm (Abbildung 5.3) angedeutete C-Funktion sun_awt_win32_MButtonPeer_create() fungiert sozusagen als Schnittstelle zwischen dem in Java und in C++ geschriebenen Code.
Auf Grund dieser Struktur der sun.awt.win32 hängt der Aufwand, die AWT-Bibliothek der JDK 1.0.x von Windows auf andere Systeme zu portieren, sehr von den dortigen Gegebenheiten ab. Mit einem Fenster-Framework, daß in Struktur, Umfang und Leistungsfähigkeit den MFC entspricht, wäre es möglich, den Sun-Code 1:1 umzusetzen. Der in Java geschriebene Teil könnte ohne änderungen übernommen werden, und der C++-Code muß nur an die neuen GUI-Objekte angepasst werden. Da die AWT nur eine relativ kleine Standard-GUI-Menge darstellt, ist dies oft möglich.
Wenn ein entsprechendes Framework nicht existiert, oder es eine andere Struktur besitzt, liegt der Hauptaufwand der Portierung in der Abbildung des AWT.
Mit der Freigabe der 1.1-Beta-Release der JDK hat JavaSoft den AWT-Windows-Teil vollkommen neu geschrieben und unabhängig von den Microsoft Foundation Classes gestaltet. Derzeit ist diese Software aber noch im öffentlichen Beta-Test und noch nicht fehlerfrei.
Ursprünglich nur als Erweiterung und Anpassung des AWT an eigene Zwecke gedacht, hat der Hersteller (BISS GmbH) das BISS Java Framework entworfen, das aufbauend auf die Basisklassen Graphics, Frame, Panel und Canvas in java.awt eine selbständige graphische Benutzerschnittstelle definiert [BISS97].
In Zusammenhang mit der änderung der Lizenzbedingungen bei Freigabe der JDK 1.0.2 und den Überlegungen der Internetgemeinde zu einer frei erhältlichen JVM (JOLT, Java Open Language Toolkit), haben die Entwickler aufbauend auf das Framework die java.awt.peer Interfaces, sowie die für ein Stand-alone- System nötigen Grundklassen implementiert. Als Referenzsystem wurde Linux/X mit kaffe und den Xlib-Funktionen gewählt.
Abbildung 5.4: Baumstruktur der BISS-AWT |
Ein Vorteil, den diese AWT-Implementierung gegenüber dem Sun-Original besitzt ist die große Systemunabhängigkeit (vgl. Abbildung 5.4): nur 1/3 der für die Sun AWT zu implementierenden Native-Methoden sind nötig. Durch einen konsequent hirachischen Aufbau werden alle GUI-Komponenten in Java implementiert und eben nur wenige Basisklassen mit systemabhängigen Aufrufen gebraucht.
Interessant an diesem Projekt ist die Herangehensweise; in vier Schritten soll die volle Funktionalität zur Verfügung gestellt werden.
SAWT befindet sich immer noch im ALPHA-Zustand, bei fast allen Komponeten ist erst Entwicklungsstand B (minimale Funktionalität) erreicht, und ist deshalb noch keine Alternative zur Sun-Implementation.
Neben Java-Compiler und Interpreter sind die Kernbibliotheken Teil des Java-Systems (vgl. dazu Kapitel 2). Sie stehen auf jeder unterstützten Plattform zur Verfügung, und JavaSoft allein ist für die Definition der Schnittstellen zuständig.
Mit Einführung der JDK 1.1 hat JavaSoft diese unter anderem um die JDBC und die Java Security API erweitert. JDBC ist die Datenbankschnittstelle für Java, die Java-Programme den Zugriff auf rationale Datenbanken erlaubt. Die neue Java Security API enthält Funktionen für digitale Unterschriften, Verschlüsselung und Authentisierung.
Mit Implementierung dieser Kernbibliotheken besitzt Java eine auf allen Plattformen gleiche Umgebung und ermöglicht eine Softwareentwicklung für ein einheitliches System.
1) Mit Einführung der JDK 1.1 beta hat JavaSoft diese wesentlich
erweitert.
2) Für eine Gesamtübersicht aller Klassen ist der Referenzteil von [Flan96]
zu empfehlen. Eine Einführung in das AWT bietet [Yu95].
3) Motif ist eine Bibliothek zur Darstellung eines grafischen Benutzerinterfaces unter X
---------------------------------------------------------------- [home] [TOC] [prev] [next] [guestbook] [contact] (c) SM