3.1 Klassenstruktur
Unser Entwurf sah folgende Klassenstruktur vor:
- Eine Klasse MathComm, die für das Senden und Empfangen von Formeln verantwortlich ist.
- Eine Klasse MathCanvas (erbt von java.awt.Canvas), die die Formeln darstellt.
- Eine Klasse MathParser, die den eingegebenen Text in eine Objektstruktur umwandelt.
- Eine Klasse MathObject, aus deren Objekten diese Objektstruktur aufgebaut ist.
- Eine Klasse MathFont, die eine Zuordnung von Schriftarten zu Objekttypen ermöglicht.
- Eine Klasse MathApplet (erbt von java.applet.Applet), die die nötigen Bedienelemente für die Eingabe bereitstellt und die Integration der Komponenten in eine HTML-Seite ermöglicht.
Von der abstrakten Klasse MathObject werden dann verschiedene Klassen abgeleitet, die jeweils eine bestimmte Darstellungsform übernehmen.
Dies sind sowohl die in der Grammatik definierten Einheiten, wie auch Objekte, diezur Darstellung spezieller Funktionen benötigt werden (MathRoot und MathUnderOver).
Zur Zeit sind definiert:
MathEmpty |
keine Darstellung |
MathRow |
Sequenz von MathObjects |
MathText |
Text |
MathBraces |
Klammerung |
MathFraction |
Bruchstrich |
MathSubSup |
Hoch- / Tiefstellung |
MathRoot |
Wurzel |
MathUnderOver |
Text unter / über der normalen Zeile |
Von MathText sind wiederum Klassen abgeleitet, die Texte auf verschiedene Weise darstellen:
MathText |
Normaler Text (in doppelten Anführungszeichen) |
MathSymbol |
Symbole |
MathNumber |
Zahlen |
MathOperator |
Operatoren (+, -, *) |
MathIdentifier |
Sonstiger Text (x, y) |
3.2 Schnittstellen
- MathCanvas
- MathCanvas()
- erzeugt ein neues Objekt.
- MathObject addLine(String)
- erstellt eine MathObject-Struktur aus dem Parameter-String, zeigt diese an und liefert sie zurück.
- MathComm
- MathComm(MathCanvas)
- übergibt das Canvas, das über ankommende Formeln unterrichtet werden soll
- void send(MathObject)
- sendet eine Formel zum Kommunikationspartner
- MathParser (wird nicht instantiiert)
- MathObject parse(String)
- erstellt eine MathObject-Struktur aus dem Parameter-String
- String encodeEntity(char)
- Ermittelt die Entität für ein Symbol
- String encodeFunction(Class)
- Ermittelt die Funktion, die einer Klasse zugeordnet ist
- MathFont
- MathFont(Graphics)
- Erzeugt ein neues Objekt, das Fonts für den angegebenen Graphikkontext bereitstellt.
- void setFont(int, Font)
- Setzt die Schriftart für den angegebenen Texttyp.
- Font getFont(int, int)
- Liefert das passende Font-Objekt für Texttyp und Größe.
- MathObject
- public MathObject()
-
- final void append(MathObject node)
- Fügt einen neuen Knoten in der gleichen Hierarchieebene ein.
- final void addChild(MathObject node)
- Fügt einen neuen Knoten in der untergeordneten Hierarchieebene ein.
- final MathObject getNext()
- Liefert den nächsten Knoten auf der Hierarchieebene.
- final MathObject getNext(int n)
- Liefert den n-ten folgenden Knoten auf der Hierarchieebene.
- final boolean isLast()
- Liefert true, falls der Knoten keinen Nachfolger hat.
- final MathObject getChild()
- Liefert den ersten untergeordneten Knoten.
- final MathObject getChild(int n)
- Liefert den n-ten untergeordneten Knoten.
- final void setLevel(int level)
- Setzt die zu verwendende Schriftgröße.
- final int getLevel()
- Gibt die aktuelle Schriftgröße zurück.
- final int height()
- Gibt die Höhe des Objekts zurück.
- final int width()
- Gibt die Breite des Objekts zurück.
- final int center()
- Gibt den Abstand von der Oberkante zur Mittellinie des Objekts zurück.
- boolean isEmpty()
- Liefert true, falls der Knoten vom Typ MathEmpty ist.
- int getParamCount()
- Gibt die Anzahl der erwarteten Unterknoten zurück
- abstract void draw(int x, int y, Graphics g)
- Zeichnet das Objekt an den Koordinaten (x,y) auf dem Graphikkontext g.
- abstract String toString()
- Erzeugt eine von MathParser erkennbare Textrepräsentation des Knotens incl. seiner Unterknoten.
- final MathObject requestCompact()
protected MathObject compact()
- requestCompact traversiert den Baum und ruft für jeden Knoten compact() auf. compact() prüft, ob sich der Teilbaum zusammenfassen läßt (z. B. überflüssige Klammern oder MathRows mit nur einem Objekt). Beide liefern jeweils den optimierten Teilbaum zurück.
- final void notifyFontChange(MathFont font)
protected void levelChanged()
protected void fontChanged()
- notifyFontChange() traversiert den Baum und ruft für jeden Knoten zunächst levelChanged() und dann fontChanged() auf. In levelChanged() werden die Schriftgrößen der Unterobjekte angepaßt, in fontChanged() wird der neue Font bekanntgegeben und aus dem schon bekannten Level die Objektgröße neu berechnet.