Component-based software architecture divides a problem into subproblems each associated with component partitions. The interfaces of the components play important roles in the component-based design. The main motivation behind component-based design is component reusability: a component encapsulates the functionality and behaviors of a software element into a reusable and self-deployable binary unit. Designs can make use of existing reusable commercial off-the-shelf (COTS) components or ones developed in-house, and they may produce reusable components for future reuse. This increases overall system reliability since the reliability of each individual component enhances the reliability of the whole system via reuse. | Software design and architecture Lecture notes Chapter 15