The typesetting looks {horrible, unusual, great}, not at all like LaTeX. What program did you use? What fonts did you use?

Incredible but true. This book was not written in TeX, LaTeX, Troff, Scribe, or any other "mark-up" (also known as "muck-up") language. It was not even written under Unix. It was written without ever pressing the Control key and without using Carpal-Tunnel-Syndrome-Inducing editors. It did not require the execution of a single Intel instruction, or of a single line of Microsoft code. Impossible, you say? Yet, it exists.

The book was typeset by the authors in Adobe FrameMaker 5, a multi-platform wysiwyg document preparation system. MacOS provided the surronding friendly environment. The text font is Palatino; the math fonts are Symbol and Lics. Springer was kind enough to accept Postscript.

How did you draw the cover picture? What does it mean?

The picture was prepared using a very cheap and very cool 3D-modeling program called RayDream Designer 4. (N.B. the main shape cannot be obtained by union and intersection of simple shapes.) Springer was persuaded to waive their "silver cover" policy.

The picture is a study in perspective. Perspective is the science of representing objects on a page; pretty much like object-oriented programming (except for the "science" part). There is also a bit of self-reference that some people have trouble finding; the back cover gives a hint.

What is that symbol? How do I read it? How do I render it in TeX?

No, it is not a zeta. It is an "end-sigma" (the version of sigma used at the end of Greek words). It is also called a "varsigma". You can find it in every Greek font, even TeX fonts, but nobody seems to have noticed it before. An unused Greek letter, wow! But do not bother looking: it was the last one.

It is read "sigma". In this book it binds self variables, so it can also be read "self". The upper-case version is a fresh invention, and can be read "self type".


What is the difference between inheritance and subtyping?

Subtyping is a relation between (object) types, having to do with keeping track of the messages that objects can accept. Inheritance is a relation between classes, having to do with the superclass-subclass relation and with method reuse. The usual connection between inheritance and subtyping is the following: a subclass generates objects whose type is a subtype of the objects generated by a superclass.

Initially, object-oriented languages confused classes with object types, and therefore ended up blurring the distinction between implementations (classes) and interfaces (object types), and between inheritance (code sharing) and subtyping (interface sharing). Recent object-oriented languages are designed to make these distinctions and to take advantage of them.

For other basic questions, see the Object-Orientation FAQ: US, EU(http://cuiwww.unige.ch/OSG/OOinfo/FAQ/oo-faq-toc.html).

What about {delegation, object extension}?

We discuss delegation in Chapter 4, but we do not adopt it as a primitive in our calculi. We model some of its derived concepts, such as dynamic inheritance and traits, by other means. Object calculi that embed delegation as a primitive (typically by an object extension operation) tend to be more complex than ours at the outset. Our choice of primitives is discussed in Chapter 5.

In your encodings of classes, inheritance is obtained by copying methods explicitly from a superclass to a subclass. What about inheriting methods implicitly from a superclass?

The latter feature,"implicit inheritance", is present in the three object-oriented languages described in Chapters 12, 19, and 21. The translations of these languages to object calculi map implicit inheritance to explicity method copying.

Do you provide implementations of the object calculi?

Yes, some. See the Software page.

 Luca Cardelli