Table of Contents
for
Object Oriented Software Development with Eiffel
James Heliotis
extracted 26 June 1998
-
A Brief History of Computing 1
-
Pre-20th Century
-
20th Century
-
Programming
-
Engineering of Software
-
The Structure of Software I -- What is an Object? 6
-
Where did Objects Come From?
-
Lots of Computing Paradigms
-
The Object Paradigm
-
Processes, Objects, and Roles
-
A Restaurant Example
-
Sequential Objects, Parallel Objects
-
Classification and Hierarchy
-
Software Objects
-
What's in a Class?
-
Types versus Classes
-
Class Inheritance
-
Summary
-
Objects in Software Design 20
-
The Three Sides of an Object
-
Interfaces
-
Classes
-
Instantiation
-
Message Passing
-
An Introduction to Inheritance
-
Summary
-
Exercises
-
Objects in Eiffel 30
-
Classes
-
Deferred Classes
-
Effective Classes
-
Creating Objects
-
Class Names as Data Types
-
Declarations
-
Creation Instructions and Routines
-
Other ways to associate a variable with an object
-
Assignment Instructions
-
Literals
-
Parameter Passing
-
Special Cases: the Basic Types
-
Message Passing / Feature Calls
-
Features, Revisited
-
Features That Have Return Types
-
Attributes and States
-
Local Variables
-
References and Expanded Variables
-
An Introduction to Inheritance
-
The inherit Clause
-
A Complete Example
-
Standard Output
-
Summary
-
The Structure of Software II -- What is an Algorithm? 53
-
Procedure in Software
-
An Instruction Defined as a Perturbation of State
-
Definition of Algorithm
-
Algorithm Design
-
Listing the Instructions
-
Stepwise Refinement
-
Control of the Flow of an Algorithm
-
Alternation
-
Iteration
-
Iteration Assertions
-
Looking Back at Flow Control Concepts
-
Subroutines
-
Interrupting Oneself: The Stacked Nature of Subroutine Calls
-
Object Passing: Subroutine Parameters and Return Values
-
An Introduction to Recursion
-
Summary
-
Algorithms in Eiffel 69
-
Sequential Execution
-
Demarcating Instructions
-
Compound Statements
-
Alternation
-
if - then Instructions
-
if - then - else Instructions
-
Boolean Objects, Revisited
-
Iteration
-
Loop Assertions
-
Multi-way Alternation
-
The if - else if Chain
-
inspect Instructions
-
Flow Control in Eiffel -- A Summary
-
Expressions
-
Uses of Expressions
-
Types of Expressions
-
Operators Found in the Standard Library
-
Operator Precedence
-
Chapter Summary
-
Some Useful Data Structures 89
-
Principles of Reuse
-
Basic Properties of Containers
-
The List: Basic Linear Storage
-
Responsibilities
-
Applications
-
The Stack
-
Responsibilities
-
Applications
-
The Queue
-
Responsibilities
-
Applications
-
The Array
-
Responsibilities
-
Applications
-
Lists, Revisited
-
Iterators
-
Summary
-
Designing Object-Oriented Software Systems 119
-
Responsibility-Driven Design
-
The CRC Card Design Method
-
A Program as a Set of Cooperating Objects
-
Finding the Objects
-
Determining the Objects' Responsibilities
-
Determining Object Collaborations
-
About Classes
-
An Example
-
Post Mortem on the Design Example
-
UML
-
Classes
-
Associations
-
Object Interaction Diagrams
-
A Retrospective
-
From Design to Implementation and Debugging in Eiffel 139
-
Design to Implementation
-
Class Diagrams and the Eiffel Class Interface
-
Object Interaction Diagrams and Eiffel Routines
-
The "Short Form"
-
What We Learned
-
Debugging
-
pre- and post- Conditions: require and ensure
-
Other Assertions
-
invariant - Checking the Integrity of the Object
-
check - Sanity Checks
-
Loop Assertions
-
Debugging with Assertions
-
Introduction to the Notion of Exceptions
-
Assertions as Potential Exception Raisers
-
How Exceptions Work
-
The Debugger as an Exception Handler and Exception Avoider
-
Summary
-
More Useful Data Structures 153
-
Trees
-
Motivation
-
More on Recursion
-
The Interface
-
Tree Traversal Algorithms
-
Binary Trees
-
Motivation
-
The Interface
-
Traversals
-
The Binary Search Tree
-
An Introduction to Graphs
-
Motivation
-
The Model
-
Applications
-
Summary
-
Trees for an Eiffel Library 168
-
The Class LIST_TREE
-
The Class BINARY_TREE
-
The Class BINARY_SEARCH_TREE
-
Conclusions
-
Inheritance I 185
-
Reuse, revisited
-
Design Reuse
-
Importance of Inheritance in Design Reuse
-
Implementation Reuse
-
How Inheritance is Used to Reuse Implementation
-
Inheritance and Classes
-
When is Inheritance Handy?
-
Abstract Classes - A Good Bet
-
Some Uses to Consider Carefully
-
Inheriting for Implementation: Look Before You Leap!
-
Conclusions
-
Inheritance in Eiffel I 194
-
The Inherit Clause
-
Redefining Features
-
Multiple Children
-
The Notion of Polymorphism
-
Renaming Features
-
Summary
-
Exercises
-
Inheritance II 212
-
Abstraction, Types, and Classes
-
Interfaces and Abstract Classes
-
Type Inheritance
-
Implementation Inheritance
-
Design Patterns
-
Internal Iterator
-
A Summary of Two Relationships
-
Inheritance in Eiffel II 221
-
Accessing Old Versions of Features
-
Multiple Inheritance
-
When To Use Multiple Inheritance
-
The "Multiple Deferred + One Effective" Rule
-
Anchored Types
-
Constrained Genericity
-
Conditional Assignment
-
Example: Binary Search Tree and Internal Iterators
-
Summary
-
Exercises
-
Searching and Sorting 242
-
Complexity Measures
-
Measuring Input Size
-
Time Complexity Measures
-
Searching Algorithms
-
Linear Search
-
Introducing "Divide and Conquer"
-
Binary Search with a Sorted Array
-
Using a Binary Search Tree
-
Sorting Algorithms
-
Bubble
-
Merge
-
Heap
-
Quick
-
Summary
-
Exercises
-
Introduction to Software Requirements and Analysis 273
-
A Review of the Software Life Cycle
-
Requirements Gathering
-
Analysis
-
Design
-
Implementation
-
Testing
-
Maintenance
-
Analysis: The Engineering Specification of The Problem
-
Use Cases
-
Object Interaction Diagrams
-
Class Diagrams
-
Prototypes
-
From Analysis to Design
-
Summary
-
Exercises
-
A Survey of Software Testing 285
-
Testing Requirements
-
Group Review
-
Prototyping - System Verification
-
Testing Designs
-
Design Reviews
-
Drivers and Skeletons - System Observation
-
Automatic Design Analysis - Formal Verification
-
Testing Code
-
Code Reviews
-
System Observation
-
Black Box
-
Clear Box
-
Formal Verification
-
Beta Releases: The "Guinea Pig" Approach
-
Summary
-
Graphs 296
-
Definitions
-
How to Express Efficiency
-
Implementations
-
Nodes and Node References
-
Edge Lists
-
Adjacency Matrices
-
Graph Problems
-
Depth-First Search
-
Shortest Path
-
Minimum Spanning Tree
-
Traveling Salesman
-
Other Interesting Problems
-
Summary
-
Exercises