3. Entwurf Zurück | Index | Weiter


nach oben

3.1 Klassenstruktur

Unser Entwurf sah folgende Klassenstruktur vor:

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)
nach oben

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.
nach oben

  Zurück | Index | Weiter