Landmark papers

Instructor's Guide


introduction themes paradigms lifecycle trends summary Q/A literature
The material presented in this book was originally based on a number of landmark papers. I consider these papers still as being important, since they originally expressed some important notion or concept. Moreover, most of these papers are often referred to in other papers and literature on OOP. Naturally, other material has been used as well.

Part I: Designing Object-Oriented Systems

In this part an introduction is given to object-oriented programming in C++ based on  [St88]. An updated version of this paper can be found in  [St91]. As additional literature on C++ I have also consulted  [Coplien92], which provides an excellent motivation for the use of particular idioms in C++.  [Snyder86] contributes to the field of OOP by showing the importance of protection mechanisms, especially in the context of inheritance. Object-oriented design is treated on the basis of  [BC89] and  [Booch86]. Many of the insights with respect to types and inheritance can be found in  [HOB87], which also presents valid arguments for using types as the principle for structuring a design.

Part I: Designing Object-Oriented Systems


slide: Part I: Designing Object-Oriented Systems

Also, we will discuss contract theory proposed originally by  [Meyer88]. In this section the focus will be primarily on the software engineering implications of contract theory. A treatment of the formal aspects is postponed until part III. In addition, I will look at the validation and testing of object-oriented programs, and explore some possible metrics for OOP.

Part II: Object-Oriented Languages and Systems

Our discussion of object-oriented languages will take the well-known paper by  [Wegner87] as its starting point. An overview will be given of currently existing object-oriented programming languages and their major design goals. Next, I will explain the distinction between delegation and inheritance, and discuss the notion of classless languages as, for example, exemplified in  [US87]. Further, I will discuss an alternative to the meta-programming facilities offered by Smalltalk, and describe a general meta-level reflective architecture of object-oriented languages based on  [Cointe87].

Part II: Object-Oriented Languages and Systems


slide: Part II: Object-Oriented Languages and Systems

I will also discuss in detail the problems encountered when extending an object-oriented language with concurrency. An overview will be given of a number of concurrent extensions of C++. Finally, the issues involved in specifying the cooperation between a collection of objects are explored. This discussion has been inspired by  [HHG90], who present a formalism (also called contracts) to describe the interaction between objects. However, I will concentrate primarily on techniques with which to model the interaction and dependencies between objects. Of particular relevance in this respect is the event-driven computation model presented by  [Henderson93], which will be illustrated by an example.

Part III: Foundations of Object-Oriented Modeling

In part III we study the theoretical foundations of object-oriented modeling. Our starting point will be the treatment of an algebraic approach to abstract data types and a discussion of the divergence between the realization of abstract data types in modular and object-oriented languages, based on  [Cook90].

Part III: Foundations of Object-Oriented Modeling

  • W. Cook -- Object-Oriented Programming versus Abstract Data Types
  • P. Wegner and S. Zdonik -- Inheritance as an incremental modification mechanism
  • L. Cardelli and P. Wegner -- On understanding types, data abstraction and polymorphism
  • W. Cook et al. -- Inheritance is not subtyping

slide: Part III: Foundations of Object-Oriented Modeling

Then, I will clarify the distinction between classes and types, following  [WZ88] and, following the same source, we will investigate the implication of this distinction on the use of inheritance. Further, a type calculus derived from  [Pierce93], but originally based on  [CW85], is presented to explain in a formal setting the mechanisms of encapsulation and inheritance. See slide 1-III. In addition, I will sketch an outline of the proof-theory needed to establish the correctness of specifications obtained by the modification of a given type by means of inheritance.

Part IV: Object-Oriented Application Frameworks

Taking  [Meyer90] as a starting point, we will discuss the issues involved in the development of object-oriented libraries. Further, I will briefly describe a number of the libraries and toolkits available for C++.

Part IV: Object-Oriented Application Frameworks

  • B. Meyer -- Lessons from the design of the Eiffel Libraries
  • N. Meyrowitz -- Intermedia: The Architecture and Construction of an Object-Oriented Hypermedia System and Applications Framework

slide: Part IV: Object-Oriented Application Frameworks

Hypermedia systems represent an area in which OOP has very successfully been applied. Also, it has induced interesting research topics for OOP. To conclude the book, I will discuss some of the recent (OOP-related) developments in hypermedia research, and attempt some reflections on the future of OOP.