Title: Eiffel Programming Language
1Eiffel Programming Language
2- Chad Frommeyer
- CSC 407/507
- Fall 2005
- Dr. Richard Fox
3History
- 1985 Language Development Began
- Developed by Bertrand Meyer of Interactive
Software Engineering - 1986 First Compiler Delivered
- 1987 Commercial Applications Developed
- 1991 NICE Founded (Non-Profit International
Consortium for Eiffel) - NICE controls evolution, standardization and
basic class definitions for Eiffel - 1996 Commercial Eiffel based development system
becomes available (iss-base). - Decendent of Algol and ADA
4Overview
- Pure object oriented language
- Strong statically typed
- Automatic memory management/Garbage collection
- Supports ADTs
- Supports Generic Classes
- Supports By Value and By reference semantics
- Promotes simplicity (Readable, not Writeable)
- Non-Object Oriented Capabilities/Low Level
Functionality (C-Lang) - Some Compilers only generate C source code
- Design By Contract (Reliability)
- Exception Handling
- Supports separate library compilation
- Supports In-Class Documentation
- Root class starts execution
5Overview (Continued)
- Statement delimiter () allowed, not required,
typically used in muti-statement line - Is not case sensitive
- Doesnt support global variables
- Doesnt support union types
- Doesnt support goto instructions
- Doesnt contain side-effect expression operators
- Doesnt support pointers or pointer arithmetic
6Hello World
indexing description Basic Hello World
author Jim Developer class
HELLO_WORLD creation make feature make is
do io.put_string ("Hello,
world!N") end end
7Basic Instructions
- Assignment
- Object Creation
- Routine Call
- Conditional
- Iteration
- Choice/Switch/Case
8Assignment
- i i 1
- Assignments cannot happen directly to class
attributes. Methods/Routines must be used. - Shortcut Assignments dont exist
9Object Creation
- Declaration accACCOUNT
- acc is void when declared
- At runtime acc obtains an object by calling
- create acc
- Which creates a new instance of ACCOUNT and
attaches acc - acc can now be used
- acc.open(John)
- acc.deposit(5000)
10Data Types
- The following data types exist, the
initialization of variables of these types is
automatically initialized - INTEGER initializes to zero
- REAL and DOUBLE initialize to 0.0
- BOOLEAN initializes to false
- CHARACTER initializes to null
- Reference types initialize to a null reference
- INTEGER, REAL, DOUBLE, BOOLEAN and CHARACTER are
all considered Expanded types
11Reference Types
- A reference is the default object type, when an
instance of a class is created it is called a
reference, this is created by either calling
create or using !!
12Expanded Types
- An expanded type is one that is already
initialized - INTEGER, REAL, DOUBLE, BOOLEAN and CHARACTER are
all considered Expanded types - Expanded types dont require calling create or
!! - If the class is not defined with the keyword
expanded then it will be a reference type.
expanded class INTEGER feature ... end
-- INTEGER
13Routine/Function Call
acc.open ("Jill") acc.deposit (5000) if
acc.may_withdraw(3000) then
acc.withdraw(3000)print(acc.balance) end
14Conditional
if x gt 10 then ... statements ... elseif
x gt 5 then ... elsif statements ...
elseif x gt 0 then ... more elsif
statements ... else ... else statements
... end
15Looping/Iteration
- Only one looping statement exists, but it could
be used to emulate other types of loops.
For Loop
While Loop
Repeat Loop
from i 1 until i 10 loop
io.put_int (i) io.new_line i i
1 end
from node first until node
Void loop io.put_string (node.text)
node node.next end
from done False until done and
pages 10 loop done True
printer.output_next pages pages 1
end
16Choice/Switch/Case
- The inspected value must be enumerable
State INTEGER State_1, State_2, State_3
INTEGER is unique ... statements ... inspect
State when State_1 then ... statements
... when State_2 then ... statements ... when
State_3 then ... statements ... else ...
statements ... end
17Generic Classes
class STACK T feature push( element T
) is do storage( pos )
element pos pos 1 end
-- push end -- STACK
class LUNCH_COUNTER feature tray_stack
STACK TRAY napkin_dispenser STACK
NAPKIN ... init is do
... napkin_dispenser.pop(
end -- init end -- LUNCH_COUNTER
18Creation Routines/Constructors
- A creation routine is called when the reference
type is created with create or !!
class CONVERTER creation make feature
temperature DOUBLE make is do
temperature 98.6 end -- make
... end -- CONVERTER
19Exception Handling
- Exceptions can be thrown in few cases
- Design by contract failures
- Low level functions
- Rescue (Catch)
- Retry (can only exist within a rescue clause)
- Retry starts execution of the routine again
without the variable initialization
20Exception Handling (Cont.)
read_next_character (f FILE) is -- Make
next character available in last_character
-- if impossible, set failed to True.
require readable file . readable
local impossible BOOLEAN do
if impossible then failed
True else last_character
low_level_read_function ( f ) end
rescue impossible True
retry end
21Design By Contract
- Facilitates more reliable techniques
- Defines correct usage
- Assertions (Boolean Expression)
- Precondition (require)
- Postcondition (ensure)
- Class invariants (invariant)
- Class invariant must be satisfied upon exit of
the creation procedure (constructor)
22Assertion Monitoring
- Assertion monitoring levels are set at compile
time - The levels vary from no monitoring to monitoring
all require/ensure/invariant - Exceptions will be thrown if assertions are being
monitored - If the exception isnt handled, a run-time error
will result
23Sample DBC
indexing description "Simple bank accounts"
class ACCOUNT feature -- Access
balance INTEGER -- Current balance
deposit_count INTEGER is --
Number of deposits made since opening
do As before end
feature -- Element change deposit (sum
INTEGER) is -- Add sum to account.
require non_negative sum gt
0 do As before
ensure one_more_deposit
deposit_count old deposit_count 1
updated balance old balance sum
end
24Sample DBC (Cont.)
feature NONE -- Implementation
all_deposits DEPOSIT_LIST invariant
consistent_balance (all_deposits / Void)
implies (balance
all_deposits . total) zero_if_no_deposits
(all_deposits Void) implies
(balance 0) end -- class ACCOUNT
25Object Oriented
- Purely Object Oriented
- Everything is an object
- Information Hiding
- Encapsulation
- Polymorphism/Dynamic Binding
- Inheritance (Including Multiple)
26Object Oriented (Cont.)
- Supports information hiding/encapsulation
- No attributes of a class are allowed to be
modified directly. All modifications must happen
within a subroutine - No global variables are allowed
- No static functions are allowed
- Secret attributes/routines are equivalent to
private variables/methods
27Polymorphism
- Dynamic binding allows polymorphic object to call
the appropriate versioned routine
acc ACCOUNT sav SAVINGS_ACCOUNT acc sav
acc.deposit( 1000 )
28Inheritance
- Inheritance is supported
- Multiple inheritance is supported
- Routine can be overridden (redefine)
- Parent is known as a precursor
- Keyword precursor can be used to reference the
parent - Renaming allows conflicts with multiple
inheritance to be resolved
29Inheritance (Cont.)
indexing description "Savings accounts"
class SAVINGS_ACCOUNT inherit ACCOUNT
redefine deposit end feature --
Element change deposit ( sum INTEGER ) is
-- Add sum to account. do
precursor (sum)
end Other features end -- class
SAVINGS_ACCOUNT
30Inheritance (Cont.)
- The implementation of inheritance supplies many
keywords to define how the parents members are
recognized - Rename allows renaming of a parent
attribute/routine - Export allows changing protection of a parent
attribute/routine - Redefine allows overriding a routine
- Undefine allows removing a routine
31Inheritance (Cont.)
class D inherit A rename
g as f -- g was effective in A
export X, Y, feature1, feature2
undefine f end B
undefine f end -- f was effective in
B C -- C also has an effective feature f ,
which will serve as -- implementation for the
result of the join. feature
32In-Class Documentation
- Keyword Indexing
- Indexing Items (author, description, other)
- Developer defined indexing items
- Developer tools exist to generate documentation
33class ACCOUNT feature balance INTEGER --
Attribute owner PERSON minimum_balance
INTEGER is 1000 open (who PERSON) is --
Routine -- Assign the account to
owner who. do owner
who end deposit (sum INTEGER) is
-- Deposit sum into the account.
do add (sum) end
withdraw (sum INTEGER) is --
Withdraw sum from the account. do
add (-sum) end may_withdraw
(sum INTEGER) BOOLEAN is -- Function
-- Is there enough money to withdraw sum?
do Result (balance gt sum
minimum_balance) - Return value end
feature NONE add (sum INTEGER) is -
Private/Secret Routine -- Add sum to
the balance. do balance
balance sum end end -- class ACCOUNT
34Bibliography
- http//en.wikipedia.org/wiki/Eiffel_programming_la
nguage - http//archive.eiffel.com/doc/online/eiffel50/intr
o/language/ - http//www.eiffel.com/index.html
- http//www.comp.ufla.br/monserrat/eiffel/advanced
_introduction/eiffel.html