Eiffel Naeem Esfahani University of Tehran "Man cannot discover new oceans unless he has the courage to lose sight of the shore." -- Andre Gide
I prefer to have as little as possible to do with Bertrand Meyer -- Bjarne Stroustrup, 1989
Overview Introduction & History Design By Contract™ Elements Concepts Syntax and Semantics
Introduction & History
Bertrand Meyer BS from Ecole polythecnique MS from Stanford University PhD from Univesite du Nancy Professor of Software Engineering at ETH in Zurich 2001
Bertrand Meyer Nine years in a large company Three years on the faculty at the University of California, Santa Barbara computer languages, object-oriented system design, architectural reviews, technology assessment
History Designed at Eiffel Software in 1985 as an internal tool A modern, OO environment integrating the concepts of modern software engineering There was simply nothing available
History First demonstrated in public at the first OOPSLA conference in October of 1986 Release it as a commercial product at the end of 1986 In 1988 in a book by Bertrand Meyer Version 2.3, released in the Summer of 1990
History Eiffel 3, was written entirely in Eiffel –Melting Ice Technology for fast recompilation –Fully graphical environment –Considerable advances in libraries –Optimization of the generated code The latest milestones is: Eiffel 5 and EiffelStudio
Application Leading to a set of successful industrial projects in the US, Canada, Europe and the Far East Adoption by numerous universities as the primary teaching language
Where the Name does come from? Homage to Gustave Eiffel, the man who built the eponymous Tower in Paris The Eiffel Tower was completed on time and within budget Small number of robust, elegant design patterns, combined and varied repeatedly to yield a powerful, efficient structure
Where the Name does come from? The Eiffel Tower was initially conceived as a temporary structure and it was able to endure far beyond its original goals What better symbol could there be of the engineering principles behind Eiffel?
Design By Contract™
Assertions A boolean expression that is evaluated when it is reached during execution If true, execution continues else, execution may halt or an exception Eiffel has support for writing assertion
Assertions Preconditions: When a routine is called Postconditions: When a routine returns General assertions: When execution reaches them Class invariants: Maintained by all instances of a class
Pre and postconditions Preconditions and postconditions are associated with routines of a class
Pre and postconditions The preconditions must be true when the routine is called Postconditions must have been established when the routine terminates
Class Invariant Conditions that must be true for all objects of the class at ‘stable’ times When method starts to execute: –Its preconditions are met and the class invariant is satisfied After execution: –The postcondition must be met and the class invariant must be satisfied
Class Invariant
Elements
Classes The basic and only construct in Eiffel The attributes of entities and the operations that entities can perform A class represents all objects of that type
Libraries Classes that frequently appear –Reuse EiffelBase: –INTEGER, REAL, STRING, LISTs, ARRAYs Libraries are not defined as part of the Eiffel language
Features Each class has a set of features which represent the attributes and routines of a class routines are either procedures or functions; attributes can be fields, constants or functions
Features Procedures (Commands) alter the state of the object Functions (Queries) are return an answer to a query about the state of an object This is by convention, rather than being enforced in Eiffel
Concepts
Inheritance Build new classes out of existing classes, and to reuse features already defined in those classes, you use inheritance Eiffel has multiple inheritance –solves clashing by having a rename clause –Redefinition Inheritance is one of the fundamental mechanisms for reuse Polymorphism
Class Syntax
Genericity You can reuse like inheritance Genericity is important in making programs type safe without resorting to type casts constrained genericity –allows generic parameters to be constrained allow you to write general algorithmic patterns
Objects A name in an Eiffel program is declared as having a type. The declaration x : T Still does not refer to any objects: x is not bound to an object Expressed as the object void. We can see if an object is bound to void by writing x=void Name x can be bound to any object that type conforms to type T
Objects Three ways to achieve this binding: Assignment instruction: The assignment x:=y binds x to the object to which y is currently bound A creation instruction: The creation instruction !!x creates a new object of type T,and binds x to it. This is similar to new in C++. Routine call
Objects c: C !! c.make An object of type C is created and attached to the reference c !D! c.make An object of type D, where D conforms to C is created and attached to c. If you have a creation routine declared for the class, the creation routine must be called like constructor
Objects Creation routines can be called as normal routines Note that the !! syntax is somewhat cryptic, and a recent change to the language has changed this for a create command keyword Eiffel has no delete operator. This is because, as with Java, Eiffel is garbage collected
Etc Class variables: variables which do not have one copy per class of objects. The Eiffel equivalent for doing this is once routines Eiffel does not have... –Gotos are not needed, as the Eiffel style is to write small routines –Global variables are a sign of poor structuring use once routines instead –Type casts to make up for a flawed type system –Pointers with their associated problems Code must be structured in classes
Syntax and Semantics
Some constructs Comments are introduced by -- Grouped entities are terminated by the keyword end, no begin keyword No semicolons, optionally be placed between instructions
Style Keywords are shown in bold User named entities in italic Class names are given in uppercase Eiffel is not case sensitive, so it is up to the programmer to follow style conventions. More than one words separate the constituent words with underscore ‘_’
Access specifiers Any set of features introduced by the feature keyword can be exported to other specific classes ANY and NONE There is no strict equivalent to private, as Eiffel believes it is not sensible to restrict visibility in subclasses.
Access specifiers
Basic Types BOOLEAN not, or, and, implies, or else, and then INTEGER +, -, *, //, \\, ˆ,, = REAL +, -, *, /, ˆ,, =
Conditional
Iterations There is only one form of iteration in Eiffel
Procedures
Functions The value to be returned result := expression
Redefinition
Renaming
Counter class COUNTER feature -- Access item: INTEGER -- Counter's value. feature -- Element change increment is -- Increase counter by one. do item := item + 1 end decrement is -- Decrease counter by one. do item := item - 1 end reset is -- Reset counter to zero. do item := 0 end end
Questions
If Time! Native C and C++ Simplicity First release instead prototype Melting ice