1.5 Beyond object-orientation?

Object-oriented programming has been criticized for failing to enable code reuse, and as a result for failing to establish significant “object” markets (Sullivan 2001; Pfister and Szyperski 1996). Component technology is designed to overcome these perceived shortcomings, and is by its proponents considered to be not only an evolution of object-oriented programming, but a successor paradigm in the Kuhnian sense.1 Heineman and Councill (2001c) elaborate:

We believe that object-oriented [...] analysis, design, and programming were over-hyped and over-sold. Early courses and seminars in [object-orientation] described the technology as an elixir for all that was wrong with years of poor analyses, design, and programming practices. It didn’t take long for information technology [...] departments and many independent software vendors [...] to realize that [object-orientation] was a very expensive methodology that ironically had been sold to senior management as a way to save money.

In 1994, Jon Udell wrote of “object technology” in the imperfect tense:

Object technology failed to deliver on the promise of reuse. [...] What role will object-oriented programming play in the component-software revolution that’s now finally under way?

Indeed, distributing and selling classes in binary form has traditionally been complicated by the lack of standards—even different implementations of some languages, such as C++, are binary incompatible. Distributing classes as source code is often not desirable for vendors that wish to maintain some modicum of secrecy. Obviously, lack of interoperability hampers adoption. What component technology brings to the table is the promise of standards that make reuse possible across different programming languages and vendors (Sullivan 2001). Indeed, component models typically standardize objects in addition to components.

Object-orientation gives developers the tools to define entities that encapsulate and operate on their own state. Components provide a higher-level abstraction, much like a library or a module, as the containers of classes. Hence, object-orientation and “component-orientation” are orthogonal and complementary concepts.

Footnotes

  1. Thomas Kuhn argued that science does not progress linearly, but rather in transformational, revolutionary shifts (Chalmers 1999).