- Invitation to Eiffel (I2E)
- I2E: What Must I Know First?
- I2E: Design Principles
- I2E: Object-Oriented Design
- I2E: Classes
- I2E: Types
- I2E: Design by Contract and Assertions
- I2E: Exceptions
- I2E: Event-Driven Programming and Agents
- I2E: Genericity
- I2E: Inheritance
- I2E: Polymorphism and Dynamic Binding
- I2E: Combining Genericity and Inheritance
- I2E: Deferred Classes and Seamless Development
- I2E: Putting a System Together
- I2E: Invitation to Eiffel Copyright
- An Eiffel Tutorial (ET)
- Void-safe programming in Eiffel
- Quick reference to the Eiffel programming language
- Books about the Eiffel Method and Language
- Method and Language beta documentation
I2E: Design Principles
The aim of Eiffel is to help specify, design, implement and modify quality software. This goal of quality in software is a combination of many factors; the language design concentrated on the three factors which, in the current state of the industry, are in direct need of improvements: reusability, extendibility and reliability. Also important were other factors such as efficiency, openness and portability.
Reusability is the ability to produce components that may serve in many different applications. Central to the Eiffel approach is the presence of predefined libraries such as EiffelBase, and the language's support for the production of new libraries.
Extendibility is the ability to produce easily modifiable software. "Soft" as software is supposed to be, it is notoriously hard to modify software systems, especially large ones.
Among quality factors, reusability and extendibility play a special role: satisfying them means having less software to write -- and hence more time to devote to other important goals such as efficiency, ease of use or integrity.
The third fundamental factor is reliability, the ability to produce software that is correct and robust -- that is to say, bug-free. Eiffel techniques such as static typing, assertions, disciplined exception handling and automatic garbage collection are essential here.
Three other factors are also part of Eiffel's principal goals:
- The language enables implementers to produce high efficiency compilers, so that systems developed with Professional Eiffel may run under speed and space conditions similar to those of programs written in lower-level languages.
- Ensuring openness, so that Eiffel software may cooperate with programs written in other languages.
- Guaranteeing portability by a platform-independent language definition, so that the same semantics may be supported on many different platforms.