search for books and compare prices
Tables of Contents for Object-Oriented Programming in Eiffel
Chapter/Section Title
Page #
Page Count
Preface to the Second Edition
vi
3
Preface to the First Edition
ix
 
1 Introduction
1
24
1.1 Object-orientation
1
5
1.2 Analysis
6
2
1.3 Types in programming languages
8
2
1.4 Specification
10
1
1.5 Modularization
11
1
1.6 Using and building types
12
3
1.7 Building types using inheritance
15
1
1.8 Polymorphism
16
2
1.9 Exceptions
18
1
1.10 Programming by contract
19
1
1.11 Concurrency
20
1
1.12 Language requirements
21
3
Summary
24
1
2 Beginning Eiffel
25
42
2.1 Introduction
25
1
2.2 How to create instances of a data type
26
6
2.2.1 Identifiers and declarations
26
1
2.2.2 Creating objects
27
5
2.3 How to manipulate objects
32
4
2.4 Initialization and the basic data types
36
3
2.5 Classes
39
7
2.6 Executing Eiffel programs
46
6
2.6.1 Systems
46
1
2.6.2 Creating objects
47
3
2.6.3 Execution of a system
50
2
2.7 Practical work
52
12
Summary
64
3
3 Abstract Data Types
67
16
3.1 Introduction
67
1
3.2 Operations and object behaviour
68
4
3.3 Specifying abstract data types
72
10
3.3.1 The QUEUE abstract data type
72
3
3.3.2 Generic specifications
75
2
3.3.3 The LIST abstract data type
77
3
3.3.4 Signatures, semantics and data hiding
80
1
3.3.5 Programming by contract
81
1
Summary
82
1
4 Classes and Features
83
38
4.1 Introduction
83
1
4.2 Routines and attributes
84
11
4.3 Classes and data hiding
95
11
4.3.1 Suppliers, clients and exported features
95
9
4.3.2 The current object
104
2
4.4 Scope
106
5
4.5 Basic input and output
111
4
4.6 Practical work
115
4
Summary
119
2
5 Eiffel Instructions
121
32
5.1 Introduction
121
1
5.2 Assignment
122
11
5.2.1 The assignment instruction
122
5
5.2.2 Copies and clones
127
4
5.2.3 Equality
131
2
5.3 Conditional instructions
133
9
5.3.1 The If instruction
133
3
5.3.2 The class BOOLEAN
136
1
5.3.3 The Inspect instruction
137
5
5.4 Loops
142
3
5.5 Practical work
145
6
Summary
151
2
6 Storage Structures
153
32
6.1 Introduction
153
1
6.2 The class ARRAY
154
8
6.3 Linked representations
162
8
6.4 Library classes
170
3
6.4.1 Libraries
170
3
6.5 Files
173
6
6.6 Practical work
179
4
Summary
183
2
7 Expressions and Calls
185
16
7.1 Introduction
185
1
7.2 Expressions
185
5
7.3 Reattachment
190
4
7.4 Calls
194
4
7.5 Practical work
198
2
Summary
200
1
8 Semantics of Abstract Data Types
201
36
8.1 Introduction
201
2
8.2 Constructive approach
203
23
8.2.1 Pre-conditions, post-conditions and underlying models
203
5
8.2.2 Pre-conditions
208
3
8.2.3 Post-conditions
211
15
8.3 Axiomatic approach
226
8
8.3.1 The axiomatic specification of STACK
226
3
8.3.2 The axiomatic specification of QUEUE
229
5
8.4 Client-supplier relationship
234
1
Summary
235
2
9 Correctness: The Client-Supplier Relationship
237
36
9.1 Correctness
237
1
9.2 Client-supplier relationship
238
16
9.2.1 Review
238
1
9.2.2 Client-supplier contract
239
2
9.2.3 Require and ensure clauses
241
6
9.2.4 Class invariants
247
7
9.3 Verifying program correctness
254
11
9.3.1 Introduction
254
1
9.3.2 Assignment
254
4
9.3.3 Loops
258
7
9.4 Run-time monitoring of assertions
265
4
9.4.1 Assertions in Eiffel
265
2
9.4.2 The Eiffel3 assertion monitoring system
267
2
9.5 Practical work
269
1
Summary
270
3
10 Correctness: Programming by Contract
273
20
10.1 Introduction
273
1
10.2 Categories of program error
274
1
10.3 Client-supplier contract
275
13
10.3.1 Obligations and benefits
275
3
10.3.2 Checking a program is written according to contract
278
1
10.3.3 Dealing with dynamic errors during testing
279
9
10.4 Other program testing facilities in Eiffel
288
1
10.4.1 The Debug instruction
288
1
10.5 Practical work
289
1
Summary
290
3
11 Building Types as Subtypes
293
24
11.1 Introduction
293
1
11.2 The subtype relationship
294
9
11.2.1 Introduction
294
4
11.2.2 Renaming inherited operations
298
1
11.2.3 Depicting the subtype relationship
298
3
11.2.4 Multiple supertypes
301
2
11.3 Implementing subtypes in Eiffel using inheritance
303
7
11.3.1 Inheritance in Eiffel
303
1
11.3.2 Export status of inherited features
304
1
11.3.3 Creation status of inherited creation procedures
304
2
11.3.4 Subtype objects
306
1
11.3.5 Renaming inherited features
307
1
11.3.6 Multiple inheritance
308
2
11.4 Inheritance and generic classes
310
1
11.4.1 Retaining the generic parameter(s) in the heir
310
1
11.4.2 Inheriting an instantiated generic class
310
1
11.5 Inheritance issues
311
3
11.5.1 Encapsulation and inheritance
311
2
11.5.2 Inheritance and subtyping
313
1
11.5.3 The inheritance hierarchy
313
1
11.6 Practical work
314
1
Summary
315
2
12 Adapting Inherited Features
317
40
12.1 Introduction
317
2
12.2 Renaming
319
2
12.3 Changing the export status
321
2
12.4 Redefinition
323
12
12.4.1 Introduction
323
1
12.4.2 Redefining a routine's implementation
323
5
12.4.3 Redefining a routine's signature: conforming types
328
5
12.4.4 Redefining a routine's semantics
333
2
12.5 Deferred and abstract classes
335
10
12.6 Joining features
345
1
12.7 Undefining: making features non-effective
345
1
12.8 Repeated inheritance and adaption
346
3
12.8.1 Introduction
346
2
12.8.2 Uses of repeated inheritance
348
1
12.9 Practical work
349
6
Summary
355
2
13 Polymorphism and Dynamic Binding
357
38
13.1 Introduction
357
1
13.2 Polymorphism
358
3
13.2.1 Introduction
358
1
13.2.2 Generic parameters
359
1
13.2.3 Polymorphic attachment and static type checking
359
1
13.2.4 Polymorphic data structures
360
1
13.3 Polymorphism and feature redefinition
361
5
13.3.1 Dynamic binding
361
1
13.3.2 Static typing and dynamic binding
362
1
13.3.3 Renaming, redefinition and dynamic binding
363
2
13.3.4 Creating objects of specified dynamic types
365
1
13.4 Dynamic binding and repeated inheritance
366
5
13.4.1 Introduction
366
2
13.4.2 Adapting inherited features: the select subclause
368
3
13.5 Dynamic type checking: the assignment attempt
371
2
13.6 Dynamic binding, inheritance and extendibility
373
6
13.7 Conformance
379
7
13.7.1 Introduction
379
1
13.7.2 Conformance rules
380
6
13.8 Type problems with polymorphism and dynamic binding
386
5
13.8.1 Introduction
386
1
13.8.2 Changing the export status of inherited interface features
387
2
13.8.3 Covariance
389
2
13.9 Practical work
391
1
Summary
392
3
14 The Exception Mechanism
395
28
14.1 Introduction
395
2
14.2 Exception handling in Eiffel
397
2
14.2.1 The rescue clause
397
1
14.2.2 Responsibility for trapping an exception
398
1
14.3 Principles governing the rescue clause
399
3
14.4 Information about exceptions: the class EXCEPTIONS
402
5
14.5 Strategies for handling exceptions
407
10
14.5.1 Introduction
407
1
14.5.2 Organized panic
408
2
14.5.3 Resumption
410
7
14.5.4 False alarm
417
1
14.6 User-defined exceptions
417
3
14.7 Program correctness
420
1
14.8 Practical work
420
1
Summary
421
2
15 Client-Supplier vs Inheritance
423
10
15.1 Introduction
423
1
15.2 Review of the client-supplier and inheritance relationships
424
3
15.2.1 Building classes using the client-supplier relationship
424
1
15.2.2 Building classes using inheritance
425
1
15.2.3 Using inheritance to build non-subtypes
425
1
15.2.4 Using the client-supplier relationship to build subtypes
426
1
15.3 Choosing between client-supplier and inheritance
427
4
15.3.1 Important factors
427
1
15.3.2 Guidelines for the choice
428
3
Summary
431
2
16 Additional Facilities in Eiffel
433
28
16.1 Introduction
433
1
16.2 Expanded types
433
8
16.3 Once routines
441
3
16.4 Frozen features
444
1
16.5 Building libraries
444
13
16.5.1 Introduction
444
1
16.5.2 Reuse
444
2
16.5.3 Correctness
446
1
16.5.4 Testing
447
1
16.5.5 Tools
447
1
16.5.6 Interface to other languages
448
1
16.5.7 Obsolescence
448
1
16.5.8 An example of a library
449
8
16.6 Practical work
457
1
Summary
458
3
17 Eiffel Concurrency
461
56
17.1 Introduction
461
6
17.2 Processes
467
3
17.3 Concurrent processing in Eiffel: separate objects
470
3
17.4 Synchronization: mutual exclusion in Eiffel
473
8
17.5 Conditional synchronization
481
3
17.6 Implementing the producer-consumer problem
484
6
17.7 Interrupts
490
2
17.8 The Dining Philosophers' problem
492
5
17.9 Synchronization: wait by necessity
497
5
17.10 The breakfast problem: a worked example
502
8
17.11 Consistency rules and concurrency principles
510
3
17.12 Practical work
513
1
Summary
514
3
18 A Case Study
517
16
18.1 Introduction
517
1
18.2 The application
517
1
18.3 The database
518
1
18.4 The commands
518
10
18.5 The user interface
528
4
18.6 Practical work
532
1
Summary
532
1
Appendix A: Eiffel Syntax
533
12
Appendix B: Special Characters
545
2
Appendix C: A Worked Example
547
22
Appendix D: WEL: The Windows Eiffel Library
569
40
Appendix E: The Breakfast Problem
609
15
Appendix F: Information on Eiffel products
624
1
Bibliography and References
625
2
Solutions to Exercises
627
55
Index
682