JAVA

Werbung
SYSTEMPROGRAMMIERUNG
VISUALISIERUNG (UND VERGLEICH) VON
VERSCHIEDENEN ALGORITHMEN ZUM ZEICHNEN VON
LINIEN UND KREISEN
PROJEKT: "LICIVI" - LINE-CIRCLE-VISUALIZER
Vorgelegt von Michael Jahn, Matr.-Nr.: 313632
 Michael Jahn 1997
Michael Jahn
Abt-Hugo-Straße 11
36093 Künzell
Email: [email protected]
Systemprogrammierung
Seite 2
Projekt: LiCiVi
Systemprogrammierung
Projekt: LiCiVi
Inhaltsverzeichnis
1
VORWORT.......................................................................................................... 5
2
EINLEITUNG ....................................................................................................... 6
2.1
Aufgabenstellung .................................................................................................................................... 6
2.2
Allgemeine Überlegungen ...................................................................................................................... 6
2.3
Die Vorteile von JAVA ........................................................................................................................... 7
3
SYSTEMGESTALTUNG ..................................................................................... 9
3.1
Groborganisation .................................................................................................................................... 9
3.2
Detailorganisation ................................................................................................................................. 10
3.3
Entwurf der grafischen Benutzeroberfläche ...................................................................................... 12
3.4
Interaktionsdiagramme ........................................................................................................................ 13
4
PROGRAMMIERUNG ....................................................................................... 15
4.1
Erstellung einer Zeichenfläche, die Vergrößerungen erlaubt ........................................................... 15
4.2
Realisierung eines "Debug"-Modus für den Grafik-Algorithmus ................................................... 16
4.3
Threads unter JAVA ............................................................................................................................ 18
4.4
Gesamtklassenmodelle für API 1.0 und API 1.1 ................................................................................ 18
5
ERWEITERBARKEIT VON LICIVI .................................................................... 21
5.1
Implementierung eines neuen grafischen Algorithmus ..................................................................... 21
5.2
Erweiterung der Parameterauswertung ............................................................................................. 22
5.3
Aufrufen des neuen Algorithmus ........................................................................................................ 23
6
ANHANG ........................................................................................................... 25
6.1
LiCiVi-Parametereinstellungen ........................................................................................................... 27
6.2
LiCiVi-HTML-Seiten ........................................................................................................................... 29
6.3
Programmdokumentation (API 1.0) ................................................................................................... 31
6.4
Programmdokumentation (API 1.1) ................................................................................................... 33
6.5
LiCiVi und HTML-Browser, Applet-Viewer ..................................................................................... 37
6.6
Programmierrichtlinien ....................................................................................................................... 39
6.7
Entwicklungsumgebung ....................................................................................................................... 41
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 3
Systemprogrammierung
Projekt: LiCiVi
6.8
Literaturliste ......................................................................................................................................... 43
6.9
GNU General Public License ............................................................................................................... 45
Seite 4
Systemprogrammierung
Projekt: LiCiVi
1 V O RW O RT
Linien und Kreise sind die wichtigsten Elemente der grafischen Datenverarbeitung. Ohne
diese Bausteine gäbe es keine grafischen Benutzeroberflächen, wie man sie heute von jedem
Computer - Arbeitsplatz kennt.
Jedoch ist die Konvertierung der natürlichen Formen von Kreis und Linie auf die "grobe"
Rastergrafik eines Rechners nicht immer trivial. Zu diesem Zweck gibt es eine ganze Reihe
unterschiedlicher Algorithmen. Dieses Projekt soll dabei helfen, den mathematischen
Hintergrund dieser Algorithmen zu visualisieren und Besonderheiten aufzeigen. Besonderer
Wert wurde auf die Möglichkeit der Vergrößerung der Linien und Kreise gelegt, um zu
verdeutlichen, wie die einzelnen Algorithmen ihre Punkte verteilen.
Auf Grund dieser Gegebenheiten lag es nahe, das Projekt unter einem speziellen Werkzeug (z.
B. Toolbook) zu entwickeln, jedoch mangelt es bei dieser Art Werkzeugen immer an
Laufzeitumgebungen, die auf jeder Rechner-Plattform verfügbar sind. Deshalb fiel die Wahl
auf die objektorientierte Sprache JAVA, die von der Firma SUN entwickelt wurde, und schon
heute auf den meisten Plattformen verfügbar ist. In Verbindung mit einer HTML1-Seite kann
das fertige Programm sogar über das Internet geladen und sofort ausgeführt werden, denn
auch die meisten HTML-"Browser" unterstützen Programme in JAVA.
"LiCiVi" ist eine Kombination aus "JAVA-Applet" und HTML-Seiten, wobei das Applet (das
JAVA-Programm) die Algorithmus-Visualisierung und die HTML-Seiten den Textbereich
übernehmen.
Die vorliegende Projektarbeit der Systemprogrammierung wurde im Rahmen einer Hausarbeit
in der Zeit von Oktober bis Dezember 1997 realisiert. Das Thema wurde von Herrn Prof. Dr.
Siegmar Groß vorgeschlagen.
Ich versichere, daß ich diese Arbeit allein ausgeführt und dokumentiert habe. Als Hilfe stand
mir nur die im Anhang aufgeführte Literatur zur Verfügung.
(Michael Jahn)
1
Hyper Text Markup Language
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 5
Systemprogrammierung
Projekt: LiCiVi
2 E I N LE I T U NG
2.1 Au fgabenstellung
Das Projekt, im folgenden LiCiVi genannt, soll das Visualisieren und den Vergleich
verschiedener Linien bzw. Kreisalgorithmen ermöglichen. Dabei soll der Ablauf der
einzelnen Algorithmen dargestellt werden. Ferner soll es möglich sein, die vom Algorithmus
gezeichneten Punkte zu vergrößern, um dessen Güte (Rundungsfehler in Form von Löchern)
bewerten zu können. Im Rahmen dieses Projektes sollen die folgenden Linien- und
Kreisalgorithmen realisiert werden:
Linienalgorithmen





Horizontale Linie
Vertikale Linie
Direkte Methode
Direkte Methode mit Fallunterscheidung
Algorithmus nach Bresenham
Kreisalgorithmen



Standardform
Parameterdarstellung
Kreisalgorithmus nach Bresenham
2.2 Al lgemeine Überlegungen
Bei der Planung und Realisierung von LiCiVi (Line Circle Visualizer) stehen mehrere
Aspekte im Vordergrund.




LiCiVi soll in erster Linie das Problem der Visualisierung von Linien- und
Kreisalgorithmen realisieren, jedoch soll es aber später auch möglich sein, das Programm
durch neue Elemente zu erweitern.
LiCiVi soll portabel sein, d. h. auf möglichst vielen Plattformen bzw. Betriebssystemen
lauffähig sein.
Das Programm soll intuitiv steuerbar sein, sowie einen Textbereich enthalten, der den
notwendigen theoretischen Hintergrund zu den einzelnen Algorithmen liefert.
Außerdem wäre es von Vorteil, einen Algorithmus im Schrittmodus zu durchlaufen um
gleichzeitig die zugehörigen Grafikausgaben zu betrachten ("Trace" bzw. "Debug"Modus).
LiCiVi soll eine Art Lernprogramm mit integrierter Simulation verkörpern, welches aber über
das Internet geladen werden kann, um es dann sofort ausführen zu können.
Angesichts dieser Vorüberlegungen liegt es nahe, das Programm über ein spezielles
Werkzeug (z. B. Autorensystem, Simulationspaket, etc.) zu realisieren. Diese Werkzeuge sind
aber i. d. R. plattformabhängig und benötigen spezielle Laufzeitbibliotheken, die nicht immer
lizenzfrei verfügbar sind. Die weitverbreiteten Programmiersprachen wie C, Pascal oder Basic
Seite 6
Systemprogrammierung
Projekt: LiCiVi
sind zwar auf vielen Plattformen verfügbar, aber die Programmierung selbst ist vielfach
systemabhängig und erfordert systemtypische Bibliotheken.
2.2.1.1 Die Lösung: JAVA
Die beste Lösung findet sich in der recht jungen Programmiersprache JAVA, die von SUN
Microsystems 1991 im Rahmen eines Forschungsprojektes zur Software-Entwicklung für
Elektronikgeräte wie Fernseher, Videorecorder, etc. entwickelt wurde. Dabei wurde das Ziel
verfolgt, eine Sprache zu entwickeln, die schnell, effizient und leicht auf vielfältige
Hardware-Systeme portierbar ist.
Das gleiche Ziel machte aus JAVA eine ideale Sprache zur Verbreitung ausführbarer
Programme über das World Wide Web (WWW) und auch eine universelle
Programmiersprache zur Entwicklung von Programmen, die bedienungsfreundlich und auf
verschiedene Plattformen portierbar sind.
2.3 Die Vorteile von J AV A

JAVA ist plattformunabhängig, d. h., daß ein Programm auf jedem beliebigen
Computersystem ausgeführt werden kann. JAVA-Programme laufen auf jedem System,
auf dem eine virtuelle JAVA-Maschine installiert ist (i. d. R. übernimmt diese Aufgabe
eine HTML-Browser). Die Plattformunabhängigkeit hört aber nicht bei der Quellebene
auf. Auch JAVA-Binärdateien sind plattformunabhängig und laufen auf verschiedenen
Maschinen ohne Notwendigkeit, den Quellcode neu compilieren zu müssen. Die
Abbildung 2.1 soll den Übersetzungsvorgang von JAVA-Anwendungen darstellen.
Java-Interpreter
(Pentium)
JAVA
Code
JAVA
Compiler
JAVA
Bytecode
Java-Interpreter
(Pow er PC)
Java-Interpreter
(SUN)
Java-Interpreter
(Silicion Graphics)
plattformunabhängig
plattformabhängig
Abbildung 2.1
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 7
Systemprogrammierung
Projekt: LiCiVi
Nach Erstellung des JAVA-Quellcodes wird dieser zunächst über einen JAVA-Compiler
übersetzt. Der daraus entstehende Bytecode bleibt weiterhin plattformunabhängig. Diesen
Binärcode kann man auch als Maschinensprache für einen virtuellen Prozessor bezeichnen.
Um das übersetzte Programm auszuführen, benötigt man schließlich eine
plattformabhängigen JAVA-Interpreter (virtuelle JAVA-Maschine), welcher den Bytecode
interpretiert und ausführt. Diese Interpreter sind als eigenständige Programme erhältlich bzw.
in aktuellen HTML-Browsern bereits integriert.

JAVA ist objektorientiert, wobei die Grammatik stark an C++ angelehnt wurde. Dies
bedeutet eine höhere Wiederverwendbarkeit und meist auch Übersichtlichkeit der
geschriebenen Programme.

JAVA ist leicht zu lernen. JAVA lehnt sich stark an die Sprachkonstrukte von C an, es
wurden jedoch Zeiger-Arithmetiken komplett ausgeschlossen. Außerdem werden
Datentypen wie Felder oder Zeichenketten als vollwertige Objekte geführt. Dies
verbessert in diesem Zusammenhang die meist fehlerbehaftete Programmierung unter C.
JAVA erlaubt die Erstellung von sog. "Applets" oder Anwendungen. Applets werden in
einem Browser-Fenster direkt ausgeführt, während Anwendungen immer eigene Fenster
erzeugen müssen, um Grafikausgaben zu ermöglichen. Es ist aber auch möglich, beide
Konzepte zu kombinieren, so daß eine Anwendung alleine (in einem eigenen Fenster), wie
auch in einem Applet ausgeführt werden kann.
Für weitere Informationen sei auf die Literatur im Anhang verwiesen.
Seite 8
Systemprogrammierung
Projekt: LiCiVi
3 S Y S TE M GE S TAL T U N G
3.1 Groborganisation
Im Folgenden sollen alle Anforderungen an das Projekt LiCiVi aufgeführt werden. Die
Einteilung der Anforderungen soll nach den folgenden Bereichen erfolgen:



Funktionalität
Grafische Benutzeroberfläche
Programmierrichtlinien
3.1.1
Funktionalität
JAVA und HTML-Seiten lassen sich sehr gut miteinander kombinieren. Gerade für ein
Lernprogramm ist diese Möglichkeit ideal, da Lernsysteme einen relativ hohen Textanteil
besitzen, der sich mit konventionellen Programmiersprachen eher mühsam realisieren läßt
(Schriftarten, Farben, Erweiterbarkeit, etc.). Aus diesem Grund soll die Programmierung von
LiCiVi nur den simulationstechnischen Teil in Form eines Applets lösen. Den Textbereich
übernimmt dann eine HTML-Seite, in der dieses Applet eingebettet ist. Über das Applet wird
dann das Simulationsfenster mit einer grafischen Benutzeroberfläche geöffnet.
Die Funktionalität von LiCiVi soll die folgenden Anforderungen abdecken:
LiCiVi soll es ermöglichen, grafische Algorithmen zu visualisieren, d. h. das einerseits ein
bestimmter Algorithmus dargestellt werden kann, aber zusätzlich dieser auch durchlaufen
werden kann. Die zugehörigen Grafikausgaben sollen gleich neben dem Algorithmus auf
einer Zeichenfläche erscheinen. LiCiVi soll interaktiv vom Benutzer gesteuert werden
können. Auf Knopfdruck soll die Simulation gestartet, angehalten und neu initialisiert werden
können. Es soll auch die Möglichkeit eines Schrittmodus und Schnellmodus gegeben sein, um
den Algorithmus besser studieren zu können. Die einzelnen Variablen (und deren aktuelle
Werte) des entsprechenden Algorithmus sollen ebenfalls während der Simulation sichtbar
sein. Nachfolgend seien alle wichtigen Funktionalitäten noch einmal zusammengestellt:







Realisierung in Form eines Applets
Möglichkeit der Auswahl eines Grafikalgorithmus
Interaktive Kommunikation mit dem Benutzer
Schrittmodus und Schnellmodus für den Ablauf des Zeichenalgorithmus
Ausgabe der Variablen und deren Werte während der Simulation
Anzeigen der aktuellen Programmposition
Grafikalgorithmus zurücksetzen
3.1.2
Grafische Benutzeroberfläche
Bei der Entwicklung der grafischen Benutzeroberfläche wird davon ausgegangen, daß es sich
bei dem Projekt um ein Lernsystem mit integrierter Simulation handelt. Lernsysteme besitzen
im Idealfall eine klare, übersichtliche Anordnung der Steuerelemente, die nach Möglichkeit
eindeutig beschriftet sein sollen.
Zur Anzeige des eigentlichen grafischen Objekts wird eine Zeichenfläche benötigt, die es
erlaubt, Punkte zu setzen und diese Punkte beliebig zu vergrößern ("Zooming"). Weiterhin ist
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 9
Systemprogrammierung
Projekt: LiCiVi
ein Textfeld erforderlich, wo der Quellcode des grafischen Algorithmus angezeigt und
einzelne Zeilen markiert werden können. Ein weiteres Textfeld zur Anzeige von Variablen
und deren Werte ergänzt den Quelltext des Algorithmus um wichtige Informationen.
Außerdem ist sind verschiedene Steuerelemente erforderlich, mit denen die Simulation
gestartet, angehalten, neu initialisiert und im Schrittmodus ausgeführt werden kann. Für die
Einstellung der Vergrößerung auf der Zeichenfläche, sowie das Festlegen der
Simulationsgeschwindigkeit werden zwei weitere Steuerelemente benötigt.
Die grafische Benutzeroberfläche sollte so programmiert sein, daß sie auf jedem System
angezeigt werden kann - systemspezifische Programmierungen sind zu vermeiden.
Alle Anforderungen an die grafische Benutzeroberfläche sind nachfolgend noch einmal
zusammengefaßt:
 Übersichtliche Gestaltung der Oberfläche
 Komponenten
 Zeichenfläche mit Möglichkeit der Vergrößerung des Inhalts
 Textfeld zur Anzeige des Quellcodes mit Markierungsmöglichkeit einer Zeile
 Textfeld zur Anzeige von Variablen des Algorithmus und deren Inhalt
 Schaltknöpfe
 "Start" zum Starten der Simulation
 "Schritt" zum Ausführen im Schrittmodus
 "Schnell" zum sofortigen zeichnen des Grafikobjekts
 "Neu" zur Neuinitialisierung der Simulation
 Schiebeleisten
 "Zoom" zur Einstellung der Vergrößerung auf der Zeichenfläche
 "Ablauf" zur Steuerung der Ablaufgeschwindigkeit der Simulation
 Systemunabhängige Programmierung
