Der objektorientierte Framework-Entwurf zählt zu den anspruchsvollsten Entwurfsaufgaben. Im Gegensatz zu (Klassen-)Bibliotheken, für die eine ,,Codewiederverwendung`` im Vordergrund steht, muss für ein Framework die ,,Entwurfswiederverwendung`` für bestimmte Klassen von Software gewährleistet sein (vgl. Gamma et al., 1996, S. 37).
Im Falle von YACS stellt sich dies übersichtlich dar: Neben einer einfachen Benutzung durch den Anwender bzw. Wissensingenieur auf der einen Seite, muss es innerhalb von YACS möglich sein, neue Lösungskomponenten für Constraint-Probleme zu entwickeln. Die Schnittstelle hierfür ist, wie im Folgenden ersichtlich wird, denkbar schlank gehalten. Jeder Constraint-Solver muss eine abstrakte Solver-Klasse mit einer aufrufenden Methode implementieren. Dieser Methode werden zur Laufzeit die benötigten Informationen zu einem bestimmten Teilproblem übergeben. Der Constraint-Solver arbeitet als Black Box und liefert seine Ergebnisse, je nach Kategorie (Preprozessing, Konsistenzherstellung, Lösungssuche), an den aufrufenden Constraint-Manager bzw. an das Teilproblem.
Die Domäneninformationen zu einem bestimmten Problem sind wiederum durch generische (abstrakte) Framework-Klassen gekapselt. Das YACS-Framework ist damit sowohl in Bezug auf die Constraint-Solver als auch auf die zu verarbeitenden Domänen erweiterbar. Neben reellwertigen Intervalldomänen sind Domänenklassen für finite Domänen mit Integer-Werten und für symbolische, d.h. stringbasierte, Domänen implementiert.7.6 Dabei ist festzuhalten, dass sich durch die implementierten FD-Solver aufgrund der Kapselung durch die Framework-Klassen, sowohl numerische als auch symbolische Domänen verarbeiten lassen.
Durch YACS vorgegeben ist neben den zu implementierenden Klassen lediglich die Ausführungskontrolle. Dies entspricht ebenfalls der klassischen Definition eines Frameworks (vgl. Gamma et al., 1996, S. 37). In Bezug auf YACS bezeichnet Ausführungskontrolle die Steuerung des phasenweisen Lösungsprozesses, während dessen die in den Strategien definierten Lösungsverfahren auf die jeweiligen Teilprobleme angewendet werden (vgl. Abschnitt 6.4.1).
Im Folgenden wird der Softwareentwurf für das YACS-Framework vorgestellt. Zur Dokumentation werden Diagramme in der Modellierungssprache UML verwendet (vgl. Fowler und Scott, 2000).7.7 Für die Implementierung von YACS wurde auf eine Reihe von Design Patterns bzw. ,,Entwurfsmuster`` zurückgegriffen (vgl. Gamma et al., 1996), auf die an den jeweiligen Stellen eingegangen wird. Eine ausführliche Beschreibung der angesprochenen Klassen und insbesondere der darin enthaltenen Methoden befindet sich in der API-Dokumentation in Anhang E ff.