2 OBJECT-ORIENTED DESIGN

To achieve reusability, extendibility and reliability, the principles of object-oriented design
provide the best known technical answer. 

An in-depth discussion of these principles falls beyond the scope of this introduction but
here is a short definition: 

------------------------------------------------------------------------------
Object-oriented design is  the construction of software systems as structured   
collections of abstract data type implementations, or "classes".                
------------------------------------------------------------------------------

The following points are worth noting in this definition: 

     The emphasis is on structuring a system around the types of objects it manipulates
     (not the functions it performs on them) and on reusing whole data structures together
     with the associated operations (not isolated routines). 

     Objects are described as instances of abstract data types -- that is to say, data
     structures known from an official interface rather than through their representation. 

     The basic modular unit, called the class, describes one implementation of an abstract
     data type (or, in the case of "deferred" classes, as studied below, a set of possible
     implementations of the same abstract data type). 

     The word collection reflects how classes should be designed: as units which are
     interesting and useful on their own, independently of the systems to which they
     belong, and may be reused by many different systems. Software construction is
     viewed as the assembly of existing classes, not as a top-down process starting from
     scratch. 

     Finally, the word structured reflects the existence of two important relations
     between classes: the client and inheritance relations. 

Eiffel makes these techniques available to software developers in a simple and practical
way. 

As a language, Eiffel includes more than presented in this introduction, but not much more;
it is a small language, not much bigger (by such a measure as the number of keywords) than
Pascal. It was meant to be a member of the class of languages which programmers can
master entirely -- as opposed to languages of which most programmers know only a subset.
Yet it is appropriate for the development of industrial software systems, as has by now been
shown by many full-scale projects, some in the thousands of classes and hundreds of
thousands of lines, in companies around the world. 

