Previous Section  < Free Open Study >  Next Section

  
• Table of Contents
Object-Oriented Design Heuristics
By Arthur J. Riel
 
Publisher: Addison Wesley
Pub Date: April 30, 1996
ISBN: 0-201-63385-X
Pages: 400
Slots: 1   


   Copyright
   Preface
   Acknowledgements
   Chapter 1.  The Motivation for Object-Oriented Programming
      Section 1.1.  Revolutionists, Evolutionists, and the Object-Oriented Paradigm
      Section 1.2.  Accidental Versus Essential Complexity à la Frederick Brooks
      Section 1.3.  The Waterfall Model
      Section 1.4.  The Iterative Model
      Section 1.5.  Same- Versus Different-Language Prototyping
      Section 1.6.  Software Reusability
      Section 1.7.  Corporate Hierarchies of Good Designers
      Glossary of Terms
   Chapter 2.  Classes and Objects: The Building Blocks of the Object-Oriented Paradigm
      Section 2.1.  Introduction to Classes and Objects
      Section 2.2.  Messages and Methods
      Section 2.3.  Class Coupling and Cohesion
      Section 2.4.  Dynamic Semantics
      Section 2.5.  Abstract Classes
      Section 2.6.  Roles Versus Classes
      Glossary of Terms
      Summary of Heuristics
   Chapter 3.  Topologies of Action-Oriented Versus Object-Oriented Applications
      Section 3.1.  Differences in Application Topologies
      Section 3.2.  When the Action-Oriented Paradigm Goes Right
      Section 3.3.  The God Class Problem (Behavioral Form)
      Section 3.4.  Another Example of Poor System Intelligence Distribution
      Section 3.5.  The God Class Problem (Data Form)
      Section 3.6.  The Proliferation of Classes Problem
      Section 3.7.  The Role of Agent Classes
      Section 3.8.  Examining the Use of Separate Entity and Controller Classes
      Glossary of Terms
      Summary of Heuristics
   Chapter 4.  The Relationships Between Classes and Objects
      Section 4.1.  Introduction to Class and Object Relationships
      Section 4.2.  The Uses Relationship
      Section 4.3.  Six Different Ways to Implement the Uses Relationship
      Section 4.4.  Heuristics for the Uses Relationship
      Section 4.5.  Refining the Amount of Collaboration Between Two Classes
      Section 4.6.  The Containment Relationship
      Section 4.7.  Semantic Constraints Between Classes
      Section 4.8.  Attributes Versus Contained Classes
      Section 4.9.  More Containment Heuristics
      Section 4.10.  A Relationship Between Uses and Containment?
      Section 4.11.  Containment by Value Versus Containment by Reference
      Glossary of Terms
      Summary of Heuristics
   Chapter 5.  The Inheritance Relationship
      Section 5.1.  Introduction to the Inheritance Relationship
      Section 5.2.  Overriding Base Class Methods in Derived Classes
      Section 5.3.  The Use of the Protected Section of a Base Class
      Section 5.4.  The Width and Depth of Inheritance Hierarchies
      Section 5.5.  Private, Protected, and Public Inheritance à la C+ +
      Section 5.6.  A Real-World Example of Specialization
      Section 5.7.  Heuristics That Trade Off Design Complexity and Flexibility
      Section 5.8.  A Real-World Example of Generalization
      Section 5.9.  The Mechanism of Polymorphism
      Section 5.10.  A Problem with the Use of Inheritance as a Reusability Mechanism
      Section 5.11.  An Inheritance Solution to an Interrupt-Driven Architecture
      Section 5.12.  Inheritance Hierarchies Versus Attributes
      Section 5.13.  The Confusion of the Need for Inheritance Versus an Object's Dynamic Semantics
      Section 5.14.  Using Inheritance to Hide the Representation of a Class
      Section 5.15.  Mistaking Objects for Derived Classes
      Section 5.16.  Mistaking Object Generalization for the Need to Build Classes at Runtime
      Section 5.17.  The Attempt to NOP a Base Class Method in Its Derived Class(es)
      Section 5.18.  The Implementation of Optional Parts of Objects
      Section 5.19.  A Problem with No Optimal Solution
      Section 5.20.  Reusing Components Versus Reusing Frameworks
      Glossary
      Summary of Heuristics
   Chapter 6.  Multiple Inheritance
      Section 6.1.  Introduction to Multiple Inheritance
      Section 6.2.  The Common Misuse of Multiple Inheritance
      Section 6.3.  A Valid Use of Multiple Inheritance
      Section 6.4.  Accidental Complexity In Languages That Do Not Support Multiple Inheritance
      Section 6.5.  Frameworks That Incorporate Multiple Inheritance
      Section 6.6.  The Use of Multiple Inheritance in the Design of Mixins
      Section 6.7.  DAG Multiple Inheritance
      Section 6.8.  Accidental DAG Multiple Inheritance via Poor Implementation of Optional Containment
      Glossary
      Heuristics Summary
   Chapter 7.  The Association Relationship
      Section 7.1.  Introduction to Association
      Section 7.2.  Associations Implemented Through a Referential Attribute
      Section 7.3.  Association Implemented Through a Third-Party Class
      Section 7.4.  Deciding Between a Containment and an Association Relationship
      Glossary
      Heuristics Summary
   Chapter 8.  Class-Specific Data and Behavior
      Section 8.1.  Introduction to Class-Specific Versus Object-Specific Data and Behavior
      Section 8.2.  Using Metaclasses to Capture Class-Specific Data and Behavior
      Section 8.3.  Using Language-Level Keywords to Implement Class-Versus Object-Specific Data and Behavior
      Section 8.4.  Metaclasses à la C++
      Section 8.5.  A Useful Abstract Class That Is Not a Base Class?
      Glossary
      Heuristics Summary
   Chapter 9.  Physical Object-Oriented Design
      Section 9.1.  The Role of Logical and Physical Object-Oriented Design
      Section 9.2.  The Construction of Object-Oriented Wrappers
      Section 9.3.  Persistence in an Object-Oriented System
      Section 9.4.  Memory Management Issues in an Object-Oriented Application
      Section 9.5.  Minimal Public Interfaces for Reusable Components
      Section 9.6.  Implementing Safe Shallow Copies
      Section 9.7.  Concurrent Object-Oriented Programming
      Section 9.8.  Implementing Object-Oriented Designs in Nonobject-Oriented Languages
      Glossary
      Summary of Heuristics
   Chapter 10.  The Relationship Between Heuristics and Patterns
      Section 10.1.  Heuristics Versus Patterns
      Section 10.2.  Transitivity Among Design Transformation Patterns
      Section 10.3.  The Reflexive Property of Design Transformation Patterns
      Section 10.4.  Other Design Transformation Patterns
      Section 10.5.  Future Research
   Chapter 11.  The Use of Heuristics in Object-Oriented Design
      Section 11.1.  The ATM Problem
      Section 11.2.  Choosing a Methodology
      Section 11.3.  A First Attempt at Producing an Object Model for the ATM
      Section 11.4.  Adding Behavior to Our Object Model
      Section 11.5.  Explicit Case Analysis Due to Accidental Complexity
      Section 11.6.  Messaging Objects in Different Address Spaces
      Section 11.7.  The Processing of the Transaction
      Section 11.8.  Returning to the Domain of the ATM
      Section 11.9.  Other Miscellaneous Issues
      Section 11.10.  Conclusion
   Appendix A.  Heuristics Summary
      Chapter 2 Classes and Objects: The Building Blocks of the Object-Oriented Paradigm
      Chapter 3 Topologies of Action-Oriented Versus Object-Oriented Applications
      Chapter 4 The Relationships Between Classes and Objects
      Chapter 5 The Inheritance Relationship
      Chapter 6 Multiple Inheritance
      Chapter 7 The Association Relationship
      Chapter 8 Class-Specific Data and Behavior
      Chapter 9 Physical Object-Oriented Design
   Appendix B.  The Prevention of Memory Leakage
      Leak #1
      Example Code for Leak #1
      Leak #2
      Example Code for Leak #2
      Leak #3
      Example Code for Leak #3
      Leak #4
      Example Code for Leak #4
      Leak #5
      Example Code for Leak #5
      Leak #6
      Example Code for Leak #6
      Leak #7
      Returning a Reference to a Stack Object
      Returning an Internal Static Object Reference
      Returning a Memory Leaking Dynamically Allocated Object
      Correct Method for Leak #7
      Leak #8
      Code Example for Memory Leakage #8
   Appendix C.  Selected C++ Examples
      Selected C++ Example #2
      Selected C++ Example #4
      Selected C++ Example #5
      Selected C++ Example #9
      Selected C++ Example #10
      Selected C++ Example #15
      Selected C++ Example #17
      Selected C++ Example #18
      Selected C++ Example #19
      Selected C++ Example #20
      Selected C++ Example #21
      The ATM Side of the Application
      The Atm.hpp File
      The Atm.cpp File
      The Bank Side of the Application
      The Bank.hpp File
      The Bank.cpp File
      The Common Classes
      The Trans.hpp File
      The Trans.cpp File
      The Network.hpp File
      The Network.cpp File
   Bibliography
   Other Books Used for Reference in This Text
Previous Section  < Free Open Study >  Next Section