The days of large, monolithic software systems are fast moving into oblivion. The pace of software development becomes aggressive with development cycles reduced drastically. The current trend favors a short-term development process where large and complex applications are being built using a series of smaller parts, referred to as components. Component technology is the next step in the evolution of software design and development. It is strongly associated with Object technology, though this association is not necessarily an accurate one. Here is an explanation of what is all about components and their usefulness. The area of component technology has spawned a slew of new buzz-words, some of them are confusing.
Future systems shall be developed by assembling co-operative software units. These units need not necessarily originate from the same vendor, but will conform to a standard interface for units offering their respective functionality. Assembly of such units will be aided by use of tools which will extract self descriptive information from these units. Delivery of such an assembled system will involve the deployment of these units configured appropriately. These units may be delivered on any platform. Such software units are known as components.
Components are typically business objects that have predefined and reusable behaviors. Implementation detail is hidden in the interfaces, which isolate and encapsulate a set of functionality. Interfaces are the means by which components connect. An interface is a set of named operations that can be invoked by clients. More importantly, well-defined interfaces define the component's entry points, and a component's accessibility is done only via its interface. In a component-based approach, providers and clients communicate via the specification of the interface, which becomes the mediating middle that lets the two parties collaborate and work together.
In summarizing, we have the following:
- A component is an independent, application-level software unit that is developed for a specific purpose and not for a specific application. Components are self-contained, pluggable abstract data types. They are of large grained entities. Component assembly (application development) is concerned with high level domain experts rather than programmers. Programmers will be responsible for component construction and the fabrication of components for use would be accomplished by component assemblers.
- Components are accessed through well-defined interfaces. A component's interface serve as the access points to its functionality. These interfaces may be implemented by objects internal to the component, if the component developer so desires. But interfaces may be implemented by a non-OO language.
- Only a single instance of a component exist per system. If there are more than one client accessing the functionality being provided by the component, different object references may be distributed to those clients. An object reference is a handle to an object in a component which implements an interface.
- Component comprised systems will typically feature components from different vendors. Components will be interoperable by conformance to industry standard interfaces
- Components are platform-independent
- Components will be encapsulated and modular. Their internals may utilize inheritance for implementation reasons. This fact will remain as an implementation detail, not visible to the component clients. Components can not be extended by inheritance.