1
1
Principles of Library Design: The Eiffel Experience
Bertrand Meyer ADFOCS Summer School, 2003 LECTURE 2
2
“Plan”
1: Intro to Eiffel and Principles of library design 2: Design by Contract 3: Trusted Components 4: Towards proofs
Principles of Library Design: The Eiffel Experience Bertrand Meyer - - PDF document
Principles of Library Design: The Eiffel Experience Bertrand Meyer ADFOCS Summer School, 2003 LECTURE 2 1 Plan 1: Intro to Eiffel and Principles of library design 2: Design by Contract 3: Trusted Components 4: Towards
1
2
1: Intro to Eiffel and Principles of library design 2: Design by Contract 3: Trusted Components 4: Towards proofs
3
Describing active structures properly: can after also be before?
before item after count not before not after Valid cursor positions
4
5
"Maurer" Cursor
6
7
not after before not before after item count count + 1 1 not after; not before 1 <= index; index <= count Valid cursor positions
8
not after before not before after 1 (i.e. count + 1) Valid cursor positions
9
10
display is do handle.display (Current) end
WINDOW TOOLKIT MS_ WINDOWS GTK
handle.display (Current) display+ display+ display* …
11
12
13
Feature of a class Immediate Redeclared Redefined Effected Inherited Kept
New in class From parent Changed Unchanged Was deferred Had an implementation
14
Feature of a class Immediate Redeclared Redefined Effected Inherited Kept
New in class From parent Changed Unchanged Was deferred Had an implementation
15
16
17
18
19
20
21
22
23
Operands: values on which feature will operate. Options: modes that govern how feature will operate.
24
There is a reasonable default value. During the evolution of a class, operands will normally remain
25
The arguments of a feature should only be operands.
26
Useful checklist for options:
Window color Hidden?
White No
set_background_color set_visible set_hidden
background_color hidden
27
28
29
Signatures (number and types of arguments and result). Assertions. Comments. 30
a.item (i) or a @ i
if s.addable then s.add (v) if s.deletable then s.delete (v) end end
31
32
33
34
35
36
Method, language, environment Object-oriented to the core Design by Contract Soon an ECMA standard Used in mission-critical systems worldwide Lots of platforms Closely integrated with .NET Also a key tool for education
37
Abstraction Information hiding Seamlessness Reversibility Design by Contract Open-Closed principle Single choice principle Single model principle Uniform access principle Command-query separation principle Option-operand separation principle Style matters
38
EiffelStudio (“Classic Eiffel”)
ENViSioN! for Visual Studio .NET
39
Serialization EiffelStore
Ansi Ansi C Executa Executable le sy system stem IL IL EiffelB ffelBase ase WE WEL Eiffel ffelVis ision ion EiffelNet ffelNet EiffelWeb ffelWeb EiffelMath ffelMath EiffelCOM ffelCOM Pe Pers rsistent istent
Eiffel ffel Runtime Runtime
Databases (Rel, OO)
C compilation Jitter Eiffel compilation User classes General library Win32 GUI Networking Web scripting Advanced numerics
Ex External ternal C/C++/Jav C/C++/Java .NET .NET Ass Assembli mblies es EiffelB ffelBuild ild
GUI builder Multiplatform GUI library
(Melting Ice™), debugging, diagrams, metrics...
40
Fast recompilation: time depends on size of change, not
Full type checking “Freeze” once in a while Optimized compilation: finalize.
41
YOUR SYSTEM
EIFFELSTUDIO
Execution, browsing, debugging, documentation ...
MELTING FREEZING Machine code (from C code)
42
One of the first languages to be available for .NET, right
Full language, with multiple inheritance, Design by
Full player: interoperability, consumer, producer, extender,
Choice between EiffelStudio and Visual Studio
43
Chicago Board of Trade AMP Investments Lockheed Martin Hewlett Packard Cap Gemini Ernst & Young CALFP AXA Rosenberg Environmental Protection Agency EMC Swedish National Health Board ENEA Boeing
44
1.
2.
3.
4.
45
FEASIBILITY STUDY REQUIREMENTS ANALYSIS SPECIFICATION GLOBAL DESIGN DETAILED DESIGN IMPLEMENTATION DISTRIBUTION VALIDATION & VERIFICATION
PROJECT PROGRESS
46
Specification
Design Implementation V & V Generalization Specification
Specification
Design Implementation V & V Generalization Specification Feasibility study Division into clusters
Specification
Design Implementation V & V Generalization Specification PROJECT TIME Cluster 1 Cluster 2 Cluster n
47
Programming environment Analysis & design tools, e.g. UML
Hard to keep model, implementation, documentation
Constantly reconciling views Inflexible, hard to maintain systems Hard to accommodate bouts of late wisdom Wastes efforts Damages quality
48
Single set of notation, tools, concepts, principles throughout Eiffel is as much for analysis & design as for implementation
Continuous, incremental development Keep model, implementation and documentation consistent Reversibility: can go back and forth Saves money: invest in single set of tools Boosts quality
49
TRANSACTION, PLANE, CUSTOMER, ENGINE...
Example classes Specification
50
TRANSACTION, PLANE, CUSTOMER, ENGINE...
Example classes Design Specification
STATE, USER_COMMAND...
51
Implementation
TRANSACTION, PLANE, CUSTOMER, ENGINE...
Example classes Design Specification
STATE, USER_COMMAND... HASH_TABLE, LINKED_LIST... 52
Implementation
V & V
TRANSACTION, PLANE, CUSTOMER, ENGINE... TEST_DRIVER, ...
Example classes Design Specification
STATE, USER_COMMAND... HASH_TABLE, LINKED_LIST...
53
Implementation
V & V
TRANSACTION, PLANE, CUSTOMER, ENGINE... TEST_DRIVER, ...
Example classes Design Specification
STATE, USER_COMMAND... HASH_TABLE, LINKED_LIST...
Genera- lization
AIRCRAFT, ... 54
deferred class VAT inherit TANK feature in_valve, out_valve: VALVE fill is
require in_valve.open
deferred ensure in_valve.closed
is_full end empty, is_full, is_empty, gauge, maximum, ... [Other features] ... invariant is_full = (gauge >= 0.97 * maximum) and (gauge <= 1.03 * maximum) end
Precondition
Class invariant
Postcondition
55
Implementation V & V
TRANSACTION, PLANE, CUSTOMER, ENGINE... TEST_DRIVER, ...
Example classes Design Specification
STATE, USER_COMMAND... HASH_TABLE, LINKED_LIST...
Genera- lization
AIRCRAFT, ... 56
57
System diagrams can be produced automatically from
Works both ways: update diagrams or update text – other
No need for separate UML tool
58
59
60
Analysis, design, implementation:
Testing, debugging, quality assurance Management, maintenance/evolution Inheritance Documentation
61
62
Binds two parties (or more): supplier, client. Is explicit (written). Specifies mutual obligations and benefits. Usually maps obligation for one of the parties into benefit for the
Has no hidden clauses: obligations are those specified. Often relies, implicitly or explicitly, on general rules applicable to
63
Constructing systems as structured collections of
These definitions are the contracts.
64
deferred class VAT inherit TANK feature in_valve, out_valve: VALVE fill is
require in_valve.open
deferred ensure in_valve.closed
is_full end empty, is_full, is_empty, gauge, maximum, ... [Other features] ... invariant is_full = (gauge >= 0.97 * maximum) and (gauge <= 1.03 * maximum) end
Precondition
Class invariant
Postcondition
65
66
67
68
69
70
71
72
class ACCOUNT feature -- Access balance: INTEGER
Minimum_balance: INTEGER is 1000
feature {NONE} -- Implementation of deposit and withdrawal add (sum: INTEGER) is
do balance := balance + sum end
73
feature -- Deposit and withdrawal operations deposit (sum: INTEGER) is
do add (sum) end withdraw (sum: INTEGER) is
do add (– sum) end may_withdraw (sum: INTEGER): BOOLEAN is
do Result := (balance - sum >= Minimum_balance) end end
74
class ACCOUNT create make feature {NONE} -- Initialization make (initial_amount: INTEGER) is
require large_enough: initial_amount >= Minimum_balance do balance := initial_amount ensure balance_set: balance = initial_amount end
75
feature -- Access balance: INTEGER
Minimum_balance: INTEGER is 1000
feature {NONE} -- Implementation of deposit and withdrawal add (sum: INTEGER) is
do balance := balance + sum ensure increased: balance = old balance + sum end
76
77
78
79
80
81
82
Consistency constraint applicable to all instances of
Must be satisfied:
83
{precp} docp {postcp and INV}
{INV and prer} dor {postr and INV}
in object-oriented software development:
the invariant of its own class. a.f (…) a.g (…) a.f (…)
create a.make (…)
S1 S2 S3 S4
84
(A1) (A2)
85
Eiffel projects benefit from richest documentation,
Available in text, HTML, Postscript, RTF, FrameMaker and
Numerous views, textual and graphical
86
87
deferred class VAT inherit TANK feature in_valve, out_valve: VALVE fill is
require in_valve.open
deferred ensure in_valve.closed
is_full end empty, is_full, is_empty, gauge, maximum, ... [Other features] ... invariant is_full = (gauge >= 0.97 * maximum) and (gauge <= 1.03 * maximum) end
Precondition
Class invariant
Postcondition
88
Contracts express implicit assumptions behind code A bug is a discrepancy between intent and code Contracts state the intent! In EiffelStudio: select compilation option for run-time
May disable monitoring when releasing software A revolutionary form of quality assurance
89
"Maurer" Cursor
90
(Already past last element)
"Maurer"
91
(Already past last element)
"Maurer"
92
93
(Already after last element!)
"Maurer"
94
95
96
97
98
99
100
r is require γ ensure δ r is require α ensure β C A B a1: A a1.r (…) … D
101
102
A simple language rule does the trick! Redefined version may have nothing (assertions
Resulting assertions are: