Lade Inhalt...

Konzeption und Entwicklung eines Visualisierungswerkzeugs mit Java

Diplomarbeit 2000 118 Seiten

Informatik - Programmierung

Leseprobe

Inhaltsverzeichnis

1. Einleitung

2. Aufgabenstellung

3. Einsetzbare Techniken
3.1 HTML
3.2 Programmiersprachen
3.2.1 JavaScript
3.2.2 Java
3.2.3 Weitere Programmiersprachen
3.3 Datenbankanbindung
3.4 Browser
3.5 Entscheidungsfindung

4. Verwendete Techniken
4.1 Java
4.1.1 Versionen
4.1.2 Merkmale von Java
4.1.3 Aufbau der Sprache
4.1.4 Aufbau von Java-Programmen
4.2 AWT (Abstract Windowing Toolkit)
4.3 JDBC (Java Database Connectivity)
4.3.1 JDBC-Treiber
4.3.2 Unterstützung von SQL
4.4 Servlets
4.4.1 Datenfluss Client/Server
4.4.2 Lebenszyklus eines Servlets
4.5 Datenbank

5. Konzept
5.1 Darstellung
5.2 Verteilung Client/Server
5.3 Allgemeine Anwendbarkeit

6. Realisierung
6.1 Struktur
6.2 Applet
6.2.1 Klasse SensImage
6.2.2 Klasse SensArea
6.3 Visualisierungsklassen
6.3.1 Klasse VisAufruf
6.3.2 Klasse Daten
6.3.3 Klasse VisFrame
6.3.4 Klasse VisBasis
6.3.5 Klasse VisBarChart
6.3.6 Klasse VisLegende
6.3.7 Klasse VisInfo
6.4 Servlets

7. Anwendung des Programms
7.1 Einbindung in HTML-Seite
7.2 Ansprechen der Datenbank
7.3 Ansprechen der Servlets
7.4 Inhalt der Datenbank
7.4.1 Tabelle MAP
7.4.2 Tabelle EINHEITEN
7.4.3 Tabelle ID_NAME
7.4.4 Tabellen mit Visualisierungswerten
7.4.5 Tabellen mit Beschreibungstexten

8. Atlas-Projekt

9. Zusammenfassung und Ausblick
9.1 Zusammenfassung
9.2 Ausblick
9.2.1 Ansätze für Weiterentwicklungen
9.2.2 Zukunft von Java

10. Anhang
10.1 CD-ROM
10.2 Quelltext
10.2.1 Applet
10.2.1.1 SensImage.java
10.2.2 Visualisierungsklassen
10.2.2.1 VisAufruf.java
10.2.2.2 VisFrame.java
10.2.2.3 VisBasis.java
10.2.2.4 VisBarChart.java
10.2.2.5 Daten.java
10.2.2.6 VisLegende.java
10.2.2.7 VisInfo.java
10.2.3 Servlets
10.2.3.1 VisServlet.java

11. Literaturverzeichnis

12. Software

1. Einleitung

Keine andere Technik hat unsere Welt so stark verändert wie das Internet. Durch das Internet ist der weltweite Austausch von Informationen und Dienstleistungen Wirklichkeit geworden. Vor allem in den letzten Jahren stieg die wirtschaftliche Bedeutung des Internets sehr stark an. Der sprichwörtliche Boom war und ist in aller Munde. Jedoch nicht nur Firmen profitieren vom Internet. Auch dem Privatanwender eröffnen sich ungeahnte Möglichkeiten. So stehen jetzt jedem, der mit einem entsprechend vernetzten Computer ausgestattet ist, nahezu beliebige Informationen weltweit zur Verfügung

Durch diese große Informationsvielfalt geht jedoch auch zunehmend die Übersichtlichkeit verloren. Das größte Problem ist dabei, überhaupt die Informationen zu finden, die man sucht. Dafür gibt es mittlerweile unzählige Suchmaschinen

Ein anderer wichtiger Aspekt ist jedoch, wie diese Informationen dargestellt werden. Dabei steht vor allem der Nutzen für den Anwender im Vordergrund. Dieser entscheidet letztlich über die Akzeptanz und damit über den Erfolg des Angebots

Ein Bereich, in dem die Darstellung von Daten eine besonders große Rolle spielt, ist der Bereich der Geoinformationssysteme (GIS). Auch im GIS-Bereich findet eine immer stärkere Ausrichtung auf das Internet statt

Neben mehr oder weniger sinnvollen Inhalten im World Wide Web finden sich also auch immer mehr Seiten mit Geodaten. Diese reichen dabei von der einfachen Darstellung von Karten bis zur interaktiven Anwendung (z.B. Routenplaner). Allen gemeinsam ist jedoch, dass die Daten irgendwie dargestellt/präsentiert werden müssen. Zunächst müssen die eigentlichen „Geo-Daten“ so umgesetzt werden, dass eine Darstellung als Karte bzw. Kartenausschnitt erfolgen kann

Immer öfter sind jedoch mit diesen Geodaten auch noch weitere Sachdaten verbunden. Diese Sachdaten können bis zu einem gewissen Grad direkt in der Darstellung der Geodaten integriert sein. (z.B. über Schraffuren, Symbole oder Farbgebung). Bei komplexeren Daten sind die Darstellungsmöglichkeiten mit diesen Werkzeugen jedoch stark begrenzt. Spätestens, wenn in einer Karte eine große Anzahl verschiedener Schraffuren vorhanden sind und diese dann noch mit vielfältigen Symbolen überlagert werden, geht die Übersichtlichkeit verloren

Hier bietet es sich an, nur die grundlegenden Daten in der Karte darzustellen und es dem Anwender zu überlassen, sich weitergehende Informationen anzeigen zu lassen

An diesem Punkt setzt meine Diplomarbeit an

2. Aufgabenstellung

Ziel dieser Diplomarbeit ist es, die Darstellung von Daten in einer Karte um den Aspekt der Interaktivität zu erweitern. Es ist ein Tool zu entwickeln, das auf eine Anwenderaktion hin weiterführende Sachdaten zu bestimmten Objekten der Karte visualisiert

Um für verschiedene Anwendungen geeignet zu sein, sollte das Programm über Parameter konfigurierbar sein. Auch die Datenhaltung sollte möglichst flexibel gehalten werden, vor allem unter den folgenden Gesichtspunkten: einfache Editierbarkeit, Datenmenge und Wertebereich. Zur Umsetzung dieser Aspekte ist eine Datenbankanbindung zu entwickeln

Das Tool soll als Internetanwendung konzipiert werden und einfach in Internetseiten einzufügen sein. Um eine möglichst große potenzielle Anwenderzahl ansprechen zu können sollte die Anwendung plattformunabhängig sein und so schlank wie möglich gehalten werden. Dies betrifft sowohl die Programmgröße (Ladezeiten), als auch die Anforderungen an Speicher und Rechenleistung. Zur Umsetzung sollten weit verbreitete Standardtechniken verwendet werden

Bei größeren Datenbanken ist es üblich, diese auf einem eigenen Datenbankserver bereitzuhalten. Es soll deshalb auch die Möglichkeit unterstützt werden, dass Webserver und Datenbankserver auf zwei getrennten Rechnern laufen

Ein weiterer wichtiger Punkt ist eine für den Benutzer intuitive Bedienung des Programms. Alle Funktionen sollten ohne zusätzliche Erklärung einsichtig sein

