This thesis is meant to be read sequentially—later chapters build on the material in chapters preceding them.

Chapter 1: Confronting the software crisis discusses the software crisis debate of the late 1960s, and the role of software components as a possible remedy. Components, as they are thought of today, are discussed, and a definition is settled on. Object-oriented programming in the component context is also covered, as is the role of components in enterprise computing.

Chapter 2: Realizing software components examines the technical means used to realize components more concretely. In so doing, it categorizes software components into three distinct categories, and introduces most of the concepts associated with component technology.

Chapter 3: Demystifying dynamic dispatch explores the technology behind dynamic dispatch. This concept is of paramount importance to component technology, as it makes it possible to program to a specification, and defer binding to an implementation until runtime. A simple object model supporting dynamic dispatch is built in the C programming language over the course of this chapter.

Chapter 4: Refining the object model builds on the material in Chapter 3, and introduces more sophisticated memory management, better support for interfaces, as well as provisions for scripting languages. Constructs left out from the object model are discussed, as are the additions one could make to this object model to create a full-fledged component model consistent with the definitions of Chapter 1.

Chapter 5: Ways of the industry covers the major component-related technologies that have appeared in industry, technologies that have shaped our notion of what a software component is. Topics include Microsoft’s Visual Basic, COM and .NET, Embarcadero’s Delphi, OMG’s CORBA, as well as OSGi for Java.

Chapter 6: The (Sony) Ericsson way introduces the component technology developed at ST-Ericsson and Sony Ericsson for use in their embedded systems. The technology created at Sony Ericsson for inter-process communication and interoperability between Java and native code is discussed at some length.

Chapter 7: Implementing interception expands on the role of declarative attributes in component technology, which are used to configure services. Implementations in industry are discussed, followed by a presentation of an execution tracing facility I implemented at Sony Ericsson, configured declaratively. Provisions for generating UML interaction sequence diagrams from traces are examined, before a discussion of opportunities for future work.