Objects and Systems: Principled Design with Implementations in C++ and Java

1. Object Orientation and State Systems.- 1.1 Finite State Machine Example: Binary Counter.- 1.2 Problems with Nonobject-Oriented Programming.- 1.3 Benefits of Object Orientation: Binary Counter C++ Implementation.- 1.4 Access Restrictions in C++.- 1.5 Instance Generation, Information Hiding, and Restricted Access in OOPS.- Problems.- 2. Object Behavior Specification: Software Blueprints.- 2.1 Object Behavior Specification.- 2.2 Simulating an Object Behavior Specification.- 2.3 Definition of Behavior.- Problems.- 3. Lists: Behavior Specification, Models and Implementations.- 3.1 Domain Restrictions and Legal Sequences.- 3.2 An Abstract Model for the List Specification.- 3.3 Implementations and Models of Lists.- 3.4 Parallel Implementations of Lists.- 3.5 Proving and Testing Correctness.- Problems.- 4. Inheritance Hierarchies and Hierarchical Construction.- 4.1 Specifying and Implementing an and-gate.- 4.2 General Switching Functions.- 4.3 Inheritance and Derived Classes in C++.- 4.4 Using Inheritance for Alternative Implementations.- 4.5 Hierarchical Construction.- 4.6 Summary.- Problems.- 5. Containers: An Object Behavior Specification.- 5.1 Class entity.- 5.2 Container Base Class.- 5.3 Ensemble Methods.- 5.4 Container Subclasses: Unordered.- Problems.- 6. C++ Implementation of a Heterogeneous Container Class Library.- 6.1 HCCL Implementation Strategy.- 6.2 Ensemble Methods in C++.- 6.3 A Macro Approach to Ensemble Methods.- Appendix 1: Ensemble Method Macros.- Appendix 2: C++ Typing Rules That Arise From Inheritance.- Problems.- 7. Testing Based on Behavior Specification.- 7.1 The Look-and-See Method.- 7.2 Testing Rudiments.- 7.3 Blueprint-Based Testing.- 7.4 Constructing Behavior Samples.- 7.5 Testing Constructors for Correct Initialization.- 7.6 State Transition-based Testing.- 7.7 Transition-Based Test Methodology.- 7.8 Transition-Based Testing: More Considerations.- 7.9 Combining the Approaches.- Problems.- 8. Constructing Inheritance Class Hierarchies.- 8.1 How to Construct Inheritance Hierarchies.- 8.2 Class Hierarchy Example: Investments.- 8.3 Portfolio Selection and Rating Specification.- 8.4 Implementing the Investment System.- 8.5 Polymorphism and Dynamic Binding.- 8.6 Extensibility.- Problems.- 9. Ensemble-Based Implementation of Containers.- 9.1 More Ensemble Methods.- 9.2 Implementing Container Classes by Ensemble Methods.- 9.3 Lessons Learned.- Problems.- 10. Ordered Containers and Their Implementation.- 10.1 Class Order.- 10.2 Stacks and Queues.- 10.3 List as a Subclass of Order.- Problems.- Appendix: Specifying list as a Subclass of order.- 11. More Useful Concepts for Containers.- 11.1 Logic Ensemble Methods.- 11.2 Container Equality.- 11.3 Inclusion, Union, Intersection, and Difference.- 11.4 Conversion.- 11.5 Container Comparison.- Problems.- Appendix: Specifying and Implementing Set Theory Operations.- 12. Design Based on Hierarchical Decomposition and Ensemble Methods.- 12.1 Trees as Hierarchical Containers.- 12.2 Tree Computations with Ensemble Methods.- 12.3 A Class of Graphics Puzzles.- 12.4 General Approach to 00 Software Development.- 12.5 Alarming a Building.- 12.6 Summary.- Problems.- Appendix: Specifying a Graphics Puzzle.- 13. Java and Threaded Containers.- 13.1 Basic Java.- 13.2 Distinctive Java Features.- 13.3 Ensemble Methods in Java.- 13.4 General Approach to Ensemble Methods in Java.- 13.5 Synchronization.- 13.6 Hierarchical Graphics Construction in Java.- 13.6 Summary.- Problems.