A complete tutorial of the Eiffel programming language, this book emphasizes the role of abstract data types (ADTs) in software development. It shows how Eiffel's unique approach to "programming by contact" encourages the design of reusable software components and explores techniques for ensuring the correctness of programs.