Preface
Foreword to the second edition
About the accompanying CD-ROM
On the bibliography, Internet sources and exercises
Contents
Part A: THE ISSUES
Chapter 1: Software quality
1.1 EXTERANL AND INTERNAL FACTORS
1.2 A REVIEW OF EXTERNAL FACTORS
1.3 ABOUT SOFTWARE MAINTENANCE
1.4 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
1.5 BIBLIOGRAPHICAL NOTES
Chater 2: Criteria of object orientation
2.1 ON THE CRITERIA
2.2 METHOD AND LANGUAGE
2.3 IMPLEMENTATOIN AND ENVIRONMENT
2.4 LIBRARIES
2.5 FOR MORE SNEAK PREVIEW
2.6 BIBLIOGRAPHICAL NOTES AND OBJECT RESOURCES
Part B: THE ROAD TO OBJECT ORIENTATION
Chapter 3: Modularity
3.1 FIVE CRITERIA
3.2 FIVE RULES
3.3 FIVE PRINCIPLES
3.4 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
3.5 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 4: Approaches to reusability
4.1 THE GOALS OF REUSABILITY
4.2 WHAT SHOULD WE REUSE?
4.3 REPETITION IN SOFTWARE DEVELOPMENT
4.4 NON-TECHNICAL OBSTACLES
4.5 THE TECHNICLA PROBLEM
4.6 FIVE REQUIREMENTS ON MODULE STRUCTURES
4.7 TRADITIONAL MODULAR STRUCTURES
4.8 OVERLOADING AND GENERICITY
4.9 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
4.10 BIBLIOGRAPHICAL NOTES
Chapter 5: Towards object technology
5.1 THE INGREDIENTS OF COMPUTATION
5.2 FUNCTIONAL DECOMPOSITION
5.3 OBJECT-BASED DECOMPOSITION
5.4 OBJECT-ORIENTED SOFTWARE CONSTRUCTOIN
5.5 ISSUES
5.6 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
5.7 BIBLIOGRAPHICAL NOTES
Chapter 6: Abstract data types
6.1 CRITERIA
6.2 IMPLEMENTATION VARIATIONS
6.3 TOWARDS AN ABSTRACT VIEW OF OBJECTS
6.4 FORMALIZING THE SPECIFICATION
6.5 FROM ABSTRACT DATA TYPES TO CLASSES
6.6 BEYOND SOFTWARE
6.7 SUPPLEMENTARY TOPICS
6.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
6.9 BIBLIOGRAPHICAL NOTES
EXERCISES
Part C: OBJECT-ORIENTED TECHNIQUES
Chapter 7: The static structure: classes
7.1 OBJECTS ARE NOT THE SUBJECT
7.2 AVOIDING THE STANDARD CONFUSION
7.3 THE ROLE OF CLASSES
7.4 A UNIFORM TYPE SYSTEM
7.5 A SIMPLE CLASS
7.6 BASIC CONVENTIONS
7.7 THE OBJECT-ORIENTED STYLE OF COMPUTATION
7.8 SELECTIVE EXPORTS AND INFORMATION HIDING
7.9 PUTTING EVERYTHING TOGETHER
7.10 DISCUSSION
7.11 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
7.12 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 8: The run-time structure:objects
8.1 OBJECTS
8.2 OBJECTS AS A MODELING TOOL
8.3 MANIPULATING OBJECTS AND REFERENCES
8.4 CREATINO PROCEDURES
8.5 MORE ON REFERENCES
8.6 OPERATIONS ON REFERENCES
8.7 COMPOSITE OBJECTS AND EXPANDED TYPES
8.8 ATTACHMENT: REFERENCE AND VALUE SEMANTICS
8.9 DEALING WITH REFERENCES: BENEFITS AND DANGERS
8.10 DISCUSSION
8.11 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
8.12 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 9: Memory management
9.1 WHAT HAPPENS TO OBJECTS
9.2 THE CASUAL APPROACH
9.3 RECLAIMING MEMORY: THE ISSUES
8.4 PROGRAMMER-CONTROLLED DEALLOCATION
9.5 THE COMPONENT-LEVEL APPROACH
9.6 AUTOMATIC MEMORY MANAGEMENT
9.7 PEFERENCE COUNTING
9.8 GARBAGE COLLECTION
9.9 PRACTICAL ISSUES OF GARBAGE COLLECTION
9.10 AN ENVIRONMENT WITH MEMORY MANAGEMENT
9.11 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
9.12 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 10: Genericity
10.1 HORIZONTAL AND VERTICAL TYPE GENERALIZATION
10.2 THE NEED FOR TYPE PARAMETERIZATION
10.3 GENERIC CLASSES
10.4 ARRAYS
10.5 THE COST OF GENERICITY
10.6 DISCUSSION: NOT DONE YET
10.7 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
10.8 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 11: Design by Contract: building reliable software
11.1 BASIC RELIABLILITY MECHANISMS
11.2 ABOUT SOFTWARE CORRECTNESS
11.3 EXPRESSING A SPECIFICATION
11.4 INTRODUCING ASSERTIONS INTO SOFTWARE TEXTS
11.5 PRECONDITIONS AND POSTCONDITIONS
11.6 CONTRACTING FOR SOFTWARE RELIABILITY
11.7 WORKING WITH ASSERTIONS
11.8 CLASS INVARIANTS
11.9 WHEN IS A CLASS CORRECT?
11.10 THE ADT CONNECTOIN
11.11 AN ASSERTION INSTRUCTION
11.12 LOOP INVARIANTS AND VARIANTS
11.13 USING ASSERTIONS
11.14 DISCUSSION
11.15 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
11.16 BIBLIOGRAPHICAL NOTES
EXERCISES
POSTSCRIPT: THE ARIANE 5 FAILURE
Chapter 12: When the contract is broken: exception handling
12.1 BASIC CONCEPTS OF EXCEPTION HANDLING
12.2 HANDLING EXCEPTIONS
12.3 AN EXCEPTION MECHANISM
12.4 EXCEPTION HANDLING EXAMPLES
12.5 THE TASK OF A RESCUE CLAUSE
12.6 ADVANCED EXCEPTION HANDLING
12.7 DISCUSSION
12.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
12.9 BIBLIOGRAPHICAL NOTES
EXERCLSES
Chapter 13: Supporting mechanisms
13.1 INTERFACING WITH NON-O-O SOFTWARE
13.2 ARGUMENT PASSING
13.3 INSTRUCTIONS
13.4 EXPRESSIONS
13.5 STRINGS
13.6 INPUT AND OUTPUT
13.7 LEXICAL CONVENTIONS
13.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
EXERCISES
Chapter 14: Introduction to inheritance
14.1 POLYGONS AND RECTANGLES
14.2 POLYMORPHISM
14.3 TYPING FOR INHERITANCE
14.4 DYNAMIC BINDING
14.5 DEFERRED FEATURES AND CLASSES
14.6 REDECLARATION TECHNIQUES
14.7 THE MANING FO INHERITANCE
14.8 THE ROLE OF DEFERRED CLASSES
14.9 DISCUSSION
14.10 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
14.11 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 15: Multiple inheritance
15.1 EMAMPLES OF MULTIPLE INHERITANCE
15.2 FEATURE RENAMING
15.3 FLATTENING THE STRUCTURE
15.4 REPEATED INHERITANCE
15.5 DISCUSSION
15.6 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
15.7 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 16: Inheritance techniques
16.1 INHERITANCE AND ASSERTIONS
16.2 THE GLOBAL INHERITANCE STRUCTURE
16.3 FROZEN FEATURES
16.4 CONSTRAINED GENERICITY
16.5 ASSIGNMENT APTTEMPT
16.6 TYPING AND REDECLARATOIN
16.7 ANCHORED DECLARATION
16.8 INHERITANCE AND INFORMATOIN HIDING
16.9 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
16.10 BIBLIOGRAPHICAL NOTE
EXERCISES
Chapter 17: Typing
17.1 THE TYUPING PROBLEM
17.2 STATIC TYPING: WHY AND HOW
17.3 COVARIANCE AND DESCENDANT HIDING
17.4 FIRST APPROACHES TO SYSTEM VALIDITY
17.5 RELYING ON ANCHORED TYPES
17.6 GLOBAL ANALYSIS
17.7 BEWARE OF POLYMORPHIC CATCALLS!
17.8 AN ASSESSMENT
17.9 THE PERFECT FIT
17.10 KEY CONCEPTS STUDIED IN THIS CHAPTER
17.11 BIBLIOGRAPHICAL NOTES
Chapter 18: Global objeects and constants
18.1 CONSTANTS OF BASIC TYPES
18.2 USE OF CONSTANTS
18.3 CONSTANTS OF CLASS TYPES
18.4 APPLICATOINS OF ONCE ROUTINES
18.5 CONSTANTS OF STRING TYPE
18.6 UNIQUE VALUES
18.7 DISCUSSION
18.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
18.9 BIBLIOGRAPHICAL NOTES
EXERCISES
Part D: OBJECT-ORIENTED METHODOLOGY: APPLYING THE METHOD WELL
Chapter 19: On methodology
19.1 SOFTWARE METHODOLOGY: WHY AND WHAT
19.2 DEVISING GOOD RULES: ADVICE TO THE ADVISORS
19.3 ON USING METAPHORS
19.4 THE IMPORTANCE OF BEING HUMBLE
19.5 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 20: Design pattern: multi-panel interactive systems
20.1 MULT-PANEL SYSTEMS
20.2 A SIMPLE-MINDED ATTEMPT
20.3 A FUNCTIONAL, TOP-DOWN SOLUTION
20.4 A CRITIQUE OF THE SOLUTION
20.5 AN OBJECT-ORIENTED ARCHITECTURE
20.6 DISCUSSION
20.7 BIBLIOGRAPHICAL NOTE
Chapter 21: Inheritance case study: "undo" in an interactive system
21.1 PERSEVERARE DIABOLICUM
21.2 FINDING THE ABSTRACTIONS
21.3 MULTI-LEVEL UNDO-REDO
21.4 IMPLEMENTATION ASPECRTS
21.5 A USER INTERFACE FOR UNDOING AND REDOING
21.6 DISCUSSION
21.7 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 22: How to find the classes
22.1 STUDYING A REQUIREMENTS DOCUMENT
22.2 DANGER SIGNALS
22.3 GENERAL HEURISTICS FOR FINDING CLASSES
22.4 OTHER SOURCES OF CLASSES
22.5 REUSE
22.6 THE METHOD FOR OBTAINING CLASSES
22.7 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
22.8 BIBLIOGRAPHICAL NOTES
Chapter 23: Priniples of class design
23.1 SIDE EFFECTS IN FUNCTIONS
23.2 HOW MANY ARGUMENTS FOR A FEATURE?
23.3 CLASS SIZE: THE SHOPPING LIST APPROACH
23.4 ACTIVE DATA STRUCTURES
23.5 SELECTIVE EXPORTS
23.6 DEALING WITH ABNORMAL CASES
23.7 CLASS EVOLUTION: THE OBSOLETE CLAUSE
23.8 DOCUMENTING A CLASS AND A SYSTEM
23.9 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
23.10 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 24: Using inheritance well
24.1 HOW NOT TO USE INHERITANCE
24.2 WOULD YOU RATHER BUY OR INHERIT?
24.3 AN APPLICATOIN: THE HANDLE TECHNIQUE
24.4 TAXOMANIA
24.5 USING INHERTANCE: A TAXONOMY OF TAXONOMY
24.6 ONE MECHANISM, OR MORE?
24.7 SUBTYPE INHERITANCE AND DESCENDANT HIDING
24.8 IMPLEMENTATION INHERITANCE
24.9 FACILITY INHERITANCE
24.10 MULTIPLE CRITERIA AND VIEW INHERITANCE
24.11 HOW TO DEVELOP INHERITANCE STRUCTURES
24.12 A SUMMARY VIEW: USING INHERITANCE WELL
24.13 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
24.14 BIBLIOGRAPHICAL NOTES
24.15 APPENDIX: A HISTORY OF TAXONOMY
EXERCISES
Chapter 25: useful techniques
25.1 DESIGN PHILOSOPHY
25.2 CLASSES
25.3 INHERITANCE TECHNIQUES
Chapter 26: A sense of style
26.1 COSMETICS MATTERS!
26.2 CHOOSING THE RIGHT NAMES
26.3 USING CONSTANTS
26.4 HEADER COMMENTS AND INDEXING CLAUSES
26.5 TEXT LAYOUT AND PRESENTATION
26.6 FONTS
26.7 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 27: Object-oriented analysis
27.1 THE GOALS OF ANALYSIS
27.2 THE CHANGING NATURE OF ANALYSIS
27.3 THE CONTRIBUTION OF OBJECT TECHNOLOGY
27.4 PROGRAMMING A TV STATION
27.5 EXPRESSING THE ANALYSIS: MULTIPLE VIEWS
27.6 ANALYSIS METHODS
27.7 THE BUSINESS OBJECT NOTATION
27.8 BIBLIOGRAPHY
Chapter 28: The software construction process
28.1 CLUSTERS
28.2 CONCURRENT ENGINEERING
28.3 STEPS AND TASKS
28.4 THE CLUSTER MODEL OF THE SOFTWARE LIFECYCLE
28.5 GENERALIZATION
28.6 SEAMLESSNESS AND REVERSIBILITY
28.7 WITH US, EVERYTHING IS THE FACE
28.8 KEY CONCEPTS COVERED IN THIS CHAPTER
28.9 BIBLIOGRAPHIC AL NOTES
Chapter 29: Teaching the method
29.1 INDUSTRIAL TRAINING
29.2 INTRODUCTORY COURSES
29.3 OTHER COURSES
29.4 TOWARDS A NEW SOFTWARE PEDAGOGY
29.5 AN OBJECT-ORIENTED PLAN
29.6 KEY CONCEPTS STUDIED IN THIS CHAPTER
29.7 BIBLIOGRAPHICAL NOTES
Part E: ADVANCED TOPICS
Chapter 30: Concurrency, distribution, client-server and the Internet
30.1 A SNEAK PREVIEW
30.2 THE RESE OF CONCURRENCY
30.3 FROM PROCESSES TO OBJECTS
30.4 INTRODUCING CONCURRENT EXECUTION
30.5 SYNCHRONIZATION ISSUES
30.6 ACCESSING SEPARATE OBJECTS
30.7 WAIT CONDITIONS
39.8 REQUESTING SPECIAL SERVICE
30.9 EXAMPLES
30.10 TOWARDS A PROOF RULE
30.11 A SUMMARY OF THE MECHANISM
30.12 DISCUSSION
30.13 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
30.14 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 31: Object persistence and databases
31.1 PERSISTENCE FROM THE LANGUAGE
31.2 BEYOND PERSISTENCE CLOSURE
31.3 SCHEMA EVOLUTION
31.4 FROM PERSISTENCE TO DATABASES
31.5 OBJECT-RELATIONAL INTEROPERABILITY
31.6 OBJECT-ORIENTED DATABASE FUNDAMENTALS
31.7 O-O DATABASE SYSTEMS: EXAMPLES
31.8 DISCUSSION: BEYOND O-OOOO DATABASES
31.9 KEY CONCEPTS STUDIED IN THIS CHAPTER
31.10 BIBLIOGRAPHICAL NOTES
Chapter 32: Some O-O techniques for graphical interactive applications
32.1 NEEDED TOOLS
32.2 PORTABILITY AND PLATFORM ADAPTATION
32.3 GRAPHICAL ABSTRACTIONS
32.4 INTERACTION MECHANISMS
32.5 HANDLING THE EVENTS
32.6 A MATHEMATICAL MODEL
32.7 BIBLIOGRAPHICAL NOTES
Part F: APPLYING THE METHOD IN VARIOUS LANGUAGES AND ENVIRONMENTS
Chapter 33: O-O programming and Ada
33.1 A BIT OF CONTEXT
33.2 PACKAGES
33.3 A STACK IMPLEMENTATION
33.4 HIDING THE REPRESENTATION: THE PRIVATE STORY
33.5 EXCEPTIONS
33.6 TASKS
33.7 FROM ADA TO ADS 95
33.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
33.9 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 34: Emulating object technology in non-O-O environments
34.1 LEVELS OF LANGUAGE SUPPORT
34.2 OBJECT-ORIENTED PROGRAMMING IN PASCAL?
34.3 FORTAN
34.4 OBJECT-ORIENTED PROGRAMMING AND C
34.5 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 35: Simula to Java and beyond: major O-O languages and environments
35.1 SIMULA
35.2 SMALLTALK
35.3 LISP EXTENSIONS
35.4 C EXTENSIONS
35.5 JAVA
35.6 OTHER O-O LANGUAGES
35.7 BIBLIOGRAPHICAL NOTES
EXERCISES
Part G: DOING RIGHT
Chapter 36: An object-oriented environment
36.1 COMPONENTS
36.2 THE LANGUAGE
36.3 THE COMPILATION TECHNOLOGY
36.4 TOOLS
36.5 LIBRARIES
36.6 INTERFACE MECHANISMS
36.7 BIBLIOGRAPHICAL NOTES
Epilogue, In Full Frankness Exposing the Language
Part H: Appendices
Appendix A: Extracts from the Base libraries
Appendix B: Genericity versus inheritance
B.1 GENERICITY
B.2 INHERITANCE
B.3 EMULATING INHERITANCE WITH GENERICITY
B.4 EMULATING GENERICITY WITH INHERITANCE
B.5 COMBINING GENERICITY AND INHERITANCE
B.6 KEY CONCEPTS INTRODUCED IN THIS APPENDIX
B.7 BIBLIOGRAPHICAL NOTES
EXERCLISES
Appendix C: Principles, rules, precepts and definitions
Appendix D: A glossary of object technology
Appendix E: bibliography
E.1 WORKS BY OTHER AUTHORS
E.2 WORKS BY THE AUTHOR FOF THE PRESENT OOK
Index