3. Einsetzbare Techniken

3.1 HTML

HTML stellt die Grundlage für alle Internetseiten dar. HTML ist die Abkürzung für H yper T ext M arkup L anguage. Es handelt sich dabei um eine Dokumentbeschreibungssprache, die den Aufbau eines Dokuments, z.B. einer Internetseite beschreibt. Durch sie wird festgelegt, an welcher Stelle der Seite Texte, Bilder oder sonstige Objekte angezeigt werden. Es ist möglich, Verweise auf Objekte oder andere Dokumente, sog. Links, einzufügen. Durch diese Links kann sowohl auf Stellen im Dokument als auch auf beliebige andere Internetseiten verwiesen werden, wodurch eine inhaltliche Verknüpfung zwischen den eigenen Inhalten und denen anderer Anbieter hergestellt werden kann. Auf dieser Grundidee, der weltweiten Vernetzung von Informationen, beruht letztlich das gesamte World Wide Web, und dieser Grundidee verdankt es seinen Namen

HTML ist ein sogenanntes Klartext-Format. HTML-Dateien können mit jedem beliebigen Texteditor bearbeitet werden, der Daten als reine Textdateien abspeichern kann Für weiterführende Informationen verweise ich auf [15]

3.2 Programmiersprachen

3.2.1 JavaScript

JavaScript ist eine von Netscape entwickelte Script-Sprache zur Erweiterung der Browserfähigkeiten. JavaScript-Programme werden nicht kompiliert, sondern zur Laufzeit interpretiert. Der dafür nötige Interpreter ist in allen führenden Browsern enthalten. Der Quelltext kann dabei direkt in der HTML-Datei enthalten sein oder in einer separaten Datei gespeichert werden

JavaScript bietet die Möglichkeit einfache Manipulationen am Layout und der Interaktionsfähigkeit von HTML-Seiten vorzunehmen und damit kleinere Probleme zu lösen, die über die Fähigkeiten von HTML hinausgehen. Allerdings eignet es sich nicht dafür eigenständige, komplexe Programme zu entwickeln

3.2.2 Java

Java ist eine von der Firma Sun Microsystems entwickelte, plattformunabhängige, objektorientierte Programmiersprache. Gegenüber den begrenzten Fähigkeiten von JavaScript bietet Java als vollständige Programmiersprache die Möglichkeit komplexe Anwendungen mit ausgereiften Benutzeroberflächen zu erstellen. Neben eigenständig lauffähigen Programmen können mit Java auch Programme erzeugt werden, die innerhalb von Web-Seiten laufen, sogenannte Applets. Dies macht Java zur Standardprogrammiersprache im Internet

3.2.3 Weitere Programmiersprachen

Andere weit verbreitete Programmiersprachen (z.B. C, C++, Delphi, etc.) haben alle den Nachteil, dass sie in plattformabhängigen Maschinencode compiliert werden. Dadurch sind sie für den (clientseitigen) Interneteinsatz ungeeignet. Denkbar ist jedoch der Einsatz als serverseitige Software, auf die dann z.B. über CGI[1] zugegriffen wird

3.3 Datenbankanbindung

Unter einer Datenbank ist eine auf Dauer angelegte Datenorganisation zu verstehen, und unter dem Begriff Datenorganisation werden alle Verfahren zusammengefasst, die dazu dienen, Daten zu strukturieren, zu speichern und verfügbar zu halten. In relationalen Datenbanken sind die Strukturelemente Relationen, zwischen denen logische Abhängigkeiten bestehen. Die Relationen werden dabei meist als Tabellen dargestellt. Im folgenden wird deshalb der Begriff Tabelle verwendet

Ein Datenbankmanagementsysteme (DBMS) ist ein Programmsystem zur Verwaltung der Daten einer Datenbank. Moderne DBMS bauen heute fast alle auf relationalen Datenbanken auf. Man spricht dann von einem RDBMS

Zum Zugriff auf die Bestände und Strukturen einer Datenbank dienen spezielle Datenbanksprachen. Sie ermöglichen das Suchen, Löschen, Verändern und Einfügen von Daten in Tabellen bzw. die Definition, Änderung und Elimination der Tabellen selbst. Die am weitesten verbreitete unter diesen Sprachen ist SQL, die in nahezu allen RDBMS zum Einsatz kommt

SQL:

SQL (Structured Query Language) ist eine Entwicklung der Standardisierungsorganisationen ANSI[2] und ISO[3] und wurde 1992 unter der Bezeichnung SQL-2 bzw. SQL-92 als internationaler Standard definiert. Mittlerweile gibt es jedoch von den einzelnen RDBMS-Anbietern viele verschiedene SQL-Dialekte für ihre eigenen Produkte. Diese bauen jedoch alle auf den SQL-2-Standard auf

Die einzelnen Befehle lassen sich grob einteilen in Befehle zur Datendefinition (z.B. Anlegen von Tabellen), zur Datenmanipulation („Füllen“ der Tabellen) und Befehle zur eigentlichen Datenabfrage

3.4 Browser

Um die Internetseiten überhaupt ansehen zu können, benötigt man einen sogenannten Internet-Browser. Die derzeitigen Marktführer sind der Internet Explorer von Microsoft und der Communicator von Netscape, die zusammen auf weit mehr als 90% Marktanteil kommen

Da die verschiedenen Versionen dieser Browser verschiedene Standards von HTML und Java unterstützen, muss bei der Programmentwicklung auf die Kompatibilität zu den am weitesten verbreiteten Versionen geachtet werden

Die Umsetzung der HTML-Befehle ist dabei eher unkritisch. Die grundlegenden HTML-Befehle werden auch schon von den älteren Versionen der Browser umgesetzt

Kritischer sieht es bei der Java-Unterstützung aus. Zur Zeit unterstützt keiner der beiden großen Browser Java 2. Zwar besteht die Möglichkeit, auch diese Browser durch ein Plug-In Java2-fähig zu machen. Dies erfordert jedoch die Installation des Plug-Ins auf dem Clientrechner, was der Anwender nur im Ausnahmefall akzeptieren würde

Lediglich Browser, die das Original der Sun- VirtualMachine einbinden, verfügen momentan über die Möglichkeit, Java 2 -Applets ablaufen zu lassen. Allerdings gehört die VirtualMachine bei diesen Browsern meist nicht zum Lieferumfang und muss deshalb auch erst noch installiert werden

Die zur Zeit am weitesten verbreiteten Browser sind der Internet Explorer ab Version 4 und höher und der Netscape Communicator ab Version 4.5 und höher. Diese Versionen unterstützen alle Java 1.1. Deshalb ist Java 1.1 zur Zeit die Standard-Internetprogrammiersprache

3.5 Entscheidungsfindung

Um ein Werkzeug zu erstellen, dass die Darstellung von Daten in einer Karte um den Aspekt der Interaktivität erweitert, muß die verwendete Programmiersprache komplexe Möglichkeiten im programmiertechnischen Bereich haben. Dadurch ist eine Lösung nur mit HTML bzw. mit der Kombination HTML/JavaScript ungeeignet

