Concrete components are one of the building blocks that are provided by the OBS Framework. The term concrete component is used to designate an entity that possesses the following properties:
- it can be compiled as a stand-alone unit
- it exposes one or more interfaces
- it provides an implementation for the interfaces it exposes
- it is seen by its clients only through the interfaces it exposes
The components provided by the OBS Framework are of two types: core components and default components. The core components encapsulate invariant behaviour that is not intended to be modified by applications in the framework domain. The default components instead offer default implementations for some of the abstract interfaces in the framework. They encapsulate behaviour that may be useful to many applications "as is" but that applications may also want to tailor to their needs. At architectural level, core components are mapped to classes that cannot be (or are not intended to be) further extended. Default components are instead be mapped to extensible classes. In the case of the OBS Framework where C++ is used as the implementation language, core components are mapped to classes whose methods are non-virtual whereas default components are mapped to classes with one or more virtual methods. Note that this implies that, at architectural level, the same C++ class can be seen either as an implementation of one of the framework abstract interfaces or as a default component.
Framework components often implement concepts defined in the domain dictionary.