Previous | UML Classes | Table of Contents | UML Packages | Next |
The Components package specifies a set of constructs that can be used to define software systems of arbitrary size and complexity.
In particular, the package specifies a component as a modular unit with well-defined interfaces that is replaceable within
its environment. The component concept addresses the area of component-based development and component-based system structuring,
where a component is modeled throughout the development life cycle and successively refined into deployment and run-time.
An important aspect of component-based development is the reuse of previously constructed components. A component can always
be considered an autonomous unit within a system or subsystem. It has one or more provided and/or required interfaces (potentially
exposed via ports), and its internals are hidden and inaccessible other than as provided by its interfaces. Although it may
be dependent on other elements in terms of interfaces that are required, a component is encapsulated and its dependencies
are designed such that it can be treated as independently as possible. As a result, components and subsystems can be flexibly
reused and replaced by connecting (wiring) them together via their provided and required interfaces. The aspects of autonomy
and reuse also extend to components at deployment time. The artifacts that implement component are intended to be capable
of being deployed and re-deployed independently, for instance to update an existing system.
The Components package supports the specification of both logical components (e.g., business components, process components)
and physical components (e.g., EJB components, CORBA components, COM+ and .NET components, WSDL components, etc.), along with
the artifacts that implement them and the nodes on which they are deployed and executed. It is anticipated that profiles based
around components will be developed for specific component technologies and associated hardware and software environments.
The BasicComponents package focuses on defining a component as an executable element in a system. It defines the concept of
a component as a specialized class that has an external specification in the form of one or more provided and required interfaces,
and an internal implementation consisting of one or more classifiers that realize its behavior. In addition, the BasicComponents
package defines specialized connectors for ‘wiring’ components together based on interface compatibility.
The PackagingComponents package focuses on defining a component as a coherent group of elements as part of the development
process. It extends the concept of a basic component to formalize the aspects of a component as a ‘building block’ that may
own and import a (potentially large) set of model elements.