Eine Umsetzung über serverseitige plattformabhängige Programme (C,C++,...) und CGI würde zwar die benötigte programmiertechnische Komplexität bereitstellen, das Problem liegt jedoch in der Bildschirmausgabe auf dem Client-Rechner. Die Ausgabe müßte vom Server als HTML-Code bzw. als in HTML-Seiten integrierte Bilder über das Netz an den Client gesendet werden. Dies ist wenig praktikabel und relativ unflexibel. Außerdem müßten so größere Datenmengen über das Netz übertragen werden, was zu vermeiden ist

Die Plattformunabhängigkeit und Internetfähigkeit sind die größten Vorteile einer Programmierung in Java. Vor allem auch durch die integrierte Unterstützung zum Aufbau von grafischen Benutzerschnittstellen (Graphical User Interfaces, GUI) und die Möglichkeit der Datenbankanbindung über Servlets (à Kap. 4.4) und JDBC (à Kap. 4.3) bietet Java eine einheitliche und umfassende Lösung

Die Datenbankanbindung über JDBC baut auf dem Standard SQL auf, womit auch hier eine größtmögliche Kompatibilität erreicht wird

Aus diesen Gründen gibt es für die Programmierung keine Alternative zu Java, welches von den heutigen Browsern in der Version 1.1 voll unterstützt wird

4. Verwendete Techniken

4.1 Java

Literaturhinweis für die folgenden Unterkapitel: [1], [2], [3], [4], [5], [6], [7]

4.1.1 Versionen

Mittlerweile gibt es mehrere Versionen von Java, deren Namensgebung vor allem für Einsteiger etwas verwirrend ist. Ich möchte deshalb hier zunächst kurz auf diese verschiedenen Versionen eingehen

Java wird von Sun Microsystems in Form eines Java Development Kit (JDK) kostenlos zur Verfügung gestellt. Dieses JDK enthält alles, was man zur Erstellung von Java-Programmen benötigt

Anfang 1996 wurde das JDK 1.0 veröffentlicht. Es folgte 1997 das JDK 1.1. Ende 1998 wurde das JDK 1.2 veröffentlicht. Anfang 1999 wurde die Java Version 1.2 offiziell in Java 2 platform umbenannt. Gleichzeitig wurden die folgenden Versionen des JDK von nun an als SDK (Software Development Kit) vertrieben. Dieses SDK ist dabei in drei Editionen erhältlich. Es gibt eine Standard Edition, eine Enterprise Edition für die Entwicklung von serverseitiger Software für Firmen und eine Micro Edition zur Entwicklung von Software für Kleingeräte (z.B Chipkarten, Pager, Set-Top Boxen, etc.)

Zu allen Java-Versionen gibt es im Laufe der Entwicklung noch Unterversionen z.B. Version 1.2.2. Daraus ergibt sich der vollständige Name z.B. Java 2 SDK, Standard Edition, v1.2.2 (Dies ist die auch von mir eingesetzte Version)

Seit Juni 2000 ist die derzeit aktuellste Version Java 2 SDK, v1.3 erhältlich, bei der neben kleineren Details vor allem die Performance der Java Virtual Machine verbessert wurde

Da für die Internetprogrammierung derzeit immer noch Java 1.1 als Standard anzusehen ist und auch ich mich bei der Programmerstellung auf den Sprachumfang von Java 1.1 beschränkt habe, werde ich in den weiteren Kapiteln hauptsächlich auf diese Version eingehen

4.1.2 Merkmale von Java

Java wurde von der Firma Sun Microsystems entwickelt und ist eine objektorientierte (OO), plattformunabhängige Programmiersprache

Java lehnt sich in seiner Syntax an die von C++ an. Im Detail unterscheidet sich Java aber recht deutlich von C++. Einerseits profitiert Java davon, dass viele der Features von C++ nicht realisiert wurden und die Sprache dadurch schlank und übersichtlich wurde. So gibt es beispielsweise keine expliziten Pointer, keine separaten Header-Dateien und keine Mehrfachvererbung in Java

Andererseits implementiert Java durch die Integration einer großen Anzahl anspruchsvoller Features wie Multithreading, strukturiertem Exceptionhandling oder eingebauten grafischen Fähigkeiten eine Reihe interessanter Neuerungen auf dem Gebiet der Programmiersprachen

Als OOP-Sprache[4] besitzt Java alle Eigenschaften moderner objektorientierter Sprachen. Wie C++ erlaubt Java die Definition von Klassen, aus denen Objekte erzeugt werden können. Objekte werden dabei als Referenzdatentypen behandelt, die wie Variablen angelegt und verwendet werden können. Zur Initialisierung gibt es Konstruktoren, und es kann eine optionale Finalizer-Methode definiert werden, die aufgerufen wird, wenn das Objekt zerstört wird. Seit Java 1.1 gibt es lokale Klassen, die innerhalb einer anderen Klasse definiert werden

Alle Methodenaufrufe in Java sind dynamisch. Methoden können überladen werden, Operatoren allerdings nicht. Java erlaubt zwar Einfach-, aber keine Mehrfachvererbung. Mit Hilfe von Interfaces (das sind abstrakte Klassendefinitionen, die nur aus Methoden bestehen) ist eine restriktive Form der Mehrfachvererbung möglich, die einen Kompromiss zwischen beiden Alternativen darstellt. Java erlaubt zudem die Definition abstrakter Basisklassen, die neben konkreten auch abstrakte Methoden enthalten, die in abgeleiteten Klassen ausdefiniert werden müssen

Neben Instanzvariablen und -methoden können auch Klassenvariablen und –methoden definiert werden. Alle Elemente einer Klassendefinition können mit Hilfe der Schlüsselwörter public, private und protected in ihrer Sichtbarkeit eingeschränkt werden. Objektvariablen werden als Referenzen implementiert

Das Speichermanagement in Java erfolgt automatisch. Während das Erzeugen von Objekten (von Ausnahmen wie String - und Array -Literalen[5] abgesehen) immer einen expliziten Aufruf des new -Operators erfordert, erfolgt die Rückgabe von nicht mehr benötigtem Speicher automatisch. Ein Garbage-Collector, der als niedrigpriorisierter Hintergrundprozess läuft, sucht in regelmäßigen Abständen nach nicht mehr referenzierten Objekten und

gibt den durch sie belegten Speicher an das Laufzeitsystem zurück. Viele der Fehler, die bei der Programmierung in C oder C++ dadurch entstehen, dass der Entwickler selbst für das Speichermanagement verantwortlich ist, können deshalb in Java nicht mehr auftreten

In Java gibt es ein strukturiertes Exceptionhandling. Damit ist es möglich, Laufzeitfehler zu erkennen und in strukturierter Weise zu behandeln. Eine Methode muss jeden Laufzeitfehler, der während ihrer Abarbeitung auftreten kann, entweder abfangen oder durch eine geeignete Deklaration an den Aufrufer weitergeben. Dieser hat dann seinerseits die Pflicht, sich um den Fehler zu kümmern. Dadurch ist der Programmierer also quasi gezwungen, mögliche Fehler im Programm abzufangen. In welchem Umfang dies geschieht, bleibt allerdings dem Programmierer überlassen

4.1.3 Aufbau der Sprache

Zum Umfang der Sprache gehören programmsteuernde Schlüsselworte (Schleifen, Bedingungsanweisungen, etc.), primitive Datentypen (int, float, ...) und Operatoren zum Vergleich und zur Manipulation von Werten (z.B. =, >, &&, etc.). In diesen programmiertechnischen Grundfunktionen ähneln sich alle moderne Programmiersprachen. Was Java jedoch auszeichnet, ist die umfangreiche Klassenbibliothek

