Component is a modular, deployable, replaceable part of a system that encapsulates implementation and exposes a set of interfaces.
Object-oriented view is that component contains a set of collaborating classes.
1. Each elaborated class includes all attributes and operations relevant to its implementation.
2. All interfaces communication and collaboration with other design classes are also defined.
3. Analysis classes and infrastructure classes serve as the basis for object-oriented elaboration.
Traditional view is that a component (or module) reside in the software and serves one of three roles.
1. Control components coordinate invocation of all other problem domain components.
2. Problem domain components implement a function required by the customer
3. Infrastructure components are responsible for functions needed to support the processing required in a domain application.
4. The analysis model data flow diagram is mapped into a module hierarchy as the starting point for the component derivation.
Conducting Component-Level Design
1. Identify all design classes that correspond to the problem domain.
2. Identify all design classes that correspond to the infrastructure domain.
3. Elaborate all design classes that are not acquired as reusable components.
a. Specify message details when classes or components collaborate.
b. Identify appropriate interfaces for each component.
c. Elaborate attributes and define data types and data structures required to implement them.
d. Describe processing flow within each operation in detail.
4. Identify persistent data sources (databases and files) and identify the classes required to manage them.
5. Develop and elaborate behavioral representations for each class or component.
6. Elaborate deployment diagrams to provide additional implementation detail.
7. Refactor every component-level diagram representation and consider alternatives.