Software Structure, Design, & Documentation
-
Design Study Guide
Design presentations, concepts, and notes.
-
UML Notation,
pptx
Universal Modeling Language notation, used in the course to illustrate designs and design ideas.
-
Encapsulation,
pptx
Fundamental design mechanism, fully supported by OO Languages like C++.
-
Packages
Defines structure for packages, motivates their use.
-
Partitioning: classes, packages, processes, machines, networks
Intercommunication between these levels differ in performance by orders of magnitude!
-
Fragile Designs,
pptx
Things you Don't and Do want to write into your code.
-
OOD Principles,
pptx
Four important OOD Principles:
Liskov Substitution (LSP),
Open Closed (OCP),
Dependency Inversion (DIP),
Interface Segregation (ISP).
-
Programming to Interfaces,
pptx
Very important topic: This is the primary mechanism for designing loosely coupled systems.
-
Distinguish between interface, abstract class, and concrete class
Tri-level inheritance structure: combined substitution and code sharing.
-
Component: an isolated part
Key design idea.
-
Using Inheritance,
pptx
Summarizes several ways inheritance is found to be useful in SW Designs.
-
Software Structure Research,
pptx
Research presentation - illustrates dangers of miss-using dependencies.
-
XML - eXtensible Markup Language,
pptx
Syntax of the XML metalanguage.
C++ Language
-
C++ Knowledge Base
Substrate of background knowledge required for this course (not all required at beginning).
-
Introduction to C++
Broad survey of C and C++. Compilation, Memory, and Computation models.
-
Abstract Data Types,
pptx,
Str String Class
ADTs are user defined types that that support almost all of the operations expected of primitive types.
-
C++ Operators,
pptx
Discloses C++ operator model.
-
Hierarchy,
pptx
Demo Composition,
Demo Inheritance
Study of class relationships. There is a lot of material here you will need to master for the midterm,
for interviews, and for professional work.
-
Templates,
pptx
Basic sample code,
Template Techniques
Template functions and classes, some useful techniques, and template function objects.
-
HashTable Template with Iterators,
pptx
A usefule reusable component that nicely illustrates sophisticated template techniques.
-
Template Policies and Traits,
pptx
Template techniques essential for STL and many template classes like Hashtable.
-
Namespaces,
pptx,
Namespace Taxonomy concept
Way to partition code names to avoid ambiguity. Can be used to help disclose design.
-
Exceptions,
pptx,
Sample code
Object Oriented Error Handling - effective mechanism, but not without its problems.
-
Run-Time Type Information (RTTI),
pptx
A very weak form of reflection: retrieves type names and some hierarchy information.
Standard Libraries:
-
IOStreams summary
pptx
IOStreams classes and their responsibilities.
-
IOStreams details,
docx,
Sample code
Discloses the entire interface for the streams library, provides working examples.
-
Software Template Library (STL),
pptx
Introduction to STL Containers, Iterators, and Algorithms.
-
STL Syntax,
docx,
Sample code
Provides close to a specification for the STL containers and Iterators, and summarizes all the Algorithms.
-
STL Quirks and Miscellanea,
pptx,
Sample code
Illustrates some inconsistent interfaces that you have to get used to.
System Programming:
-
Win32 Sockets,
pptx,
Win32 Socket code library
Sockets are a low-level, byte oriented communication mechanism.
They support interprocess communication and network programming.
-
Windows Processes,
vsdx
Windows Memory Management,
vsdx
Windows Event Handling,
vsdx
Windows management of Processes, Memory, and Events
-
Windows and C++11 Threads,
pptx
Discussion of processes, threads, scheduling, and thread synchronization.
|
Basic C++ Language Demos
-
Class Relationships
Illustrate composition, aggregation, using, and inheritance.
-
Syntax variations required for different contexts
Six ways to call void Ctor, four ways to call copy Ctor, two ways to call an operator!
-
str string class
Str class illustrates design of Abstract Data Types. You should prefer std::basic_string<T>.
-
Templates,
Advanced template techniques
Simple template demos, then exploration of some more advanced technques.
-
Function Pointers
Invoke global and member functions through function pointers.
-
Casts
Illustrate traditional casts, static_cast, reinterpret_cast, const_cast, and dynamic_cast.
-
Exceptions
Demonstrates standard and user-defined exceptions.
-
Pure virtual functions
You can supply a definition for a pure virtual function.
-
Class Layout
Illustrates how composite classes are layed out in memory.
C++ Standard Library Demos
Custom Containers
Interesting design ideas
Issues with C++ Language
-
Failure to initialize properly
Illustrates a surprising problem that occurs if you don't use constructor initialization sequences.
See, specifically, deminher2 (error) and deminher2b (error fixed).
-
Hiding
Hiding is a subtle flaw, caused by inappropriate function overloading.
Form Demonstrations:
We use Windows Presentation Foundation (WPF) in class projects via C++\CLI shims.
All C++ Winforms use C++/CLI, e.g., managed C++.
System Programming:
-
File System
Find files in directories, open and read/write. Uses streams.
-
Concurrent Access to Files
Provide safe access to files for reading and writing when there are concurrent clients.
-
Component: Interface, factory, DLL - a demo,
Packaging code in Dynamic Link Libraries (DLLs)
Dynamic Link Libraries are a standard packaging mechanism, required to make components.
-
Win32 Sockets,
pptx
Win32 Socket code library
String Server,
File Transfer
Sockets are a low-level, byte oriented communication mechanism.
They support interprocess communication and network programming.
-
Windows and C++11 Threads,
pptx
C++11 Thread Demos,
C++11 Thread Techniques
Discussion of processes, threads, scheduling, and thread synchronization, with demos.
-
C++11 BlockingQueue
Reusable component, important for passing messages between threads.
Implemented with C++11 mutex and condition_variable
-
Tasks and Thread Pool
Implemented with C++11 threading
-
Comparison of Locking Performances
Compares C++11 locking with native Win32 locking.
-
Custom Thread class structure,
vsdx,
Custom Locks classes,
vsdx
Custom Reusable Thread class
Implementation of a custom threads class and several kinds of locks. You should
prefer the C++11 thread libraries.
-
Process enumeration
Display names of all currently running processes.
-
Spawn Windows Process
Create a process programmatically, passing it command line arguments.
-
Embedded Resources
Demonstrates how to embedd a text resource into an execution image, and how to use it too.
-
Base64 Encoding
Base64 Encoding is used to convert binary data into character arrays.
Application Prototypes
-
Parser Structure,
vsdx,
Parser Prototype
Core of code and XML analyzer - has Tokenizer, TokenCollector, Parser, Rules, and Actions.
-
Code Analyzer Blog,
Code Analyzer code folder
Analyzes size and complexity of namespaces, classes, and functions.
-
Peer-to-Peer System Structure Diagrams,
vsdx
Model for communicating systems, uses WCF or Sockets. Each peer has a message sender and receiver.
|