Die Java-Klassenbibliothek bietet eine ganze Reihe nützlicher Klassen und Interfaces, die eine problemnahe Programmierung ermöglichen. Die Klassen sind dabei in sogenannten packages[6] (Paketen) unterteilt. Ein Paket enthält thematisch zueinander gehörende Klassen und kann auch wieder weitere Unterpakete enthalten

Es ist unmöglich hier auf alle Klassen einzugehen. Für einen tieferen Einblick verweise ich auf die am Anfang des Kapitels angegebe Literatur

Als Beispiele für grundlegende Klassen-Pakete seien hier nur drei genannt:

- Das Paket java.applet beinhaltet alle benötigten Klassen zur Erstellung von Applets und Hilfsklassen zur Applet-Kommunikation
- Im Paket java.io sind eine Vielzahl von Klassen für die Ein- und Ausgabe (Bildschirmausgabe, Dateien, Tastatureingabe, sonstige Ein-/Ausgabegeräte) definiert. Die Ein-/Ausgabe wird in Java hauptsächlich über sogenannte streams gelöst. Entsprechend bilden verschiedene Stream-Klassen den Hauptbestandteil des Pakets java.io. (z.B. java.io.ObjectInputStream)
- Einige abstrakte Datenstrukturen und auch sonst allerhand Nützliches bietet das Paket java.util

So ermöglicht z.B. die Klasse Vector die Speicherung von beliebigen Objekten in einem Feld variabler Größe. Der Zugriff ist wahlfrei über einen Index möglich

Die Klasse StringTokenizer stellt ein mächtiges Werkzeug zur Bearbeitung von Text bzw. zum Arbeiten mit Strings dar

Seit dem JDK 1.1 stehen darüber hinaus eine ganze Reihe hochspezialisierter (und teilweise sehr aufwendiger) Bibliotheken zur Verfügung

Diese sind dabei meist als API[7] realisiert. Dies bedeutet, dass durch diese Klassen eine einheitliche Programmierschnittstelle gegeben ist. Erreicht wird das durch die Bereitstellung von grundlegenden Methoden, die für den konkreten Anwendungsfall vom Programmierer an die jeweiligen Anforderungen angepasst werden können

So bietet beispielsweise JDBC (Java Database Connectivity) den Zugriff auf relationale Datenbanken (siehe auch 4.3), JavaBeans stellt eine portable Komponentenarchitektur zur Verfügung, und mit dem Networking-API und RMI (Remote Method Invocation) kann auf Netzwerkressourcen und verteilte Objekte zugegriffen werden. Per Serialisierung können Objekte persistent[8] gemacht werden, und mit dem Reflection-API kann der Aufbau von Objekten und Klassen zur Laufzeit untersucht und dynamisch darauf zugegriffen werden

Zusätzlich werden von Sun noch andere spezielle Klassenbibliotheken angeboten, die nicht im Umfang des JDK enthalten sind. Als Beispiel sei hier die Servlet-API genannt, die auch von mir beim Entwickeln der Servlets benutzt wurde. Diese zusätzlichen API’s werden auf der Java-Homepage [7] zum Download bereitgestellt und können dann einfach neben den vorhandenen Klassenbibliotheken eingebunden werden

Für weitere Informationen zu diesen Themen verweise ich auf die angegebene Literatur

4.1.4 Aufbau von Java-Programmen

Grundsätzlich unterscheidet man 2 Arten von Java-Programmen:

- Applikationen
- Applets

Applikationen: Bei Applikationen handelt es sich um eigenständige Programme, die mit Hilfe des Java-Interpreters gestartet werden können. Dieser Interpreter wird mit dem JDK in der Form des Programms java.exe mitgeliefert. Der Aufruf einer Applikation erfolgt mit dem Befehl

java <Programmname>,

wobei für <Programmname> der Name des zu startenden Java-Programms eingefügt werden muss

Für Internetanwendungen werden jedoch Applets verwendet:

Applets: Applets werden vom Java-Interpreter eines Browsers ausgeführt. Sie laufen damit direkt „innerhalb einer Internetseite“. Sie haben kein eigenes Ausgabe-Interface, sondern bekommen vom Browser einen Bereich des Browserfensters für ihre Ausgaben zugewiesen

Applets unterliegen dabei bestimmten Sicherheitsrestriktionen. Da Applets zusammen mit Internetseiten über das Netz heruntergeladen werden, ist nicht immer gewährleistet, dass sie von einer sicheren Quelle stammen. Um den Benutzer vor Schäden zu schützen laufen Java-Applets deshalb in einem vertrauten und gesicherten Bereich, der sogenannten Sandbox, ab. Dieser wird von dem jeweiligen Interpreter (hier: der Web-Browser) bereitgestellt. Es werden nur Aktionen innerhalb dieser Sandbox zugelassen. Alle Überschreitungen lösen eine Security -Exception aus

Es ist einem Applet z.B. nicht möglich komplett auf die Systemressourcen des Clientrechners zuzugreifen. Applets dürfen dort keine Operationen auf Dateiebene durchführen, wie z.B. Dateien bzw. Verzeichnisse lesen, schreiben, umbenennen, anlegen oder auf Existenz prüfen. Es sind nur Netzverbindungen zu dem Rechner gestattet, von dem das Applet stammt. Verbindungen zu anderen Rechnern sind nicht möglich. Deshalb kann auch keine direkte Verbindung zu einer Datenbank auf einem beliebigen DB-Server hergestellt werden. (Dies kann jedoch über auf dem Web-Server liegenden Servlets geschehen.)

Der Ablauf eines Applets wird durch mehrere Methoden mit fest definierten Namen gesteuert. Dadurch ergibt sich ein gewisser Lebenszyklus, der in der folgenden Grafik verdeutlicht wird:

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 4-1: Der Lebenszyklus eines Applets

In der Methode init() sollten, wie der Name bereits andeutet, Initialisierungen bzw. Anweisungen, die nur einmal ausgeführt werden sollen, vorgenommen werden. Sie wird automatisch vom Browser aufgerufen, wenn das Applet vollständig in das System geladen wurde

Die Methode start() wird durch den Browser automatisch aufgerufen, um dem Applet mitzuteilen, das es mit seiner Ausführung beginnen soll. Sie wird erst nach der init()-Methode aufgerufen und kann im Gegensatz zu dieser auch mehrmals gestartet werden. (z.B. wenn über den „Zurück“-Button eine Internetseite erneut dargestellt wird.)

Durch den Aufruf der Methode stop() wird dem Applet vom Browser mittgeteilt, dass es seine Ausführung beenden soll. Der Aufruf erfolgt unmittelbar vor dem Aufruf von destroy() oder aber, wenn die aktuelle Internetseite durch eine andere ersetzt wird. Hier können Funktionen platziert werden, die ausgeführt werden sollen, wenn das Applet vorübergehend nicht mehr benötigt wird

Die Methode destroy() wird beim Beenden des Browsers unmittelbar nach der Methode stop() aufgerufen. Über ihren Aufruf wird dem Applet mitgeteilt, dass es endgültig beendet wurde und es alle Ressourcen, die es beansprucht hat, wieder freigeben soll

Generell setzen sich Java-Programme aus mindestens einer Klasse zusammen

Klassen

