A component is:
- a binary implementation of functionality
- contractually specified
- a unit of independent deployment
- subject to third party composition
- conformant with a component model
Added to this list is the idea that a component provides and/or
uses services through contractually specified interfaces. Components
are typically described as processes, but could be entirely independent
threads running in one process or Java Virtual Machine. Components
may be nested like systems. Units of hardware may be represented
by software components.
When developing a component, it is easier to think of it as an
object that implements interfaces. A key requirement is that interfaces
be defined independently of the implementation. This independence
allows software to be used based on the services it provides,
rather than the details of how its internal logic works.
By separating the service definition from the component definition,
developers are free to implement services in any way they want.
This also allows for flexibility in reuse of existing components.
In general, developers should do the following when defining components:
- Try to find existing components that implement the services
within their constraints.
- Avoid grouping logically independent services into a single
component.
- Draw an Architectural Definition Language (ADL) diagram with
the services and components in the solution.
Software development on the Openwings architecture is a little
different then software development on other systems. There are
two roles:
- Component Developer - an individual that writes components
that provide or use services
- Systems Engineer - an individual that writes systems designs
for distributed systems software, Architecture Definition Language
(ADL), and interfaces
This tutorial trail is focused on the role of the Component Developer.
The Systems Engineer will also benefit from the information provided
in this tutorial, but may wish to skip some sections to get a
higher level idea of the system.
Finally, in designing services and developing components, the
following modeling techniques are recommended:
Next: The Development
Environment