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.
Syllabus Describes topics to be covered,
reading material for you to digest before coming to class, and due dates
for the assigned projects.
Resources for Project #2: - Source code publisher for projects Project #2 statement,
Project2HelpS2019
OODProject2Helper adds show/hide capability to the demo output.
I've put an updated version of the Parser in the
Project2HelpS2019 folder.
It fixes a bug I spotted in the AST display. I've wanted to update the tokenizer
to a State-Based model, like we used in CSE681 - Software Modeling and Analysis, Fall 2018.
That turned out to be a bit more work than I expected, but the results seem solid, and
I recommend its use for Project #2.
You will find the Parser Blog helpful for
Project #2.
C++ Survival Guide,
doc Visual Studio help notes,
Code Analyzer Project Submissions
If you go to other folders in the college server you are very likely to download out-of-date code,
usually correct, but won't compile with demonstration code that uses newer features.
Policy for due date extensions - only for certified illness and work or interview trips out of town: one week extension, with proof.
Only one extension per project.
Design for flexibility - templates and inheritance
Virtual Function Pointer Table structure
Diagram shows how polymorphism works.
Run-Time Type Information (RTTI),
pptClass Layout demo
Shows that each object of a polymorphic class (one with virtual functions) contains a pointer to the class VfPtrTable.
Also shows that composed objects are contained by the composer, and base objects are contained by the derived class.
Parser Package diagram,
Parsing Blog
Illustrates segregation into application specific and reusable parts. Also illustrates
isolation of code from its clients by using an interface and an object factory.
Tokenizer class diagram
Shows how a complex design can be decomposed into smaller managable parts. This design has
some circular dependencies - required by the need to communicate state information between parts.
The details of the Toker implementation show how to manage those.
Parser code folder
This code is the same as Project2Starter in the Project2HelpS19 folder.
Software design presentations:
There is no receipe for good design - it's a creative process that usually strives to balance a number
of competing factors.
Our goals are to build programs and software systems that are elegant and simple, make their intents clear,
and make them fast and reliable.
The presentations below provide guidance to help move us toward those goals.