This content was thoughtfully created and tailored for CS247 - Software Engineering Principles, for Software Engineering students at the University of Waterloo.

It features a collection of uniquely designed practice problems and in-depth explanations aimed at supporting students in mastering course concepts.

All notes are mine. I asked an AI tool to handle formatting only. I have not gone through the whole thing to double-check it kept its hands off the content, so treat any weirdness as a formatting artifact rather than something I wrote.

This Textbook isn't a substitute for attending lectures. Class discussion often expands on topics based on student questions, and I add commentary, extra examples, and explanations in the moment that don't make it into the written version.

Stay tuned! A new version is in the works and will adopt a range of C++20 features.

Last updated: July 2026

Table of Contents
  1. Ch. 01ADT Design
  2. Ch. 02Values, Entity, and Information Hiding
  3. Ch. 03Special Member Functions
  4. Ch. 04Modules
  5. Ch. 05Interface Specifications
  6. Ch. 06Assertions, Exceptions, and Smart Pointers
  7. Ch. 07STL Containers, Iterators. Algorithms, and Lambdas
  8. Ch. 08UML Modelling
  9. Ch. 09Introduction to Design Patterns
  10. Ch. 10Observer Pattern
  11. Ch. 11Decorator Pattern
  12. Ch. 12Factory Pattern
  13. Ch. 13Adapter and Facade Patterns
  14. Ch. 14Template Method Pattern
  15. Ch. 15Iterator and Composite Patterns
  16. Ch. 16State Pattern
  17. Ch. 17MVC Pattern
  18. Ch. 18Template In Depth
  19. Ch. 19Visitor Pattern
  20. Ch. 20Command and Builder Patterns
  21. Last Summary and Final Look
Chapter
Loading…