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

7.5.1 Constraints

Der Constraint-Parser von YACS erzeugt Instanzen von Spezialisierungen der abstrakten Klasse Expression. Die Unterklassen UnaryOperator und BinaryOperator von Expression beinhalten selbst wieder eine bzw. zwei Instanzen eines Nachfolgers von Expression, wodurch eine rekursive Klassenstruktur zur Repräsentation von Binärbäumen entsteht (siehe Abbildung 7.3). Die Klassenstruktur entspricht damit dem Entwurfsmuster ,,Kompositum`` (engl. composite): Objekte lassen sich zu Baumstrukturen zusammenfügen, wobei sowohl einzelne Objekte als auch Kompositionen von Objekten einheitlich behandelt werden können (vgl. Gamma et al., 1996, S. 239 ff.).

Abbildung 7.3: Repräsentation von Constraint-Ausdrücken durch Binärbäume
\begin{figure}\centering
\includegraphics[scale=0.7]{images/implementierung_expression}\ifx\pdfoutput\undefined
\fi
\end{figure}

Mit einem auf diese Weise definierten Binärbaum lässt sich ein primitiver Constraint-Ausdruck beschreiben. Die Klasse BinaryOperator stellt die Verzweigungen in unterschiedliche Äste durch binäre Operatoren dar ($=$, $\neq$, $\leq$, $\geq$, $<$, $>$, $+$, $-$, $*$, $/$). Durch die Klasse UnaryOperator werden einstellige Operatoren (derzeit ausschließlich Negation), durch Constant fixe Konstanten und durch die Klasse Variable entsprechend Variablen mit einer flexiblen Belegung und einer zugehörigen Wertedomäne repräsentiert.

Neben einzelnen, primitiven Constraints lassen sich mit Hilfe der Klasse Expression und deren Unterklassen ganze Teilprobleme durch eine Konjunktion von primitiven Constraints beschreiben. Der zusätzliche binäre Operator, der innerhalb des Baums eine solche Konjunktion beschreibt, ist das ,,;``. Derart aneinandergehängte Constraint-Ausdrücke bzw. Constraint-Bäume werden innerhalb der Constraint-Netze von YACS genutzt, um das zugehörige Teilproblem zu repräsentieren.

Da manche Constraint-Lösungsalgorithmen die Duplizierung von Variablen, primitiven Constraints oder ganzen Teilproblemen voraussetzen (für echtes call-by-value), existiert in Expression die Methode cloneDeep(). Diese Methode gibt ein vollständig dupliziertes Objekt von seiner eigenen Instanz zurück. Im Gegensatz zur üblichen clone()-Methode werden sämtliche darin referenzierten Objekte ebenfalls dupliziert.


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