Design Patterns and Contracts

Preface. I. DESIGN PATTERNS IN A SOFTWARE ENGINEERING CONTEXT. 1. A Software Engineering Perspective. Introduction to Design Patterns. Key Points. Understanding the Notion of Design Patterns. An Example: The Observer Pattern. Describing Design Patterns. Notions Related to Patterns. Design Patterns and Frameworks. Design Patterns in the Software Life Cycle. A Software Engineering Process. Modeling Problems and Solutions with UML. From Problems to Solutions with Patterns. Toward Formalizing a Pattern-Based Software Process. The Common Phases. Two Levels of Decision. Synthesis and Transformations. 2. Object-Oriented Design with Contracts. Supporting Design Patterns with Contracts. Choice of a Language. Covariant Typing. Controlled Multiple Inheritance. Supporting OO Design. Encapsulation and Information Hiding. Modularity and Coupling. Idioms for Implementing Design Patterns. Accessing the Original Version of a Redefined Feature. Implementing Inheritance and Delegation. Class Variables. Finalization. Low Complexity of Routines. Command-Query Distinction. Dealing with Optional Behaviors. Documenting the Use of Design Patterns. Importance of Documentation. Modeling Pattern Roles with Inheritance. Documenting the Use of Patterns with the Indexing Clause. Conclusion. II. GoF DESIGN PATTERNS WITH CONTRACTS. 3. Creational Patterns. The Maze Example. Creating Objects in Eiffel. Using Creational Design Patterns. Abstract Factory (GoF 87). Builder (GoF 97). Factory Method (GoF 107). Prototype (GoF 117). Singleton (GoF 127). 4. Structural Patterns. Adapter (GoF 139). Bridge (GoF 151). Composite (GoF 163). Decorator (GoF 175). Facade (GoF 185). Flyweight (GoF 195). Proxy. 5. Behavioral Patterns. Chain of Responsibility (GoF 223). Command (GoF 233). Interpreter (GoF 243). Iterator (GoF 257). Mediator (GoF 273). Memento (GoF 283). Observer (GoF 293). State (GoF 305). Strategy (GoF 315). Template Method (GoF 325). Visitor (GoF 331). III. BUILDING ON DESIGN PATTERNS. 6. Application to Software Configuration Management. Introduction. Software Configuration Management. Variants in Software Systems. Traditional Solutions. Using SCM Tools. Case Study: The Mercure Software System. Object-Oriented Modeling of Variants. Applying Creational Design Patterns. Compilation Technology. Principle of Type Inference and Code Specialization. The SmallEiffel Compiler. Living and Dead Code in SmallEiffel. Specialized Code Generation in SmallEiffel. Performance Results. Experimental Conditions. Compilation. Memory Footprint and Runtime Performance. Discussion. Bibliographic Notes. Conclusion. 7. Combining Patterns for Building User Interfaces. Problems and Strategies. Building a Model. The Interface Builder Approach. Modal or Nonmodal Interaction: Responsibility versus Forbidding. A Consistent Interface from Uniform Mechanisms. Models and Designs. Two Worlds and a Bridge: From Application to Interface. The Observer: Always the Same Always Different. Graphics Creation and Binding. Keeping Track of Model Path Changes. Triggering Actions: Passing Information Around. Combining and Grouping. Introducing Control: How to Stay Generic. Generating or Reusing: The Limits of Genericity. Analysis and Remarks. Exposing Properties for Further Uses. Reifying Collaborations. Designing Components Using Connection Protocols. Performance Issues. Leaving Room for Evolution. A. Glossary. B. Design Pattern and Design by Contract Pointers. Sources of Information. Frequently Asked Questions (FAQ) (with Answers). Mailing Lists. World Wide Web. USENET. Software Resources. SmallEiffel. Interactive Software Engineering Inc. Halstenbach ACT GmbH. Object Tools Inc. C Design by Contract in Other Languages. Design by Contract in Java. The iContract Tool. A Simple Example. Design by Contract in UML. Introduction to the OCL. A Simple Example. D. More Information about This Book. Bibliography. Index. 0201309599T04062001