In recent years, object-oriented programming has emerged as the dominant computerprogramming style, and object-oriented languages such as C++ and Java enjoy wide use in academia andindustry. This text explores the formal underpinnings of object-oriented languages to help thereader understand the fundamental concepts of these languages and the design decisions behindthem.The text begins by analyzing existing object-oriented languages, paying special attention totheir type systems and impediments to expressiveness. It then examines two key subtypesand subclasses. After a brief introduction to the lambda calculus, it presents a prototypicalobject-oriented language, SOOL, with a simple type system similar to those of class-basedobject-oriented languages in common use. The text offers proof that the type system is sound byshowing that the semantics preserves typing information. It concludes with a discussion of desirablefeatures, such as parametric polymorphism and a MyType construct, that are not yet included in moststatically typed object-oriented languages.
This is a survey of object-oriented programming languages (like Java and Eiffel but not like UW's Cecil). It is surprisingly hard to make the polymorphism facility in the language both useful and safe (for example, Eiffel's, as originally formulated, is useful but unsafe; the problem was realized late in the game). Bruce shows how to do it, and he has written papers on adding such a facility to Java, but to me it seems contrived.