Description: This book shows how object-oriented notions may be expressed in terms of a few basic primitives, and how these can be used to design and understand object-oriented programming languages. Using this approach, the authors explain both the semantics of objects and their typing rules and demonstrate how to develop all of the most important concepts of object-oriented programming languages.