Eine Klassendefinition in Java wird durch das Schlüsselwort class eingeleitet. Anschließend folgt der Klassenname und innerhalb von geschweiften Klammern (dem sogenannten Rumpf) eine beliebige Anzahl an Variablen- und Methodendefinitionen. Das folgende Beispiel zeigt eine einfache Klassendefinition:

public class Auto

{

public String name;

public int baujahr;

public String farbe;

}

Diese Klasse enthält keine Methoden, sondern lediglich die Variablen name, baujahr und farbe

Objekte

Normalerweise wird nicht direkt mit Klassen gearbeitet. Um mit den Klassen zu arbeiten werden vielmehr Instanzen dieser Klassen gebildet. Man spricht dann von Objekten der Klassen. Um von einer Klasse ein Objekt anzulegen, muss eine Variable vom Typ der Klasse deklariert und ihr mit Hilfe des new-Operators ein neu erzeugtes Objekt zugewiesen werden:

Auto meinAuto;

meinAuto = new Auto();

Die erste Anweisung ist eine normale Variablendeklaration. Anstelle eines primitiven Variablentyps (int, float, ...) wird hier der Typname einer zuvor definierten Klasse verwendet. Die zweite Anweisung generiert mit Hilfe des new -Operators eine neue Instanz der Klasse Auto und weist sie der Variablen meinAuto zu

Die beiden Anweisungen lassen sich auch kombinieren. Das nachfolgende Beispiel deklariert und initialisiert die Variable meinAuto in einer Anweisung:

Auto meinAuto = new Auto();

Der Zugriff auf die Variablen des Objekts erfolgt mit Hilfe der Punktnotation nach dem Schema Objekt . Variable. Um z.B. das Auto -Objekt in einen schwarzen Opel Astra des Baujahrs 1999 zu verwandeln, müssten folgende Anweisungen ausgeführt werden:

meinAuto.name = "Opel Astra";

meinAuto.baujahr = 1999;

meinAuto.farbe = "schwarz";

Ebenso wie der schreibende erfolgt auch der lesende Zugriff mit Hilfe der Punktnotation. Die Ausgabe des aktuellen Objektes auf die Standardausgabe (normalerweise der Bildschirm) könnte also mit den folgenden Anweisungen erledigt werden:

System.out.println("Name..: "+meinAuto.name);

System.out.println("Baujahr...: "+meinAuto.baujahr);

System.out.println("Farbe.: "+meinAuto.farbe);

Klassen, Methoden sowie Variablen wird über optionale Modifizierer ein Gültigkeitsbereich zugewiesen. Damit wird festgelegt, in welcher Weise die definierten Klassen/Methoden/Variablen von anderen Klassen bzw. Methoden benutzt werden können

So gibt es z.B. für Methoden unter anderem die folgenden Modifizierer:

- public: Diese Methoden dürfen von allen Klassen benutzt werden, auch von solchen, die in anderen Paketen definiert sind
- protected: Diese Methoden sind nur innerhalb des gleichen Pakets und in abgeleiteten Klassen sichtbar und können dort von allen Klassen benutzt werden
- private: Der Modifizierer private führt dazu, dass die Methode nur innerhalb der definierenden Klasse benutzt werden darf
- static: Methoden, die als static deklariert werden, heißen auch Klassen-Methoden, weil sie zur Klasse gehören und nicht zur jeweiligen Instanz. Das heißt, dass alle Instanzen der Klasse beim Aufruf einer static -Methode denselben Programmcode verwenden

Einer der wesentlichsten Aspekte der objektorientierten Programmierung ist die Vererbung. Dieser Mechanismus ermöglicht es einer neuen Klasse, die Variablen und Methoden einer anderen Klasse genau so zu verwenden, als wären diese in der neuen Klasse definiert. Allerdings ist es möglich, durch die weiter oben beschriebenen Modifizierer bestimmte Variablen oder Methoden vor dem Zugriff aus anderen Klassen zu schützen und dadurch auch von der Vererbung auszuschließen

Die Vererbung ermöglicht es, eine Hierarchie von Klassen zu erstellen. Das Prinzip der Vererbung zieht sich vollständig durch die Klassenbibliothek von Java. An der Spitze aller Klassen steht die Object -Klasse. Alle anderen Klassen erben die Eigenschaften und Methoden dieser Klasse

Die Vererbung von Klassen wird durch das Schlüsselwort extends in der Klassendefinition eingeleitet

Eine neue Klasse Cabrio erbt z.B. folgendermaßen die Eigenschaften und Methoden von der oben erwähnten Klasse Auto:

public class Cabrio extends Auto

{

public boolean elektrischesVerdeck = true;

}

Die Klasse Cabrio besitzt dann die drei Eigenschaften der sogennanten Superklasse Auto (Name, Baujahr, Farbe) und hat zusätzlich die nur in der Klasse Cabrio verfügbare Eigenschaft elektrischesVerdeck, die hier standardmäßig auf true gesetzt ist

Innerhalb der Klassendefinition von Cabrio können noch weitere Variablen und Methoden definiert werden

Man kann nicht nur die Methoden der Superklasse verwenden, man kann diese auch mit einer anderen Funktionalität versehen. Dies geschieht, indem man in den Rumpf der entsprechenden Methode mit dem gleichen Namen einen eigenen Programmcode schreibt. Man nennt diesen Vorgang auch Überschreiben

Für einen tieferen Einblick in die Programmierung mit Java und die obejektorientierte Programmierung allgemein verweise ich auf die am Anfang des Kapitels angegebene Literatur

4.2 AWT (Abstract Windowing Toolkit)

Das AWT (Abstract Windowing Toolkit) ist eine Sammlung von Klassen und Schnittstellen zur Grafikausgabe und Entwicklung von GUI s[9]

Das Wort Abstract im Namen AWT bedeutet, dass in diesen Klassen nur die plattform­unabhängigen wesentlichen Eigenschaften der Komponenten definiert sind. Für die konkrete Darstellung auf den verschiedenen Rechnern und Betriebssystemen werden dann die jeweils dort typischen Systemkomponenten ("Peers") mit den für diese Systeme üblichen Layouts, Aussehen und Funktionalitäten ("Look & Feel") verwendet. Dies hat den Vorteil, daß der Benutzer sich nicht an neue GUI-Komponenten wie z.B. Menüs oder Schaltflächen gewöhnen muß. Es hat aber den Nachteil, daß die gleiche Applikation auf verschiedenen Computersystemen im Detail verschieden aussieht und es eventuell zu Problemen mit sich überdeckenden Komponenten kommt, weil die Komponenten auf den verschiedenen Systemen unterschiedliche Abmessungen haben. Um diese Überdeckungen zu vermeiden, können sogenannte Layout-Manager verwendet werden, die die Komponenten automatisch anordnen und ihnen eine Größe zuweisen. Dadurch ist ein pixelgenaues Platzieren jedoch meist nicht möglich

Zu den AWT-Komponenten zählen beispielsweise Fenster, Menüs, Buttons und Dialogboxen

Das AWT bietet eine Reihe von elementaren Operationen, um grafische Ausgabeelemente, wie Linien, Polygone, Kreise, Ellipsen, Kreisabschnitte oder Rechtecke, zu erzeugen. Diese Methoden können auch in einem Füllmodus verwendet werden, der dafür sorgt, dass die gezeichneten Flächen mit Farbe ausgefüllt werden. Wie in den meisten Grafik-Libraries realisiert auch Java die Bildschirmausgabe mit Hilfe des Konzepts eines Grafikkontexts, der eine Abstraktion des tatsächlichen Ausgabegerätes bildet

