Definition: Object Oriented Design
Structuring design of an application with classes and class relationships.
Core Presentations
-
Class Relationships,
Example Relationships,
Example code
Illustrates complete set of class relationships: inheritance, composition, aggregation, using.
-
Software Design Goals
Describes design goals and attributes for large software projects.
-
Design Principles
Discusses Liskov Substitution, Open and Closed, Dependency Inversion, and Interface Segregation principles.
-
Design Strategies
Discusses general design and more specific OOD strategies.
-
Design Notes
Discusses interface design and some cautions for team development.
-
Design Guidelines
A bag of design ideas, suggestions, and advice.
-
Value Types,
Code Example: Str Class
Complete discussion of building a reusable package, using a string class as an example.
-
Hiding and Other Evils,
Code Demo
Demonstrates one of the dark corners of the C++ programming language.
-
Packages,
Code Example: Str Pkg
A package is a physical packaging of code in (two) files.
-
Notation
Diagram notation used to describe software designs.
Further details in UML Tutorial
|
Design Concepts:
-
Encapsulate classes and packages
-
Prime Directives: No Surprises, Maximize Cohesion, Minimize Coupling, Keep it Small and Simple
-
Distinguish between application-side and solution-side
-
Use Namespaces to define a Project Taxonomy
-
Top-Down design
-
Bottom-up design
-
Incremental Development
-
Partitioning: classes, packages, processes, and machines
-
Distinguish between Interface, Abstract Class, and Concrete Class
-
Component: Interface, Object Factory, Concrete Implementation, DLL package
-
Delegation and Events
-
Asynchronous Messaging
-
Principle of Least Knowledge
Design Notes:
-
Software size matters
-
Package structure is important
-
Favor local consequences
-
Extract function instead of cut and paste
-
Display information, not data
-
Distinguish between test types: construction, unit, and regression tests
-
Power and perils of sharing
-
Robustness: validate user input and directory specifications
Language Notes:
-
Distinguish between Value and Reference Types
-
Resource Acquizition is Initialization (RAII)
-
Implementing Initialization
-
Virtual Function Pointer Tables
|