CS 311 Software Patterns • 5 Cr.


This course introduces software design paradigms, and design and architectural patterns essential for the creation of flexible, reusable, reliable and maintainable software applications. The course offers students a hands-on opportunity to apply creational, functional and behavioral design patterns, as well as architectural patterns, in a software design. Prerequisites: CS 211 and admission to BS Computer Science program, or instructor's permission.


After completing this class, students should be able to:

  • Use a design paradigm to design a simple software system, and explain how system design principles have been applied in this design.
  • Identify the most suitable design pattern for a simple system suitable for a given scenario
  • Identify the software architecture pattern by differentiating among common software architectures such as layered, pipe-and-filter, and client-server
  • Apply examples of design patterns in a software design
  • Discuss and select appropriate software architecture for a simple system suitable for a given scenario.
  • Refactor an existing software implementation to improve some aspect of its design.
  • Discuss implementation trade-offs of certain patterns with respect to others