Die getroffenen architektonischen Entscheidungen spiegeln sich in der abstrakten Deklaration der Schichten im Header cvtk.h wider . Es gilt, eine Schnittstelle zu den Schichten auf konzeptioneller Ebene zu definieren. In den Deklarationen drückt sich die Aufgabe der Schichten anhand der erhaltenen und zurückzugebenden Datenstrukturen aus. Hier seien exemplarisch die Deklarationen der ersten beiden Schichten aufgeführt:
/* interface to the segmenation layer */ class CSegmentationStrategy { public: virtual ~CSegmentationStrategy() {}; virtual CRegionMap* segment(const CRGBMap*) =0; virtual CRegionMap* segment(const CRGBMap*, CRegionMap*)=0; }; /* interface to the chaincoding layer */ class CChainCodingStrategy { public: virtual ~CChainCodingStrategy() {}; virtual CRegionList* codeRegions(const CRegionMap*) =0; virtual CRegionList* codeRegions(const CRegionMap*, CRegionList*) =0; };Benutzer sollen in der Regel diese Sicht auf die Bibliothek verwenden, wenn es darum geht, eine eigene, individuelle Analysekette aufzubauen.
Es wäre sauber gewesen, auch die Datenstrukturen abstrakt zu deklarieren. Solche abstrakten Datentypen hätten die verwendeten Konzepte für die Klienten völlig von der Implementierung getrennt. Leider ist dies aus Effizienzgründen nicht möglich. Der Zugriff auf die Bildmatrix via virtuell deklarierter Methoden wäre um ein Vielfaches langsamer als der Zugriff mit Hilfe inline deklarierter Methoden.
Nun gilt die Aufmerksamkeit aber den einzelnen Schichten.