Das AWT erlaubt die Anzeige und Manipulation von Bilddaten. Mit Hilfe von Standardmethoden können Grafiken in elementaren Formaten wie GIF[10] oder JPEG[11] geladen, skaliert und auf dem Bildschirm angezeigt werden

Seit Java 2 gehören für die Grafikprogrammierung die sogenannten Java Foundation Classes (JFC) zum Sprachumfang von Java. Darin sind neben dem schon seit Version 1.1 bekannten AWT das Java 2D API, das Drag&Drop API und v.a. das Swing Toolset enthalten

Das Swing Toolset stellt gegenüber dem AWT eine Reihe zusätzlicher Dialogelemente zur Verfügung und ermöglicht die Konstruktion sehr komplexer grafischer Oberflächen. Mit seinem Pluggable Look and Feel bietet es die Möglichkeit, das Look & Feel eines Programmes zur Laufzeit umzuschalten und den Bedürfnissen des jeweiligen Benutzers unabhängig von der Systemumgebung anzupassen

4.3 JDBC (Java Database Connectivity)

Literaturhinweis für die folgenden Unterkapitel: [8], [9], [2], [3], [5]

JDBC (J ava D atabase C onnectivity) gehört als API7 seit Java-Version 1.1 zum Standardumfang von Java

JDBC bezeichnet eine Programmierschnittstelle, über die man in Java-Programmen Informationen aus Datenbanksystemen verarbeiten, d.h. suchen, anzeigen, erzeugen und verändern kann. Für die Formulierung entsprechender Anweisungen an das Datenbanksystem wird gewöhnlich die standardisierte Datenbanksprache SQL verwendet. JDBC setzt damit auf einer recht tiefen sprachlichen Ebene an und hat dementsprechend schlichte Fähigkeiten im Vergleich zu den meist sehr anspruchsvollen Datenbankentwicklungswerkzeugen. Deshalb wird JDBC auch als „low-level“ oder „call-level“ SQL-Schnittstelle für die Java-Plattform bezeichnet. Bei einer solchen Schnittstelle werden die SQL -Anweisungen im Programm als Zeichenketten bearbeitet und zur Ausführung an para­metrisierbare Methoden übergeben. Rückgabewerte und Ergebnismengen werden durch Methodenaufrufe ermittelt und nach einer geeigneten Typkonvertierung im Programm weiterverarbeitet

Durch die Bereitstellung von bestimmten genormten Schnittstellen ermöglicht JDBC nicht nur eine plattformunabhängige, sondern auch eine weitgehend datenbankunabhängige Anbindung von Datenbanksystemen. Dass die Anbindung nicht als völlig datenbankunabhängig bezeichnet werden kann, liegt an den verschiedenen Implementierungen des SQL-Sprachumfangs bei verschiedenen Datenbanksystemen. (siehe auch 4.3.2)

Die Anbindung eines konkreten Datenbanksystems erfolgt dabei über einen datenbank- bzw. herstellerspezifischen JDBC-Treiber

4.3.1 JDBC-Treiber

JDBC-Treiber sind Java-Klassen, die die durch JDBC deklarierten Interfaces (Schnittstellen) implementieren. Die Treiber sorgen dafür, dass die durch JDBC festgelegten Methoden datenbankspezifisch umgesetzt werden

Bezüglich der Architektur der zugehörigen Verbindungs-, Anweisungs- und Ergebnisklassen unterscheidet man vier Typen von JDBC-Treibern:

- Steht bereits ein ODBC[12] -Treiber zur Verfügung, so kann er mit Hilfe der im Lieferumfang enthaltenen JDBC-ODBC-Bridge in Java-Programmen verwendet werden. Diese Konstruktion bezeichnet man als Typ-1-Treiber. Mit seiner Hilfe können alle Datenquellen, für die ein ODBC-Treiber existiert, in Java-Programmen genutzt werden
- Zu vielen Datenbanken gibt es neben ODBC-Treibern auch spezielle Treiber des jeweiligen Datenbankherstellers. Setzt ein JDBC-Treiber auf einem solchen proprietären Treiber auf, bezeichnet man ihn als Typ-2-Treiber
- Wenn ein JDBC-Treiber komplett in Java geschrieben und auf dem Client keine spezielle Installation erforderlich ist, der Treiber zur Kommunikation mit einer Datenbank aber auf eine funktionierende Middleware angewiesen ist, handelt es sich um einen Typ-3-Treiber
- Falls ein JDBC-Treiber komplett in Java geschrieben ist und die JDBC-Aufrufe direkt in das erforderliche Protokoll der jeweiligen Datenbank umsetzt, handelt es sich um einen Typ-4-Treiber

Bei den meisten kommerziellen Produkten gehören JDBC-Treiber mittlerweile zum Lieferumfang oder können auf den Homepages der Firmen heruntergeladen werden

Eine aktuelle Liste verfügbarer JDBC-Treiber findet sich unter [10]

4.3.2 Unterstützung von SQL

JDBC übernimmt die Aufgabe eines „Transportprotokolls“ zwischen Datenbank und Anwendung und definiert damit zunächst noch nicht, welche SQL-Kommandos übertragen werden dürfen und welche nicht. Tatsächlich existieren heute für die verschiedenen relationalen Datenbanken eigene SQL-Dialekte, und eine Portierung auf eine andere Datenbank kann deshalb durchaus aufwendiger sein als ein Wechsel des Compilers

Um einen minimalen Anspruch an Standardisierung zu gewährleisten, fordert Sun Microsystems von den JDBC-Treiberherstellern, mindestens den SQL-2 Entry-Level-Standard von 1992 zu erfüllen. Da praktisch alle großen Datenbanken in ihrer Funktionalität weit über diesen Standard hinausgehen, kann es bei der Verwendung datenbankspezifischer SQL-Befehle bei der Umstellung auf eine andere Datenbank möglicherweise zu einem erheblichem Portierungsaufwand kommen. Weniger komplexe Abfragen sind jedoch durchaus nur mit den im SQL-2 Entry-Level-Standard definierten Befehlen umsetzbar und damit datenbankunabhängig mit JDBC zu realisieren

4.4 Servlets

Literaturhinweis für die folgenden Unterkapitel: [11], [13], [14], [4], [5], [6], [7]

Bei Servlets handelt es sich um kleine Java-Programme, die wie Applets in einer vorhandenen Umgebung ablaufen. Die Ablaufumgebung ist hierbei der Server. Analog zu dem Lebenszyklus von Applets gibt es auch einen für Servlets. (siehe auch 4.4.2)

Servlets laufen auf einem Server als ein Service ab, der Anfragen von einem Client entgegennimmt, ein Ergebnis erzeugt und dieses an den Client zurücksendet

Für den Einsatz von Servlets ist ein servlet-fähiger Server notwendig. Derzeit gibt es für alle verbreiteten Web-Server (wie z.B. Apache, Microsoft Internet Information Server, Netscape Enterprise Server, IBM Internet Connection Server, etc.) Servlet-Erweiterungen

Die Servlet API und damit die zum Erstellen von Servlets nötigen Klassen sind nicht im SDK enthalten. Hierfür wird von Sun das Java Servlet Development Kit (JSDK) bereitgestellt. Es liegt aktuell in der Version 2.2 vor. (Download siehe [11])

