Enterprise Software and Component-Based Software
When the object-oriented software approach burst onto the software development scene, it was widely expected that adoption of object-oriented software development techniques would lead to reuse, but this hope was only partially realized. One of the reasons for this partial success was the fine granularity of the objects and the underlying difficulty of achieving large-scale reuse at that level due to the more strongly coupled nature of fine-grained objects.
Software components are designed to address this precise issue. Unlike an object, a software component is designed at a much higher level of abstraction and provides a complete function or a service. Software components are more loosely coupled. Using interfaces the components have deliberately exposed, they can be combined together rapidly to build larger applications quickly and are more cost-effective.
Component-based software, of course, requires that components from different sources be compatible. That is, an underlying common understanding, a contract if you will, is required on which the components are to be developed.
Various component models have been developed over the years to provide the common understanding. Microsoft's ActiveX, later COM, and Sun Microsystem's applets and JavaBeans are examples of such component models.
Distributed component models have also been developed to address component-based software in the context of distributed enterprise software and associated challenges discussed earlier. Such component models essentially provide an "operating system" for distributed and component-based software development. Examples of these include DCOM, Microsoft DNA (now Microsoft.NET), and Sun Microsystem's Enterprise JavaBeans (EJB), which is part of the Java 2 Platform, Enterprise Edition (J2EE).