CSE687 - Object Oriented Design

Lecture #10 - Substitution Principle

Revised: 17 February 2009
Home Courses Code Handouts CoreTech Books Articles Math Research Masters Projects SWDev WebDev News OtherLinks SiteDesign Graduates AllPages Office Hours Notices Contents

CSE681-SWMAA CSE686-IP CSE687-OOD CSE775-DO CSE776-DP CSE778-AWP CSE784-SWS

Lecture #01 Lecture #02 Lecture #03 Lecture #04 Lecture #05 Lecture #06 Lecture #07
Lecture #08 Lecture #09 Lecture #10 Lecture #11 Lecture #12 Lecture #13 Lecture #14
Lecture #15 Lecture #16 Lecture #17 Lecture #18 Lecture #19 Lecture #20 Lecture #21
Lecture #22 Lecture #23 Lecture #24 Lecture #25 Lecture #26 Lecture #27 Lecture #28

Contents Syllabus SG - Design SG - Templates SG - Class Relationships

Web Resources:

Stroustrup's Home Page, Assoc. of C/C++ Users, C++ at Microsoft, Code Project, Sells Brothers, Guru of the Week, C/C++ User's Journal, devCentral, Dr. Dobb's Journal, Boost Library, techNetCast

Office Hours: Instructor & TAs

Content:

This lecture covers the Liskov Substitution Principle and its powerful applications in design. Polymorphism follows directly from Liskov Substitutability and helps us build loosely coupled systems.
  1. Syllabus
    Describes topics to be covered, reading material for you to digest before coming to class, and due dates for the assigned projects.
  2. Project #2
  3. Project #2 Help, Help with Graph implementations
  4. Class Layout demo
  5. Using Inheritance
    Discusses several distinct design uses for inheritance.
  6. The Command Pattern is an interesting application of inheritance:
    Simple Callbacks - Function Pointers
    Callbacks - Command Pattern
    Callbacks - Commands to either global and member functions
  7. Virtual Function Pointer Table structure
  8. hiding
    Illustrates errors caused by inappropriate overloading and use of default parameters.
  9. importance of virtual destructors
    Demonstrates problems caused by omission of virtual destructors.
  10. Vectors of Polymorphic Objects - Example Project
    Shows how to use heterogeneous objects in an STL container.
  11. Liskov Substitution Principle
    This is a fundamental OOD principle, with some surprising subtleties when using C++ (see example project below).
  12. Non-Virtual Interface Principle - a code example: see comments for explaination
    Liskov Substitutibility does not demand public virtual functions.
  13. C++ Casts
  14. Design Rules
    Design rules and idioms that transcend Object Oriented Design.