Object-oriented programming languages and tools constitute an emerging software technology that addresses the development of open systems in two important ways: 1. as an organizing principle;
2. as a paradigm for reuse. In the first case, one may view an object-oriented application as a collection of collaborating objects. The fact that each object properly encapsulates both the data and the corresponding
behaviour of some application entity, and that one may only interact with this entity through a well-defined interface means that reliability in the face of software modifications is improved, as long as client–server interfaces are respected. In the second case, one may view applications as compositions of both predefined and specialized software components. Application classes inherit interfaces and some core behaviour and representation from predefined abstract classes. Interactions within an application obey the protocols
defined in the generic design. Inheritance is the principle mechanism for sharing and reusing generic designs within object-oriented applications. Despite these two significant advantages of object-oriented development, it is still true that present-day object-oriented languages emphasize programming over composition, that is, they emphasize the first view of applications to the detriment of the second. In
general, it is not possible to reuse classes without programming new ones — one cannot simply compose object classes to obtain new classes in the way that one can compose * The discussion took place during September 1994 in the newsgroup comp.object, under the subject heading “Objects vs Components.”
8 Component-Oriented Software Technology functions to obtain new functions. Furthermore, one is either forced to define a given component as a class, whether or not the object paradigm is an appropriate one, or, if other kinds of components are supported, the list is typically ad hoc (for example, mixins, macros,
modules, templates).
Leave a Reply