A component is a software object,
meant to interact with other components, encapsulating certain
functionality or a set of functionalities. A component has a clearly
defined interface and conforms to a prescribed behavior common to all
components within an architecture. Multiple components may be composed
to build other components