Preface Acknowledgments Detailed Book Outline Section I: Software Construction Software Complexity and Modeling Modern Software Software Design Software Utility Software Production Software Engineering The Software Development Life Cycle (SDLC) Software Process Methodologies Models Requirements Analysis and Specification Software Architecture Model View Controller Code Construction Software Integration Documentation Summary Design Insights Software Development Software Execution General Purpose Utility and Support Programming Language Evolution Compilers Software Design ADTs Class Construct Object-Oriented Programming Languages UML Libraries and Frameworks Software Construction Fundamentals Summary Design Insights Section II: Software Fundamentals Functionality Control Flow Structured Control Flow Controlled Interruption to Sequential Execution Readability Boolean Logic Short-Circuit Evaluation Recursion Sequential Execution Optimization Inlining Summary Design Insights Memory Abstraction of Memory Heap Memory C++ Deallocation C#/Java Heap Memory Management Memory Overhead Allocation Memory Reclamation Garbage Collection Reference Counting Design: Storage versus Computation Summary Design Insights Design and Documentation Object-Oriented Design Class Functionality Constructors Accessors and Mutators Utility Functions Destructors Programming by Contract Defensive Programming Precondition and Postcondition Invariants Design Example Contractual Expectations OO Design Principles Summary Design Insights Section III: Software Design Structural Design Relationships Composition Containment Class Design: Has-a or Holds-a? Inheritance Automate Subtype Checking Inheritance Design Code Reuse Class Design: Has-a or Is-a? Contractual Expectations OO Design Principles Summary Design Insights Behavioral Design Inheritance for Functionality Polymorphism Overloading Generics Subtype Polymorphism Static Binding versus Dynamic Binding Heterogeneous Collections Virtual Function Table Software Design Abstract Classes Real-World Example: Disassembler Virtual Function Table Language Differences Type Introspection C++ Virtual Destructors Accessibility of C++ Virtual Functions OO Design Principles Summary Design Insights Design Alternatives and Perspectives Comparative Design Class Design Types Concrete Class Abstract Class Node Class Wrappers Delegate Handle: Smart Pointers Design Specifications for Inheritance Inheritance versus Composition Multiple Inheritance Multiple Inheritance Imperfections Single Inheritance with Composition Simulated Design without Inheritance Multiple Inheritance Design Evaluating Design Options Relevance of Type OO Design Principles Summary Design Insights Section IV: Software Durability Software Correctness Exceptions Exceptions and Software Design Testing Design Scale Perspective Coverage Data Values Software Qualities Summary Design Insights Software Longevity Software Maintenance Software Evolution Nonfunctional Properties Refactoring Reverse Engineering Summary Design Insights Glossary: Definitions and Conceptual Details References Appendix A: Memory and the Pointer Construct Appendix B: Heap Memory and Aliases Appendix C: Function Pointers Appendix D: Operator Overloading Index velopment Software Execution General Purpose Utility and Support Programming Language Evolution Compilers Software Design ADTs Class Construct Object-Oriented Programming Languages UML Libraries and Frameworks Software Construction Fundamentals Summary Design Insights Section II: Software Fundamentals Functionality Control Flow Structured Control Flow Controlled Interruption to Sequential Execution Readability Boolean Logic Short-Circuit Evaluation Recursion Sequential Execution Optimization Inlining Summary Design Insights Memory Abstraction of Memory Heap Memory C++ Deallocation C#/Java Heap Memory Management Memory Overhead Allocation Memory Reclamation Garbage Collection Reference Counting Design: Storage versus Computation Summary Design Insights Design and Documentation Object-Oriented Design Class Functionality Constructors Accessors and Mutators Utility Functions Destructors Programming by Contract Defensive Programming Precondition and Postcondition Invariants Design Example Contractual Expectations OO Design Principles Summary Design Insights Section III: Software Design Structural Design Relationships Composition Containment Class Design: Has-a or Holds-a? Inheritance Automate Subtype Checking Inheritance Design Code Reuse Class Design: Has-a or Is-a? Contractual Expectations OO Design Principles Summary Design Insights Behavioral Design Inheritance for Functionality Polymorphism Overloading Generics Subtype Polymorphism Static Binding versus Dynamic Binding Heterogeneous Collections Virtual Function Table Software Design Abstract Classes Real-World Example: Disassembler Virtual Function Table Language Differences Type Introspection C++ Virtual Destructors Accessibility of C++ Virtual Functions OO Design Principles Summary Design Insights Design Alternatives and Perspectives Comparative Design Class Design Types Concrete Class Abstract Class Node Class Wrappers Delegate Handle: Smart Pointers Design Specifications for Inheritance Inheritance versus Composition Multiple Inheritance Multiple Inheritance Imperfections Single Inheritance with Composition Simulated Design without Inheritance Multiple Inheritance Design Evaluating Design Options Relevance of Type OO Design Principles Summary Design Insights Section IV: Software Durability Software Correctness Exceptions Exceptions and Software Design Testing Design Scale Perspective Coverage Data Values Software Qualities Summary Design Insights Software Longevity Software Maintenance Software Evolution Nonfunctional Properties Refactoring Reverse Engineering Summary Design Insights Glossary: Definitions and Conceptual Details References Appendix A: Memory and the Pointer Construct Appendix B: Heap Memory and Aliases Appendix C: Function Pointers Appendix D: Operator Overloading Index ;lt;/P> Recursion Sequential Execution Optimization Inlining Summary Design Insights Memory Abstraction of Memory Heap Memory C++ Deallocation C#/Java Heap Memory Management Memory Overhead Allocation Memory Reclamation Garbage Collection Reference Counting Design: Storage versus Computation Summary Design Insights Design and Documentation Object-Oriented Design Class Functionality Constructors Accessors and Mutators Utility Functions Destructors Programming by Contract Defensive Programming Precondition and Postcondition Invariants Design Example Contractual Expectations OO Design Principles <.
Software Essentials : Design and Construction