next up previous contents index
Nächste Seite: 7.6 Implementierte Constraint-Lösungsverfahren Aufwärts: 7.5 Repräsentation von Constraint-Ausdrücken Vorherige Seite: 7.5.2 Wertebereiche   Inhalt   Index

7.5.3 Elemente

In Abbildung 7.5 sind die abstrakte Klasse DomainElement und deren zurzeit existierenden Unterklassen zu sehen. Die Unterklassen von DomainElement kapseln jeweils die Elemente der Wertebereiche von Constraint-Variablen (Klasse Domain, vgl. Abschnitt 7.5.2). Die Klasse DomainElement und ihre Unterklassen entsprechen daher dem Entwurfsmuster ,,Adapter``, welches auch unter dem Namen ,,Umwickler`` (engl. wrapper) bekannt ist (vgl. Gamma et al., 1996, S. 171 ff.). Derzeit existieren drei Unterklassen von DomainElement:

Abbildung 7.5: Kapselung der Elemente eines Wertebereichs
\begin{figure}\centering
\includegraphics[scale=0.7]{images/implementierung_domainelement}\ifx\pdfoutput\undefined
\fi
\end{figure}

Da von YACS bisher ausschließlich konvexe Intervalle unterstützt werden, lässt sich eine Instanz der Klasse IntervalDomain (vgl. Abschnitt 7.5.2) jeweils nur mit einem einzigen IntervalDomainElement belegen.

Im Gegensatz zur Klasse Domain muss die Klasse DomainElement abstrakt deklariert sein, da in ihr Berechnungs- und Vergleichsoperatoren für die Elemente der jeweiligen Domäne definiert werden, die von den Unterklassen entsprechend implementiert werden müssen. Die Operatoren für die Werte von Integer-Objekten innerhalb von NumericFDDomainElement werden von Java zur Verfügung gestellt. Für Berechnungen und Vergleiche mit RealInterval-Objekten innerhalb von IntervalDomainElement wird die in der Bibliothek IAMath implementierte Intervallarithmetik eingesetzt. Während Berechnungen und Vergleiche für numerische finite und Intervalldomänen daher unproblematisch sind, liefern für symbolische finite Domänen bisher ausschließlich der Gleichheits- und Ungleichheitsoperator innerhalb von SymbolicFDDomainElement sinnvolle Ergebnisse in Form von String-Vergleichen.

Da sich die Instanzen der Unterklassen von DomainElement innerhalb von Domain bzw. den Unterklassen von Domain befinden, benötigt DomainElement ebenfalls eine Methode cloneDeep(), um ggf. eine vollständige Duplizierung des enthaltenden, übergeordneten Objekts sicherstellen zu können (vgl. Abschnitt 7.5.1 und Abschnitt 7.5.2).


next up previous contents index
Nächste Seite: 7.6 Implementierte Constraint-Lösungsverfahren Aufwärts: 7.5 Repräsentation von Constraint-Ausdrücken Vorherige Seite: 7.5.2 Wertebereiche   Inhalt   Index