4.4.1 Datenfluss Client/Server

Ein Servlet dient der Kommunikation zwischen dem Client und beliebigen Servern. Dabei nimmt das Servlet eine Art Mittlerrolle ein. Man spricht auch von einem „3-Tier-Design“[13] der Anwendung. Die folgende Grafik verdeutlicht, was damit gemeint ist:

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 4-2: 3-Tier-Design

Tier 1: Der 1. Tier ist der Client-Rechner mit dem Web-Browser, in dem das Java Applet abläuft. Über ihn läuft die Kommunikation und Interaktion mit dem Benutzer ab

Das Applet kann über das Netzwerk (z.B. Internet) eine Anfrage an ein Servlet auf dem Web-Server senden

Tier 2: Der 2. Tier wird von einem Web-Server gebildet, der die Fähigkeit besitzt, Java-Servlets auszuführen. Servlets besitzen nicht die Beschränkungen wie Applets. Ihnen ist es deshalb möglich, auf beliebige andere Rechner zuzugreifen (im obigen Beispiel z.B. einen Datenbankserver). Die Servlets verarbeiten die vom Applet gesendeten Anfragen, leiten diese über das Netzwerk weiter und senden das Ergebnis zurück an das Applet

Tier 3: Der 3. Tier wird im obigen Beispiel durch einen Web-Server gebildet. Es könnte sich jedoch um jeden beliebigen Server handeln, auf dessen Ressourcen durch das Servlet zugegriffen werden kann. Das Ergebnis dieser Servlet-Anfrage wird an den 2. Tier zurückgesendet

4.4.2 Lebenszyklus eines Servlets

Ähnlich einem Applet innerhalb des Browsers unterliegt auch ein Servlet innerhalb der Umgebung des Servers einem gewissen Lebenszyklus

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 4-3: Lebenszyklus eines Servlets

Mit der ersten Anfrage wird eine Instanz des Servlets angelegt und durch Aufruf der Methode init() initialisiert

Die eigentliche Funktionalität ist in der Methode service() untergebracht. Diese Methode wird bei jeder Client-Anfrage aufgerufen. Sie nimmt die Anfrage entgegen, verarbeitet sie und sendet eine entsprechende Antwort zurück. Nach der Beantwortung kann das Servlet entweder weiter im Speicher existieren oder es wird durch den Aufruf der Methode destroy() entfernt und die Ressourcen freigegeben

Ob das Servlet nach Beendigung der Methode service() im Speicher bleibt, kann in der Regel in den Einstellungen des Servers festgelegt werden. Befindet es sich bei einer erneuten Anfrage noch im Speicher, so fallen das Laden und der init() -Aufruf weg, was natürlich zu einer deutlich schnelleren Antwort der Client-Anfrage führt

4.5 Datenbank

Die Datenbank wird zur Speicherung der zu visualisierenden Daten und der Daten für die sensitive Karte verwendet. Die Vorteile einer Datenbank (DB) gegenüber z.B. der Speicherung in einer Datei liegen zum einen in der Möglichkeit, mit gezielten Abfragen nur bestimmte benötigte Daten auszulesen. Zum anderen lassen sich die in einer DB gespeicherten Daten leicht ergänzen bzw. ändern. Damit wird insgesamt eine höhere Flexibilität bei der Datenhaltung erreicht. Des Weiteren ermöglicht der Einsatz einer Datenbank, die zu visualisierenden Daten zur Laufzeit einzulesen, d.h, erst wenn der Anwender die Visualisierung aufruft, werden nur die entsprechenden Daten über eine DB-Abfrage ermittelt. Dies spart Speicherplatz, weil so nicht alle zur Verfügung stehenden Daten im Arbeitsspeicher stehen müssen. Außerdem müssen so jeweils nur kleine Datenmengen übertragen werden – was bei einer Internetanwendung sehr wichtig ist

Generell kann für die gestellte Aufgabe jede internetfähige Datenbank verwendet werden

Voraussetzung ist, dass für die Datenbank ein JDBC-Treiber existiert. Außerdem muss die Datenbank auf einem Server installiert sein und über diesen Server von einem Servlet ansprechbar sein

MySQL

Im konkreten Fall habe ich mich für das Datenbanksystem MySQL entschieden. MySQL ist für UNIX-Systeme als Freeware erhältlich. Für Windows-Plattformen benötigt man eine kostenpflichtige Lizenz. Allerdings ist eine kostenlose 30-Tage-Testversion erhältlich

MySQL bietet einen netzwerkfähigen multi-user, multi-threaded SQL-Datenbank-Server

Die Haupteigenschaften von MySQL sind hohe Geschwindigkeit, Robustheit und die nahe Anlehnung an den SQL-Standard

Für weitere Informationen bezüglich MySQL verweise ich auf die MySQL-Homepage [S1]. Dort findet man viele weitere nützliche Links (Download, Dokumentation, Tutorials, Disussionsforen,...)

Der von mir verwendete MySQL-JDBC-Treiber findet sich unter [S2]

5. Konzept

Das Konzept wurde weitestgehend iterativ entwickelt, d.h. es wurde von mir ein Lösungsansatz erstellt und dieser dann programmiertechnisch umgesetzt. Bei der Programmierung stellten sich dann teilweise einige Dinge heraus, die auf andere Weise besser zu lösen waren. Dies führte dann zu einem veränderten Lösungsansatz

Ein grobes Grundkonzept ist jedoch schon von Anfang an nötig. Die konkrete Festlegung der Details dieses Konzepts erfolgte dann während der Umsetzung

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 5-1: Grundkonzept

Das Grundkonzept besteht darin, dass der Anwender durch einen Mausclick auf ein Objekt in einer Szene eine zu diesem Objekt gehörende weiterführende Datenvisualisierung aufrufen kann. Der Begriff Szene ist bewusst allgemein gehalten. Damit könnten verschiedene Karten bzw. Kartenausschnitte mit Städten, Straßen, Gebäuden, etc. als Objekte gemeint sein. Ebenso wäre jedoch auch eine 3D-Ansicht mit entsprechenden 3D-Objekten denkbar. Allerdings wären bei einer solchen 3D-Grafik andere Techniken als die in den Kapiteln 3 und 4 vorgestellten nötig. Der von mir verfolgte Lösungsansatz beschränkt sich deshalb auf eine 2D-Szene

5.1 Darstellung

Für die Umsetzung einer 2D-Szene stehen zwei Möglichkeiten zur Auswahl:

Denkbar wären ein vektorbasierter Ansatz, d.h. dass die Karteninhalte als Koordinaten vorliegen. Die Vorteile einer Vektorgrafik liegen unter anderem in der Skalierbarkeit und in der Möglichkeit nur bestimmte Aspekte des Bildes anzuzeigen (z.B. nur Straßen, aber keine Gebäude). Außerdem lässt sich mit Vektordaten die Auswahl eines bestimmten Objekts der Szene einfach umsetzen. Allerdings unterstützt Java keine Vektor-Bildformate (wie z.B. DXF[14] ). Deshalb müsste man spezielle Klassen entwickeln, die entweder ein eigenes Format oder bekannte Formate einlesen können. Dies würde das Applet jedoch schnell sehr umfangreich werden lassen. Die Darstellung auf dem Bildschirm könnte dann durch die java-eigenen Grafikroutinen erfolgen. Bei größeren, komplexen Szenen könnte es dann aber zu einem langsamen Bildaufbau kommen