3.1.3
Programmierrichtlinien
Die im Anhang beigefügten Programmierrichtlinien stammen aus der Vorlesung
"Programmieren in C" von Herrn Prof. Dr. Groß, und sind für das Projekt allgemein gültig,
sofern die Regeln mit der Objektorientierung von JAVA vereinbar sind.
LiCiVi sollte unbedingt so entwickelt werden, daß es leicht durch neue Zeichenalgorithmen
erweiterbar ist.
3.2 Detailorganisation
Innerhalb der Detailorganisation sollen die Anforderungen an LiCiVi präzisiert werden. Dazu
gehören sog. Szenarien, die einzelne Problemstellungen aufgreifen, um diese genauer
erläutern und Maskenentwürfe für die Gestaltung der grafischen Oberfläche.
Seite 10
Systemprogrammierung
3.2.1
Projekt: LiCiVi
Aufstellung der Szenarien
3.2.1.1 Szenario "LiCiVi wird aufgerufen"
Nachdem der Benutzer eine LiCiVi-HTML-Seite mit einem bestimmten Algorithmus
ausgewählt hat, erscheint auf der Seite nach einem erklärenden Text ein Knopf mit der
Aufschrift "Simulation...". Betätigt der Benutzer diesen Knopf, öffnet sich ein einzelnes
Fenster, welches die Benutzeroberfläche für LiCiVi bereitstellt. Hier kann der Benutzer den
gewählten Algorithmus studieren.
3.2.1.2 Szenario "Algorithmus wird gestartet"
Auf der grafischen Benutzeroberfläche befinden sich mehrere Schaltknöpfe. Betätigt der
Benutzer den Knopf "Start", wird die Ausführung des Algorithmus gestartet. Der Benutzer
kann dabei genau beobachten, wie die einzelnen Punkte auf einem Zeichenbereich des
Fensters gesetzt werden. Außerdem kann er zu jeder Zeit die aktuellen Variablenwerte des
Algorithmus einsehen und die Position der aktuellen Anweisung innerhalb des Algorithmus
erkennen.
3.2.1.3 Szenario "Algorithmus wird im Schrittmodus ausgeführt"
Betätigt der Benutzer den Schaltknopf "Schritt" (dabei ist es gleich, ob der Algorithmus
bereits nach 3.2.2 gestartet wurde), wird der grafische Algorithmus bei der nächsten
Anweisung angehalten. Die Anzeige der aktuellen Position sowie der Variablen bleiben
jedoch erhalten. Nach jedem erneuten betätigen des "Schritt"-Knopfes, setzt der Algorithmus
seine Arbeit um eine Anweisung fort. Die entsprechenden Veränderungen können über die
Zeichenfläche und der Anzeige der Variablen eingesehen werden. Der Schrittmodus wird im
allgemeinen auch als "Trace" bzw. "Debug"-Modus bezeichnet.
3.2.1.4 Szenario "Algorithmus wird im Schnellmodus ausgeführt"
Wenn es darum geht, lediglich das Ergebnis eines grafischen Algorithmus zu betrachten,
verfügt LiCiVi über einen "Schnellmodus". Durch die Wahl des Schaltknopfes "Schnell"
erscheint sofort das Ergebnis des Algorithmus auf der Zeichenfläche. Informationen über
Variablenwerte bzw. Programmpositionen werden hier nicht angezeigt.
3.2.1.5 Szenario "Algorithmus wird neu initialisiert"
Um den Inhalt des Zeichenfeldes zu löschen und den Algorithmus neu zu initialisieren verfügt
LiCiVi über den Schaltknopf "Neu". Bei Betätigung dieses Knopfes wird die Ausführung des
Algorithmus beendet, alle Variablen zurückgesetzt und die Programmposition auf die erste
Zeile des grafischen Algorithmus eingestellt. Die Simulation kann danach über die Knöpfe
"Start", "Schnell" oder "Schritt" neu gestartet werden.
3.2.1.6 Szenario "Vergrößerung der Zeichenfläche einstellen"
Der Vergrößerungsfaktor der Zeichenfläche kann jederzeit über eine Schiebeleiste verändert
werden. Zieht der Benutzer diese Schiebeleiste ganz nach links, so beträgt der
Vergrößerungsfaktor "1" und das grafische Objekt innerhalb der Zeichenfläche wird in
Originalgröße dargestellt (Punktgröße = 1 * 1 Pixel). Zieht der Benutzer dagegen die
Schiebeleiste ganz nach rechts, wird das grafische Objekt bis zu einem Vergrößerungsfaktor
von "30" dargestellt (Punktgröße = 30 * 30 Pixel).
3.2.1.7 Szenario "Ablaufgeschwindigkeit einstellen"
Die Ablaufgeschwindigkeit der Simulation (Simulation wird über den Knopf "Start"
ausgeführt) kann über eine weitere Schiebeleiste eingestellt werden. Wird die Schiebeleiste
ganz nach links gezogen, läuft die Simulation mit minimaler Verzögerung, also maximaler
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 11
Systemprogrammierung
Projekt: LiCiVi
Geschwindigkeit ab. Stellt der Benutzer die Schiebeleiste ganz nach rechts, so wird der
Algorithmus sehr langsam ausgeführt und der Benutzer kann den Programmablauf besser
erkennen.
3.2.1.8 Szenario "Simulationsfenster verlassen"
Das Simulationsfenster kann jederzeit (auch während der Ausführung des Algorithmus)
geschlossen werden. Der Benutzer wählt dazu den systemspezifischen Befehl bzw.
Schaltknopf auf dem Fensterrand bzw. Systemmenü aus. Bevor das Fenster geschlossen wird,
wird der grafische Algorithmus angehalten und alle Variablen zurückgesetzt.
3.2.1.9 Szenario "HTML-Seite wird verlassen"
Springt der Benutzer auf eine andere HTML-Seite, so werden alle Systemresourcen
freigegeben, die von LiCiVi reserviert wurden. Zuvor wird jedoch das Simulationsfenster
geschlossen.
3.3 Entw urf der grafischen Benutz eroberfläche
Die nachfolgende Skizze stellt den groben Entwurf der grafischen Benutzeroberfläche
innerhalb des Simulationsfensters exemplarisch dar.
LiCiVi
Algorithmus
mit
Zeilenmarkierer
Zeichenfläche
mit
Möglichkeit der Vegrößerung
Steuerleiste für
Simulation (Buttons)
Schiebeleiste zur
Veränderung der
Simulationsgeschw indigkeit
Start
Schritt
Schnell
Neu
Ablauf (+/-)
Auflistung der Variablen
und deren Inhalt
Schiebeleiste für die
Einstellung der
Vergrößerung
Zoom (+/-)
Logo
LiCiVi-Logo
Seite 12
Systemprogrammierung
Projekt: LiCiVi
3.4 Interaktionsdiagramme
3.4.1
"Benutzer startet Simulation"
Hauptfenster
(Applet)
Benutzer öffnet
HTML-Seite
Simulationsfenster
Benutzeroberfläche
Zeichenalgorithmus
aktiviert
Benutzer betätigt
Knopf
"Simulation"
aktiviert
aktiviert
Benutzeroberfläche
wird initialisiert
aktiviert
Benutzer startet
Simulation
AlgorithmusQuellcode
Variablendaten
SOLANGE nicht alle
Punkte gezeichnet
Punktdaten
Variablendaten
Algorithmus
zeichnet Punkt
ENDE SOLANGE
deaktiviert
Benutzer schließt
Fenster
Benutzer verläßt
HTML-Seite
deaktiviert
Erklärung:
Nachdem der Benutzer die Simulation gestartet hat, wird der Zeichenprozess gestartet. Wenn
alle Punkte auf der Zeichenfläche ausgegeben wurden, beendet sich der Prozess selbst. Nach
einer gewissen Zeit schließt der Benutzer das Fenster. Dabei wird zunächst die grafische
Benutzeroberfläche und dann das Fenster selbst deaktiviert (geschlossen). Verläßt der
Benutzer schließlich die HTML-Seite, wird auch das Applet geschlossen.
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 13
Systemprogrammierung
3.4.2
Projekt: LiCiVi
"Benutzer startet Simulation im Schrittmodus"
Hauptfenster
(Applet)
Benutzer öffnet
HTML-Seite
Simulationsfenster
Benutzeroberfläche
Zeichenalgorithmus
aktiviert
Benutzer betätigt
Knopf
"Simulation"
aktiviert
aktiviert
Benutzeroberfläche
wird initialisiert
Benutzer startet
Simulation im
Schrittmodus
aktiviert
AlgorithmusQuellcode
Variablendaten
SOLANGE nicht alle
Punkte gezeichnet
Benutzer
betätigt "Schritt"Knopf
nächster Schritt
Punktdaten
Algorithmus
zeichnet Punkt
Variablendaten
anhalten
ENDE SOLANGE
deaktiviert
Benutzer schließt
Fenster
Benutzer verläßt
HTML-Seite
deaktiviert
Erklärung:
Nachdem der Benutzer die Simulation im Schrittmodus gestartet hat, wird der
Zeichenalgorithmus aktiviert und die grafische Benutzeroberfläche wird mit allen nötigen
Daten gefüllt. Betätigt der Benutzer erneut den "Schritt"-Knopf, berechnet der
Zeichenprozess einen Punktwert und gibt diesen mit den aktuellen Variablendaten an die
Benutzeroberfläche. Danach legt sich dieser Prozess automatisch "schlafen". Der Benutzer
kann jetzt den Zeichenprozess solange "wecken", bis alle Punkte gezeichnet wurden. Danach
wird der Zeichenprozess automatisch beendet.
Seite 14
Systemprogrammierung
Projekt: LiCiVi
4 P R OG R AM MI E R U N G
LiCiVi soll mit der Programmiersprache JAVA realisiert werden. Derzeit gibt es zwei
verschiedene Sprachversionen. Die Version 1.0 ist weitverbreitet und wird von jedem
besseren HTML-Browser standardmäßig unterstützt. Die Version 1.1 ist aktueller und wurde
durch einige Zusätze und Verbesserungen ausgestattet. Leider wird momentan diese Version
von nur sehr wenigen HTML-Browsern unterstützt, jedoch ist davon auszugehen, daß alle
zukünftigen Browser diese Version unterstützen werden. Aus diesem Grund soll LiCiVi für
beide Versionen entwickelt werden.
Dieses Kapitel soll einige Problematiken der Programmierung von LiCiVi behandeln.
Außerdem werden zwei Gesamtklassen-Modelle (für JDK 1.0 und 1.1) vorgestellt, die den
prinzipiellen Aufbau von LiCiVi darstellen.
4.1 Erstellung einer Zeichenfläche, die
Vergrößerungen erlaubt
LiCiVi benötigt zur Darstellung der grafischen Objekte eine Zeichenfläche, die es erlaubt, die
Objekte bis auf Pixel-Ebene vergrößern zu können. Diese Zeichenfläche kann man auch als
eine Punktmatrix interpretieren, die eine gewisse Anzahl Punkte speichern kann. Die Größe
dieser Punkte, also die wirkliche Breite und Höhe in Bildpunkten, beeinflußt die Größe des zu
zeichnenden Objekts.
Man benötigt somit eine Klasse, die eine Matrix zur Speicherung der Punkte enthält und diese
auf Befehl auf einer bestimmten Fläche ausgibt. Als Parameter kann die Größe der einzelnen
quadratischen Punkte eingestellt werden.
Struktur der Klasse:
Punktmatrix
öff entliche Variablen:
keine
Methoden:
reset ()
setPixel (x, y)
setPixelWidth (w idth)
draw Grid ()
draw AllPixel ()
Methode "reset ()":
Löscht die Matrix und somit alle Punkte von der Zeichenfläche.
Methode "setPixel (x, y)":
Fügt einen neuen Punkt mit seinen Koordinaten der Matrix hinzu
und zeigt den Punkt mit der entsprechenden Pixelgröße an.
Methode "setPixelWidth (width)":
Stellt die Punktbreite auf eine bestimmte Pixel-Anzahl ein.
Methode "drawGrid ()":
Zeichnet ein Gitternetz. Die Breite und Höhe eines Gitterelements
entspricht der Breite eines Punktes.
Methode "drawAllPixel ()":
Zeichnet alle Punkte auf der Zeichenfläche neu.
Vorteilhaft ist die Erstellung als Subklasse der sog. "Canvas"-Klasse. Diese Klasse stellt eine
leere Fläche zur Verfügung, auf die Grafikmethoden angewandt werden können. Die
einzelnen Punkte mit der entsprechenden Pixelbreite können dann leicht als gleichseitige,
gefüllte Rechtecke realisiert werden.
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 15
Systemprogrammierung
Projekt: LiCiVi
Zusatz: Doppeltes Puffern
Beim schnellen Setzen von Punkten auf einem "Canvas"-Objekt treten unerwünschte
Flimmereffekte auf, da das Zeichnen quasi "beobachtet" werden kann. Eine sehr effektive
Eliminierung diese Flimmerns kann durch die Methode des "Doppelten Pufferns" (Double
Buffering) erzielt werden. Dabei werden alle Operationen auf die Zeichenfläche zunächst
außerhalb des Bildschirms durchgeführt (Offscreen). Nach Beendigung dieses Vorgangs wird
dann das gesamte Objekt auf die wirkliche, am Bildschirm sichtbare, Zeichenfläche
übertragen. Mit Hilfe dieser Technik lassen sich u. a. sogar flüssige Animationen erstellen.
Zur Realisierung unter JAVA werden zwei weitere Objekte benötigt:


