[[Property:title|I2E: Object-Oriented Design]] [[Property:weight|-12]] [[Property:uuid|e0a1f24e-5dd7-e5f8-8be8-8da32cc6a91c]] 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 fall beyond the scope of this introduction but here is a short definition: {{info|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 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.