Die andere Möglichkeit besteht darin, die Karte als Rasterbild einzulesen. Java unterstützt direkt die Formate GIF[15] und JPEG[16]. Die Erstellung einer Karte in diesen Formaten kann entweder per Hand, durch Einscannen von Vorlagen oder durch Konvertierung von bereits vorhandenen Grafiken erfolgen. Jedes moderne Grafikprogramm (z.B. Photoshop) unterstützt zumindest eines dieser Formate. Auch vektorbasierte Grafikprogramme (z.B. CorelDraw) stellen Exportfunktionen für GIF und/oder JPEG zu Verfügung. Ein Nachteil der Rasterbilder ist die eingeschränkte Skalierbarkeit. Ein großer Vorteil ist jedoch die Darstellungsgeschwindigkeit. Ist das Bild erst einmal in den Speicher geladen, ist der Bildaufbau nicht mehr vom Inhalt der Grafik abhängig, wie das bei der Vektorgrafik der Fall ist. Dies ist vor allem bei einer Internetanwendung, bei der das Applet auf einem von der Rechenleistung her unbekannten Client-Rechner läuft, ein entscheidender Vorteil

Als Lösungsansatz habe ich eine Kombination der beiden Modelle gewählt. Die Darstellung des eigentlichen Karteninhalts erfolgt als Rastergrafik. Die einzelnen in der Karte auswählbaren Objekte werden in vektorieller Form als Flächen definiert

Bei der Darstellung der zu visualisierenden Daten gibt es zum einen die Möglichkeit, die Daten direkt in der Szene zu visualisieren. Der Vorteil dabei wäre, dass eine direkte Beziehung zwischen Objekt und der Visualisierung erzeugt wird. Durch dieses Vorgehen könnten jedoch Teile der Karte verdeckt werden, was zu vermeiden ist. Außerdem soll die Größe der Karte beliebig wählbar sein. Dadurch könnte es sein, dass bei einer schmalen Karte die Visualisierung in der Breite bzw. Höhe gar nicht in die Darstellung der Szene passt

Die andere Möglichkeit ist die Darstellung der Daten außerhalb der Szene. Hier sind zwei Arten vorstellbar

Man könnte zum einen sowohl die Karte als auch die Visualisierung in einem Browserfenster unterbringen. Ein solcher Ansatz ist jedoch sehr unflexibel und würde besonders bei kleinen Monitoren bzw. niedrigen Auflösungen dazu führen, dass entweder Teile der Karte und/oder der Visualisierung nicht mehr auf dem Bildschirm dargestellt werden könnten

Besser ist deshalb die Darstellung in getrennten Fenstern. Dem Anwender wird dadurch die Möglichkeit gegeben, die Fenster so zu positionieren, wie er es möchte. Das separate Visualisierungsfenster bietet darüber hinaus die Möglichkeit, ein an das Fenster gebundenes Menü zu erzeugen, über das verschiedene Einstellungen zur Visualisierung vorgenommen werden können

5.2 Verteilung Client/Server

Bei einer Internetanwendung muss man sich auch noch überlegen, welche Programmteile auf dem Clientrechner und welche auf dem Server ablaufen sollen

Im vorliegenden Fall wird durch das Aufrufen der Internetseite im Browser das Applet und die benötigten Visualisierungsklassen vom Webserver geladen. Die Ausführung erfolgt dann auf dem Client-Rechner

Zum Einlesen der benötigten Daten aus einer Datenbank werden verschiedene Servlets aufgerufen. Diese Servlets stehen auf dem Webserver und werden auch dort ausgeführt

Über sie werden die Daten von einem Datenbankserver abgerufen. Dieser Datenbankserver kann dabei sowohl ein eigenständiger über das Netz verbundener Rechner sein. Es ist jedoch auch durchaus denkbar, dass Datenbank- und Webserver auf ein und demselben Rechner laufen

Die Zusammenhänge sind in folgender Grafik dargestellt:

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 5-2: Verteilung Client/Server

5.3 Allgemeine Anwendbarkeit

Um die Flexibilität für verschiedenste Anwendungen zu gewährleisten, können in der aufrufenden HTML-Datei mehrere Parameter festgelegt werden, die vor allem die Darstellung der Karte beeinflussen (eigentliches Kartenbild, Farben der Pop-Up-Texte und der Flächenumrandungen, Schriftart, ...)

Auch die Struktur der zugrundeliegenden Datenbank sorgt dafür, dass die Anwendung für die verschiedensten Anwendungsgebiete angepasst werden kann. Durch die Festlegung eines Tabellennamens in der aufrufenden HTML-Datei können durchaus auf der Basis einer Karte mehre Themengebiete in der selben Datenbank verwaltet werden. Bei aufeinander abgestimmten Karten werden dann immer die selben Vektorkoordinaten der einzelnen Objekte verwendet und nur der entsprechende Kartenhintergrund und die zu visualisierenden Daten änder sich

[...]


[1] CGI = Common Gateway Interface; die Standardschnittstelle zum Aufruf externer Programme, die dynamisch Daten für WWW-Server bereitstellen

[2] ANSI: American National Standards Institute

[3] ISO: International Organization of Standardization

[4] OOP-Sprache = objekt-oritentierte Programmiersprache

[5] Literal: [engl.], eine Konstante, die sich während des Programmablaufes nicht ändert. Sie ist in ihrem Inhalt nicht durch eine Bereichsdefinition festgelegt und hat auch keinen Datennamen

[6] package: [engl.], Paket. Logische Ordnungsstruktur der Java-Klassenbibliothek

[7] API = A pplication P rogramming I nterface

[8] persistent: Die Eigenschaften eines Objekts werden gespeichert und sind auch nach einem längeren Zeitraum wieder abrufbar

[9] GUI = Graphical User Interface; Benutzerschnittstelle, die grafische Elemente zur Interaktion nutzt

[10] GIF = Graphics Interchange Format; von Compuserve entwickeltes Grafikformat

[11] JPEG = Joint Photographic Experts Group; Grafikformat v.a. für photorealistische Bilder

[12] ODBC = O pen D ata B ase C onnectivity; weitverbreitetes Treibermodell zur einheitlichen Programmierung von Datenbankanbindungen unter Windows

[13] tier: [engl.], Rang, Reihe. Geeignete deutsche Übersetzung in diesem Zusammenhang: Ebene

[14] DXF = D rawing E x change F ormat; von der Firma Autodesk (AutoCAD) entwickeltes weitverbreitetes Format zum Speichern von Vektor-Grafiken

[15] GIF = G raphics I nterchange F ormat; von Compuserve entwickeltes Grafikformat

[16] JPEG = J oint P hotographic E xperts G roup; Synonym für Grafikformat v.a. für photorealistische Bilder

Details

Seiten
118
Jahr
2000
ISBN (eBook)
9783638100076
Dateigröße
3.1 MB
Sprache
Deutsch
Katalognummer
v20
Institution / Hochschule
Hochschule Mainz – Fachbereich I, Geoinformatik und Vermessung
Note
1.0
Schlagworte
Konzeption Entwicklung Visualisierungswerkzeugs Java

Autor

Teilen

Zurück

Titel: Konzeption und Entwicklung eines Visualisierungswerkzeugs mit Java