Students who complete this unit will demonstrate that they can:
    - Explain the nature of software design.
- Explain the nature and use of basic design patterns.
- Articulate design principles including separation of concerns, information hiding, coupling
        and cohesion, and encapsulation. 
- Use a design paradigm to design a simple software system, and explain how system design
        principles have been applied in this design.
- Construct models of the design of a simple software system that are appropriate for the
        paradigm used to design it.
- Within the context of a single design paradigm, describe one or more design patterns that
        could be applicable to the design of a simple software system.
- Use UML class modeling to specify the domain model for a substantive software system.