Eine Instanz der Klasse Graphics zur Bereitstellung der "Offscreen"-Grafik.
Eine Instanz der Klasse Image zur Aufnahme des "Onscreen"-Canvas Objekts.
4.2 Realisierung eines "Debug" -Modus für den
Grafik - Algorithmus
LiCiVi soll es ermöglichen, grafische Algorithmen in einem Schrittmodus auszuführen, d. h.,
nach jedem Betätigen eines Knopfes soll der Algorithmus eine weitere Anweisung ausführen.
Diese Funktion läßt sich auf zwei verschiedene Arten realisieren.
Eine Möglichkeit wäre, den Algorithmus so umzuschreiben (z. B. durch eine "switch"Anweisung), daß er bei jedem Aufruf nur eine Zeile ausführt. Die jeweilige Position ließe sich
über eine Objektvariable zwischenspeichern. LiCiVi soll aber leicht durch neue Algorithmen
erweiterbar sein - diese Forderung keinesfalls erfüllt.
Eine bessere Lösung ergibt sich aus der Implementation einer "debug"-Funktion. Diese Art
der Schrittsteuerung wird von allen handelsüblichen Debuggern für Programme verwendet.
Die "debug"-Funktion wird dabei vor jede Anweisung gesetzt. Sie übernimmt die
Überwachung der Variablen und wartet auf die Bestätigung des Benutzers.
Diese Vorgehensweise läßt sich auch in LiCiVi umsetzen. Es ergibt sich jedoch ein Problem:
Die Realisierung der Wartefunktion. Normalerweise wartet ein Debugger aktiv
(Rechenleistung wird verbraucht) auf weiter Benutzereingaben, in LiCiVi kann dies aber nur
durch passives Warten gelöst werden. Die Lösung ist der Einsatz eines Threads, der die
Ausführung des Zeichenalgorithmus übernimmt. Dieser Thread kann zusätzlich auch für die
Einstellung der Simulationsgeschwindigkeit verwendet werden.
Befindet sich die Simulation im Schrittmodus wird zunächst de Algorithmus bis zur nächsten
debug-Anweisung ausgeführt. Diese Funktion legt dann - nach Aktualisierung aller Variablen
und Markierung der nächsten Anweisung - den Thread und damit auch sich selbst schlafen.
Betätigt der Benutzer den Schritt-Knopf erneut, wird dieser Thread wieder "aufgeweckt" - er
setzt seine Arbeit an der gleichen Stelle fort. Das folgende Ablaufdiagramm soll die
Arbeitsweise noch einmal detailieren.
Seite 16
Systemprogrammierung
Projekt: LiCiVi
debug-Funktion wird durch
Grafik-Algorithmus mit
Parameter n aufgerufen
Variablen-Anzeige
aktualisieren
Markiere Anweisung mit
Position n im
Quellcodefenster
nein
Schrittmodus ?
Thread
für eine gewisse Zeit
schlafen legen
ja
Thread
schlafen legen
(anhalten)
Zeichenalgorithmus
fotsetzen
Die Debug-Funktion wird mit einem zusätzlichen Parameter n aufgerufen, der die Zeile im
Quellcode-Bereich angibt, die der gerade ausgeführten Anweisung entspricht. Diese
Zeilenposition wird durch die Debug-Funktion markiert. Threads können unter JAVA auf
zwei verschiedene Arten erzeugt werden. Entweder durch eine selbständige Klasse, die von
der Klasse Thread abgeleitet wurde, oder durch die Implementierung der "runnable"Schnittstelle. Die zweite Variante erweist sich in den meistens Fällen als die einfachere und
besser überschaubarere Lösung.
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 17
Systemprogrammierung
Projekt: LiCiVi
4.3 Threads unter J AV A
Die Erstellung von Threads erfolgt unter JAVA sehr einfach, jedoch sind damit auch einige
Probleme verbunden. Die eigentliche Realisierung der Threads wird von der "virtuellen
JAVA Maschine", dem eigentlichen Interpreter, übernommen. Sie bestimmt auch das
Scheduling der einzelnen Threads. Außerdem spielen dabei auch systemspezifische Merkmale
eine große Rolle. Aus diesen Gründen kann nicht immer eindeutig bestimmt werden, wie
Threads auf dem ein oder anderen System behandelt werden. Die Folge sind eventuell
fehlerhaft laufende Programme bzw. sogar Systemabstürze. Insbesondere auf das Scheduling
aufbauende Programme sind deshalb kaum plattformunabhängig realisierbar.
LiCiVi benötigt keine besondere Art von Scheduling und sollte theoretisch auf jedem System
lauffähig sein. Dem Anhang dieses Dokuments wurde deshalb eine Liste der gebräuchlichsten
"Applet-Viewer" bzw. HTML-Browsern angefügt, die mit LiCiVi getestet wurden.
4.4 Gesamtklassenmodelle für API 1.0 und API 1.1
JAVA wurde für zwei verschiedene JAVA-Versionen (APIs) entwickelt. Um den
prinzipiellen Aufbau von LiCiVi darzustellen sind Klassenmodelle erforderlich. Sie eignen
sich zur Planung der Programmierung und zur späteren Orientierung. In größeren Projekten
sind dazu unbedingt Schnittstellenbeschreibungen erforderlich, insbesondere wenn die
Programmierarbeit auf mehrere Personen aufgeteilt werden soll.
Unterschiede zwischen API 1.0 und API 1.1 in Bezug auf LiCiVi
Die größten Unterschiede zwischen API 1.0 und API 1.1 liegen in der Ereignisverwaltung.
Bei der API 1.0 werden grundsätzlich alle Steuerelemente, egal welcher Art, in die
Ereignisverwaltung aufgenommen. Dies hat den Nachteil, daß nicht benötigte Steuerelemente
trotzdem abgefragt werden - dadurch wird Rechenleistung verschwendet. Ein weiterer
Nachteil ist die Abfrage der einzelnen Ereignistypen - diese müssen mühsam über switch bzw.
if-then Abfragen ermittelt werden. Der Grund liegt darin, daß alle Ereignisse Instanzen der
Event-Klasse sind, und diese über Identifikations-Nummern abgefragt werden müssen. Der
dritte Nachteil liegt in der Vererbbarkeit. So lassen sich keine globalen EreignisverwaltungsKlassen definieren, die Folge ist eine Zergliederung der Ereignisverwaltung. Das
Gesamtklassenmodell von LiCiVi, API 1.1 besitzt deshalb eine eigene Klasse, die alle
Ereignisse verwaltet und entsprechende Aktionen einleitet.
Bei API 1.1 werden alle Steuerelemente explizit der Ereignisverwaltung gemeldet. Die
einzelnen Ereignistypen können dann über separate Methoden global abgefragt werden. Diese
Vorgehensweise ist sehr übersichtlich und damit leicht erweiterbar. Die globale
Ereignisverwaltungsklasse wird auch als "Listener" bezeichnet.
Die JAVA API 1.1 wurde ferner durch neue Steuerelemente und Bibliotheken ergänzt. Diese
sollen hier aber nicht weiter aufgeführt sein, da LiCiVi diese besonderen Merkmale nicht
nutzt.
Seite 18
Systemprogrammierung
Projekt: LiCiVi
LiCiVi_Parameter
LiCiVi_Fenster
Punktmatrix
LiCiVi
LiCiVi_GUI
Graf ikObjekt
LinieBresenham
LinieDirekt
LinieDirektFU
HorizontaleLinie
VertikaleLinie
KreisBresenham
KreisParameter
KreisStandard
Legende:
Klasse
Klasse
Klasse mit
Steuerungsfunktion
VererbungsBeziehung
AggregationsBeziehung
Abstrakte Klasse
NachrichtenBeziehung
BenutzerSchnittstelle
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
LiCiVi
Line - Circle - Visualizer
Gesamtklassenmodell
API 1.0
Seite 19
Systemprogrammierung
Projekt: LiCiVi
LiCiVi_Parameter
LiCiVi_EventHandler
Punktmatrix
LiCiVi_Fenster
LiCiVi
LiCiVi_GUI
Graf ikObjekt
LinieBresenham
LinieDirekt
LinieDirektFU
HorizontaleLinie
VertikaleLinie
KreisBresenham
KreisParameter
KreisStandard
Legende:
Klasse
Klasse
Seite 20
Klasse mit
Steuerungsfunktion
VererbungsBeziehung
AggregationsBeziehung
Abstrakte Klasse
NachrichtenBeziehung
BenutzerSchnittstelle
LiCiVi
Line - Circle - Visualizer
Gesamtklassenmodell
API 1.1
Systemprogrammierung
Projekt: LiCiVi
5 E R WE I TE R B AR K E I T V ON L I C I V I
LiCiVi wurde so entwickelt, daß sehr leicht neue grafische Algorithmen implementiert
werden können. Die notwendigen Implementierungsschritte und Vorgehensweisen sollen in
diesem Kapitel erläutert werden.
5.1 Implementierung eines neuen grafischen
Al gorithmus
Zunächst muß der eigentliche grafische Algorithmus erstellt werden. Dazu wird eine neue
Klasse erstellt, die von der Klasse GrafikObjekt erbt. Diese Klasse enthält bereits alle
wichtigen Komponenten zum Starten, Stoppen und Rücksetzen des Algorithmus. Die neue
Klasse muß deswegen nur noch Algorithmus-spezifische Variablen und Methoden enthalten:
1.
2.
3.
4.
5.
6.
Einen Konstruktor
Variablen für den grafischen Algorithmus
Ein Feld mit Namen String[] ProgrammListing - beinhaltet alle Zeilen des Quellcodes
Die Methode void zeichnen () - sie enthält den eigentlichen Algorithmus
Die Methode void reset () - sie setzt alle notwendigen Variablen des Algorithmus zurück
Die Methode String GetVarAusgabe () - gibt eine Zeichenkette mit den aktuellen
Variableninhalten des Algorithmus zurück.
Als Orientierungshilfe soll das folgende Beispiel dienen:
(Konstruktor)
public class LinieHorizontal extends GrafikObjekt
{
int
int
int
int
int
x1;
y1;
x2;
x;
xend;
/* Linien-Koordinaten
*/
/* aktuelle x-Position
/* letzte x-Position
*/
*/
(Variablen)
(Quellcode)
public String[] ProgrammListing = {
"if (x1 < x2)",
"{",
" x = x1;",
" xend = x2;",
"}",
"ELSE",
"{",
" x = x2;",
" xend = x1;",
"};",
...
};
public LinieHorizontal (LiCiVi_GUI Gui, int x1, int y1, int x2)
{
this.Gui = Gui;
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
Verzoegerung = Gui.GetVerzoegerung ();
Gui.SetProgCode (ProgrammListing);
}
Seite 21
(Konstruktor)
Systemprogrammierung
Projekt: LiCiVi
Hinweis: Der Parameter vom Typ LiCiVi_GUI wird für die Grafikausgabe benötigt und muß
immer vorhanden sein!
public void reset_vars ()
{
x = 0;
xend = 0;
}
(Variablen rücksetzen)
String GetVarAusgabe ()
{
String Text;
(Variablen ausgeben)
Text = "x1:
" + x1 + "\n" + "y1:
"x2:
" + x2 + "\n" + "x:
"xend: " + xend;
return (Text);
" + y1 + "\n" +
" + x + "\n" +
}
public void zeichnen ()
{
debug (0);
if (x1 < x2)
{
debug (2);
x = x1;
debug (3);
xend = x2;
}
else
...
}
(Zeichenalgorithmus)
Hinweis: Die debug-Funktion hält den Algorithmus an diesen Stellen an, aktualisiert
Ausgaben und setzt das Programm fort. Der Parameter gibt die Zeile innerhalb des Feldes
ProgrammListing an, die markiert werden soll.
5.2 Erw eiterung der Parameterausw e rtung
Um den oben erwähnten Algorithmus auch auswählen zu können ist, eine entsprechende
Ergänzung in der Klasse LiCiVi_Parameter vorzunehmen. Dort befindet sich ein Feld mit der
folgenden Struktur:
String[] AlgNamen = { "LinieHorizontal",
"LinieVertikal",
"LinieDirekt",
"LinieDirektFU",
"LinieBresenham",
"KreisStandard",
"KreisParameter",
"KreisBresenham"
};
Der Name des neuen grafischen Algorithmus muß in dieses Feld eingefügt werden. Damit
kann der Parameter ausgewertet werden.
Seite 22
Systemprogrammierung
Projekt: LiCiVi
5.3 Au frufen des neuen Algorithmus
Der eigentliche Algorithmus wird in der Hauptklasse LiCiVi instanziert. Die in Kapitel 5.2
genannte Klasse LiCiVi_Paramter wertet die Parameter des Applets aus und gibt diese an die
Hauptklasse zurück. Die Nummer des ausgewählten Algorithmus entspricht exakt der
Position des Algorithmusnamens im genannten Feld (beginnend bei 0).
Die Hauptklasse entscheidet dann über eine switch-Anweisung, welcher Algorithmus
auszuwählen ist. Diese Aufgabe übernimmt die Methode void setGrafObj ().
private void setGrafObj ()
{
/* Algorithmustyp bestimmen (analog Definition in Klasse
* LiCiVi_Parameter
switch (Param.alg)
{
case 0:
/* Horizontale Linie
this.GrafObj = new LinieHorizontal (Gui
Param.x1,
Param.y1,
Param.x2);
Fenstername = "LiCiVi - Linie (horizontal)";
break;
case 1:
/* Vertikale Linie
*/
*/
*/
...
Für weitere Algorithmen können entsprechende Aufrufe in die Abfrage eingefügt werden. Die
Variable Fenstername gibt dabei den Namen des Fensters an, das die grafische
Benutzeroberfläche enthält.
Fachhochschule Fulda, Fachbereich AI, Michael Jahn
Seite 23
Systemprogrammierung
6 A N H AN G
Seite 25
Projekt: LiCiVi
Systemprogrammierung
Projekt: LiCiVi
6.1 LiCiVi -Parametereinstellunge n
LiCiVi kann über Parameter, die innerhalb der HTML-Seite angegeben werden, konfiguriert
werden. Die möglichen Parameter sind in diesem Abschnitt aufgeführt.
Sollten Parameterwerte ungültig sein, werden entsprechende Fehlermeldungen ausgegeben
und Standardwerte verwendet. Bei fremden bzw. falschen Parametern erfolgt keine
Fehlermeldung!
Mögliche Parameter und deren Verwendung
Parametername
Algorithmus
X
Y
R
x1
x2
y1
y2
Bg
Fg
Plot_fg
Plot_bg
GridColor
LogoPicture
Standardwert
LinieHorizontal
10
10
10
0
10
0
20
darkCyan
black
red
white
lightGray
keine Standardeinstellung
Mögliche Werte
siehe Tabelle für Algorithmen
0..200 (ganzzahlig)
0..200 (ganzzahlig)
0..200 (ganzzahlig)
0..200 (ganzzahlig)
0..200 (ganzzahlig)
0..200 (ganzzahlig)
0..200 (ganzzahlig)
siehe Farbtabelle
siehe Farbtabelle
siehe Farbtabelle
siehe Farbtabelle
siehe Farbtabelle
Dateiname des Bildes
Verwendung
Auswahl des grafischen Algorithmus
Koordinate x für Kreise
Koordinate y für Kreise
Koordinate r für Kreise
Koordinate x1 für Linien
Koordinate x2 für Linien
Koordinate y1 für Linien
Koordinate y2 für Linien
Hintergrundfarbe Fenster
Schriftfarbe für Fenster
Zeichenfarbe für Algorithmus
Hintergrundfarbe Zeichenfläche
Farbe für Gitternetz
Einfügen eines Logo's
Algorithmen
Parameterwert
LinieHorizontal
LinieVertikal
LinieDirekt
LinieDirektFU
LinieBresenham
KreisStandard
KreisParameter
KreisBresenham
Bedeutung
Algorithmus für horizontale Linien
Algorithmus für vertikale Linien
Algorithmus für Linien, direkte Methode
Algorithmus für Linien, direkte Methode mit Fallunterscheidung
Algorithmus für Linien, Bresenham
Algorithmus für Kreise, Standardform
Algorithmus für Kreise, Parameterform
Algorithmus für Kreise, Bresenham
Farben
Parameterwert
blue
cyan
darkGray
gray
green
lightGray
magenta
Seite 27
Farbe
blau
cyan
dunkel grau
grau
grün
hell grau
magenta
Systemprogrammierung
orange
pink
red
white
yellow
black
darkBlue
darkCyan
darkGreen
Projekt: LiCiVi
orange
pink
rot
weiß
gelb
schwarz
dunkel blau
dunkel cyan
dunkel grün
Beispiel für die Konfiguration von LiCiVi über die Parameterliste eines Applets:
<HTML>
<HEAD>
<TITLE>LiCiVi</TITLE>
</HEAD>
<BODY>
<APPLET CODE="LiCiVi.class"
<PARAM NAME="Algorithmus"
<PARAM NAME="GridColor"
<PARAM NAME="bg"
<PARAM NAME="fg"
<PARAM NAME="LogoPicture"
</APPLET>
</BODY>
</HTML>
Seite 28
HEIGHT=40 WIDTH=100 NAME="LiCiVi">
VALUE="KreisBresenham">
VALUE="lightGray">
VALUE="darkBlue">
VALUE="white">
VALUE="LiCiVi.gif">
Systemprogrammierung
6.2 LiCiVi -HTML -Seiten
Seite 29
Projekt: LiCiVi
Systemprogrammierung
Projekt: LiCiVi
6.3 Programmdokumentation ( API 1.0)
6.3.1
Klassenbeschreibung
Das Programm besteht aus insgesamt 15 Klassen. Die genauen Funktionen der einzelnen
Klassen und deren Methoden können im Quellcode des Programmes eingesehen werden. Die
folgende kurze tabellarische Auflistung soll einen Gesamtüberblick verschaffen:
Klasse
GrafikObjekt
KreisBresenham
KreisParam
KreisWurzel
LiCiVi
LiCiVi_Fenster
LiCiVi_GUI
LiCiVi_Parameter
LinieBresenham
LinieDirekt
LinieDirektFU
LinieHorizontal
LinieVertikal
Logo
Punktmatrix
6.3.2
Funktion
Abstrakte Klasse für grafische Algorithmen
Kreisalgorithmus nach Bresenham
Kreisalgorithmus in Parameterform
Kreisalgorithmus in Standardform (Wurzel)
Hauptklasse (Hauptprogramm), Ereignisverwaltung
Implementierung eines Fensters mit Farbeinstellung, Ereignisverwaltung
Implementierung einer grafischen Benutzeroberfläche
Parameterauswertung von HTML-Seite
Linienalgorithmus nach Bresenham
Linienalgorithmus nach direkter Methode
Linienalgorithmus nach direkter Methode, Fallunterscheidung
Horizontale Linie
Vertikale Linie
Komponente zur Darstellung eines Bildes
Komponente zur Darstellung einer Punktmatrix mit
Vergrößerungsmöglichkeit
Übersetzung des Programmes
Das Programm ist bereits in Bytecode übersetzt worden und sollte unter jeder JAVA-fähigen
Umgebung laufen.
Das Quellprogramm kann aber mit der folgenden Anweisung erneut übersetzt werden:
javac *.java
Außerdem ist ein "Makefile" dem Verzeichnis beigefügt worden.
Seite 31
Systemprogrammierung
Projekt: LiCiVi
6.4 Programmdokumentation ( API 1.1)
6.4.1
Klassenbeschreibung
Das Programm besteht aus insgesamt 16 Klassen. Die genauen Funktionen der einzelnen
Klassen und deren Methoden können im Quellcode des Programmes eingesehen werden. Die
folgende kurze tabellarische Auflistung soll einen Gesamtüberblick verschaffen:
Klasse
GrafikObjekt
KreisBresenham
KreisParam
KreisWurzel
LiCiVi
LiCiVi_EventHandler
LiCiVi_Fenster
LiCiVi_GUI
LiCiVi_Parameter
LinieBresenham
LinieDirekt
LinieDirektFU
LinieHorizontal
LinieVertikal
Logo
Punktmatrix
6.4.2
Funktion
Abstrakte Klasse für grafische Algorithmen
Kreisalgorithmus nach Bresenham
Kreisalgorithmus in Parameterform
Kreisalgorithmus in Standardform (Wurzel)
Hauptklasse (Hauptprogramm)
Ereignisverwaltung
Implementierung eines Fensters mit Farbeinstellung
Implementierung einer grafischen Benutzeroberfläche
Parameterauswertung von HTML-Seite
Linienalgorithmus nach Bresenham
Linienalgorithmus nach direkter Methode
Linienalgorithmus nach direkter Methode, Fallunterscheidung
Horizontale Linie
Vertikale Linie
Komponente zur Darstellung eines Bildes
Komponente zur Darstellung einer Punktmatrix mit
Vergrößerungsmöglichkeit
Übersetzung des Programmes
Das Programm ist bereits in Bytecode übersetzt worden und sollte unter jeder JAVA-fähigen
Umgebung laufen.
Das Quellprogramm kann aber mit der folgenden Anweisung erneut übersetzt werden:
javac *.java
Außerdem ist ein "Makefile" dem Verzeichnis beigefügt worden.
Seite 33
Systemprogrammierung
Seite 35
Projekt: LiCiVi
Systemprogrammierung
Projekt: LiCiVi
6.5 LiCiVi und HTML -Brow ser, Applet -View er
Die nachfolgende Tabelle zeigt eine Übersicht aller Browser bzw. Applet-Viewer, die mit
LiCiVi getestet wurden.
JAVA Laufzeitumgebungen
Microsoft Internet Explorer 4.0
Microsoft Internet Explorer 3.0
Netscape Navigator 4.0
JAVA Workshop Browser 1.0
JAVA Workshop Browser 1.0
Appletviewer JDK 1.1
Appletviewer JDK 1.1
Appletviewer JDK 1.0
Netscape Navigator 3.0
Seite 37
Plattform, Betriebssystem
Intel Pentium, Windows 95
Intel Pentium, Windows 95
Intel Pentium, Windows 95
Intel Pentium, Windows 95
Sun Sparc, Solaris
Intel Pentium, Windows 95
Intel Pentium, Linux 5.0
Sun Sparc, Solaris
Sun Sparc, Solaris
Status
o.k.
o.k.
o.k.
o.k.
o.k.
o.k.
o.k.
o.k.
Schrittmodus funktioniert nicht
Systemprogrammierung
6.6 Programmierrichtlinien
Seite 39
Projekt: LiCiVi
Systemprogrammierung
6.7 Entw icklungsumgebung
LiCiVi wurde unter der folgenden Systemumgebung entwickelt:
Hardware:
Intel Pentium Rechner, 100MHz, 48 MB Arbeitsspeicher
Grafikauflösung 1280 x 1024, Farbtiefe 8 bit
Betriebssystem:
Windows 95
Programmeditor:
Microsoft J++, Version 1.1
Compiler:
SUN Java Development Kit 1.1
Seite 41
Projekt: LiCiVi
Systemprogrammierung
6.8 Literaturliste
Computer-Grafik
Fellner, Wolf-Dietrich:
BI-Wissenschaftsverlag
JAVA 1.1 in 21 Tagen
Laura Lemay, Charles L. Perkins
SAMS
JAVA in a nutshell: a desktop quick reference
Flanagan, David
JAVA jetzt!
Stephen R. Davis
Microsoft Press
Teilskriptum Graphische Datenverarbeitung, März 1994
Prof. Dr. Werner Heinzel
Fachhochschule Fulda
Skriptum Programmieren in C
Prof. Dr. Siegmar Groß
Fachhochschule Fulda
Skriptum Praxis der Systemprogrammierung
Prof. Dr. Werner Heinzel
Fachhochschule Fulda
Skriptum Systemprogrammierung, Teilbereich Parallele Prozesse
Prof. Dr. Siegmar Groß
Fachhochschule Fulda
Skriptum Systemprogrammierung, Teilbereich Graphische Systeme
Prof. Dr. Siegmar Groß
Fachhochschule Fulda
Skriptum Software Engineering, Entwurfsverfahren
Prof. Dr. Wolfgang Ehrenberger
Fachhochschule Fulda
Seite 43
Projekt: LiCiVi
Systemprogrammierung
6.9 GNU General Public License
Seite 45
Projekt: LiCiVi
Herunterladen