About the Author Bertrand Meyer is equally at ease in the software industry and in the world of academic computing science. As tbunder of ISE Inc., located in Santa Barbara (Califomia). one of the first companies in the world to devote its activity entirely to object technology, he has played a major role in establishing the industrial viability of the approach. He has directed the design of systems totalling hundreds of thousands ufobject-oriented lines, and thousands oflibrary classes reused in diverse projects throughout the world. He also frequently consults for Fortune 500 companies and has advised several govemments on their computing initiatives. He has been a keynote speaker at many conferences such as OOPSLA, TOOLS, the European Sottware Engineenng Conference, thc Australian Software Engineering Conference, Object Expo, Object World, etc., and has presented hundreds ot' seminars worldwide on a variety of technical and management topics. Aside from his industrial role he has taught at universities in the U.S.. Europe and Australia. As a best-selling author with 10 books to his credit, he has published books with Prentice Hall on theoretical topics (Introduction to the Theory of Programming Languages) as well as industrial applications ot' object technology (Ohject-Oriented Applications) and management issues (Ohject Success: A Munager's Guide to Object Technologv). He is also the author of the definitive reference on the Eiffe! language (Eiffel: The Language). His book Reusable Software is both an extensive di.scussion of the methodological principles of reusable software construction and a detailed description of practical reusable components, based on a "Linnaean taxonomy" ot'the fnndamental objects in computing. He is also the editor ofthe Object-Oriented Series. with more than 25 titles in print hy various authors on many topics ofobject technology.
圖書目錄
Preface
Foreword to the second edition
About the accompanying CD-ROM
On the bibliography, Internet sources and exercises
Contents
PARTA: THEISSUES
Chapter 1: Software quality
1.1 EXTERNAL 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
Chapter 2: Criteria ofobject orientation
2.1 ON THE CRITERIA
2.2 METHOD AND LANGUAGE
2.3 IMPLEMENTATION 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 FIVECRITERIA
3.2 FIVERULES
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 TECHNICAL 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 CONSTRUCTION
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 ASIMPLECLASS
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 BBLIOGRAPHICAL 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 CREATION 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 WTTH 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
9.4 PROGRAMMER-CONTROLLED DEALLOCATION
9.5 THE COMPONENT-LEVEL APPROACH
9.6 AUTOMATIC MEMORY MANAGEMENT
9.7 REFERENCE 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 RELIABILITY MECHANISMS
11.2 ABOUT SOFTWARE CORRECTNESS
11.3 EXPRESSING A SPECIFICATION
11.4 INTRODUCING ASSERTIONS INTO SOFTWARE TEXTS
11.5 PRECONDITIONS AND POSTCONDmONS
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 CONNECTION
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 THETASKOFARESCUECLAUSE
12.6 ADVANCED EXCEPTION HANDLING
12.7 DISCUSSION
12.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
12.9 BIBLIOGRAPHICALNOTES
EXERCISES
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 MEANING OF 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 EXAMPLES 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 CONSTRAINEDGENERICITY
16.5 ASSIGNMENT ATTEMPT
16.6 TYPING AND REDECLARATION
16.7 ANCHORED DECLARATION
16.8 INHERITANCE AND INFORMATION HIDING
16.9 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
16.10 BIBLIOGRAPHICAL NOTE
EXERCISES
Chapter 17: Typing
17.1 THE TYPING 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 ANASSESSMENT
17.9 THE PERFECT FIT
17.10 KEY CONCEPTS STUDIED IN THIS CHAPTER
17.11 BIBLIOGRAPHICAL NOTES
Chapter 18: Global objects and constants
18.1 CONSTANTS OF BASIC TYPES
18.2 USE OF CONSTANTS
18.3 CONSTANTS OF CLASS TYPES
18.4 APPLICATIONS OF ONCE ROUTINES
18.5 CONSTANTS OF STRING TYPE
18.6 UNIQUEVALUES
18.7 DISCUSSION
18.8 KEY CONCEPTS INTRODUCED IN THIS CHAPTER
18.9 BIBLIOGRAPHICAL NOTES
EXERCISES
PARTD: 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 MULTI-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 ASPECTS
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: Principles 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 APPLICATION: THE HANDLE TECHNIQUE
24.4 TAXOMANIA
24.5 USING INHERITANCE: 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: Usetul techniques
25.1 DESIGN PHILOSOPHY
25.2 CLASSES
25.3 INHERITANCE TECHNIQUES
Chapter 26: A sense of style
26.1 COSMETICSMATTERS!
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 BIBLIOGRAPHICAL NOTES
Chapter 29: Teaching the method
29.1 INDUSTRIAL TRAINING
29.2 INTRODUCTORY COURSES
29.3 OTHERCOURSES
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
PARTE: ADVANCED TOPICS
Chapter 30: Concurrency, distribution, client,server and
the Internet
30.1 A SNEAK PREVIEW
30.2 THE RISE 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
30.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-RELATIONALINTEROPERABILITY
31.6 OBJECT-ORIENTED DATABASE FUNDAMENTALS
31.7 0-0 DATABASE SYSTEMS: EXAMPLES
31.8 DISCUSSION: BEYOND 0-0 DATABASES
31.9 KEY CONCEPTS STUDIED IN THIS CHAPTER
31.10 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 32: Some 0-0 techniques for graphical interactive
applications
32.1 NEEDEDTOOLS
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 ADA 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 FORTRAN
34.4 OBJECT-ORIENTED PROGRAMMING AND C
34.5 BIBLIOGRAPHICAL NOTES
EXERCISES
Chapter 35: Simula to Java and beyond: major 0-0 languages
and environments
35.1 SIMULA
35.2 SMALLTALK
35.3 LISP EXTENSIONS
35.4 CEXTENSIONS
35.5 JAVA
35.6 OTHER 0-0 LANGUAGES
35.7 BIBLIOGRAPHICAL NOTES
EXERCISES
PARTG: DOINGITRIGHT
Chapter 36: An object-oriented environment
36.1 COMPONENTS
36.2 THELANGUAGE
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
PARTH: APPENDICES
Appendix A: Extracts from the Base libraries
Appendix B: Genericity versus inheritance
B.l GENERICITY
B.2 INHERITANCE
B.3 EMULATING INHERITANCE WITH GENERICITY
B.4 EMULATINGGENERICITYWITHINHERITANCE
B.5 COMBINING GENERICITY AND INHERITANCE
B.6 KEY CONCEPTS INTRODUCED IN THIS APPENDIX
B.7 BIBLIOGRAPHICAL NOTES
EXERCISES
Appendix C: Principles, rules, precepts and definitions
Appendix D: A glossary ofobject technology
Appendix E: Bibliography
E.l WORKS BY OTHER AUTHORS
E.2 WORKS BY THE AUTHOR OF THE PRESENT BOOK
Index