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
- B. Stroustrup -- What is "Object-Oriented Programming"?
- A. Snyder -- Encapsulation and inheritance in object-oriented programming languages
- K. Beck and W. Cunningham -- A Laboratory for Teaching Object-Oriented Thinking
- G. Booch -- Object-Oriented Development
- D. Halbert and P. O'Brien -- Using Types and Inheritance in Object-Oriented Programming
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
- P. Wegner -- Dimensions of Object-Based Language Design
- P. Cointe -- Metaclasses are First Class: the ObjVlisp Model
- D. Ungar and R. Smith -- Self: The power of simplicity
- R. Helm et al. -- Contracts: Specifying Behavioral Compositions in Object-Oriented 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.