Web Resources:
CppCon - 2014,
Going Native 2013
Herb Sutter's Blog, Herb Sutter on C++11, Herb Sutter keynote - Going Native 2012
Scott Meyer's Blog, S.M. on thread suspension, S.M.: C++11 Sampler
Stroustrup's Home Page
Code Project, Boost Library
Excellent C++ Q&A, Excellent reference - CppReference.com, CPlusPlus.com, C++ TechLinks
Herb Sutter's Blog, Herb Sutter on C++11, Herb Sutter keynote - Going Native 2012
Scott Meyer's Blog, S.M. on thread suspension, S.M.: C++11 Sampler
Stroustrup's Home Page
Code Project, Boost Library
Excellent C++ Q&A, Excellent reference - CppReference.com, CPlusPlus.com, C++ TechLinks
Content:
This lecture covers Interfaces and the Interface Segregation Principle.-
Syllabus
Describes topics to be covered, reading material for you to digest before coming to class, and due dates for the assigned projects. -
Projects:
Project #3 - Code Publisher Client Project3HelpS2019 - includes: Client-Channel-Server Diagram
Diagram showing use ofC++\CLI translater between WPF (C#) GUI and C++ Comm Channel.Prototype GUI for Project #3
Demonstrating Requirements with a GUI
The projects, below, are intended to help with Project #4. They are included so we can peek ahead to see where we need to go with Project #4. Project4Help WPF
Illustrates techniques used for WPF to use Comm via C++\CLI.Prototype GUI for Project #3
Uses C++\CLI translator to interoperate with C++ Comm to navigate a remote directory tree.Project #4 - Remote Code Page Management Project4HelpS2019 - includes: Communication Channel Structure
Diagrams that show how asynchronous message passing communication works.Communication Channel Class Diagram
Class diagram of our protype communication channel.Communication Channel Activities
Activity diagram showing message flow through the communcation channel.CppCommWithFileXfer - Communication Channel Code
Here's code you can use to implement message-passing communication.Project4HelpWPF code demo
A getting-started GUI prototype that shows one way to build a client for Project #4.C++ Repository with WPF GUI - code demo
This demo illustrates use of User Controls as well as remote directory navigation. -
Project #2 Grades
Project #2 Grades Chart -
Components:
A Component is code focused on one particular activity, accessed only through an interface and an object factory, and implemented as a dynamic link library. You can find more detail about components here.ComponentRefCount:
Components are often shared, using reference counting to destroy the components when all users have finished. You can implement reference counting with std::shared_ptr. If you want to build reference counting into the component you may use this ComponentRefCount package as an example.Singleton:
Singletons provide global access to a shared instance of some type. The Singleton template class provides this in a reference counted implementation. -
Principles
Liskov Substitution Principle
This is a fundamental OOD principle, with some surprising subtleties when using C++.Open/Closed Principle
Another fundamental OOD principle that argues for using inheritance "hooks" and template-based classes.The Dependency Inversion Principle
Components should depend on abstractions, not other components.Classic Factory structure, Classic Factory creating polymorphic objectsInterface Segregation Principle
Illustrates how to create instances of a polymorphic type with clients knowing only the base class and factory interfaces.Object Factory Structure, Object Factory Project
This project implements a factory that allows clients to use derived classes but only bind to their abstractions. It also demonstrates the use of products with multiple interfaces.Extensible Object Factory Structure, Programming to Interface Project
This project implements a template-based "pluggable object factory" and shows how to access members of a hierarchy through an interface.Programming to Interfaces Presentation
Discusses interfaces, layers, factories, and breaking design, compile, and static link dependencies.MakeDLL Structure, MakeDLL: Dynamic Link Library Project
This project demonstrates that compile and static link dependencies can be broken by programming to interfaces and using object factories.DLL_ProtocolDemo Project
Demonstrates how Dynamic Link Libraries are loaded implicitly and explicitly.
Discusses why you may need to provide more than one interface for a component. - Invocations Revisited - added more capture examples
-
Run-Time Type Indentification Presentation
RTTI is, perhaps, the antithesis of the Open/Closed Principle. Paradoxically, I used it building the trace class. - Exceptions Presentation
- Basic Exceptions Demo
- Standard Exceptions Demo
- Exception Performance Demo
-
Thinking about Software Design:
Software Design Blog
Summary of fundamental ideas.Object Oriented Design Blog
Essential features of Object Oriented Design.Software Design Principles
SRP, LSP, OCP, DIP, and ISPSoftware Design, ppt
Broad survey of ideas with examplesDesign Strategies, pptx
Summarizes design issues for modules and classes.Design Guidelines, pptx
Design rules and idioms that transcend Object Oriented Design. - Common C++ Problems, pptx
- Fragile Designs, pptx