CS247 Textbook
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
- Ch. 01ADT Design↗
- Ch. 02Values, Entity, and Information Hiding↗
- Ch. 03Special Member Functions↗
- Ch. 04Modules↗
- Ch. 05Interface Specifications↗
- Ch. 06Assertions, Exceptions, and Smart Pointers↗
- Ch. 07STL Containers, Iterators. Algorithms, and Lambdas↗
- Ch. 08UML Modelling↗
- Ch. 09Introduction to Design Patterns↗
- Ch. 10Observer Pattern↗
- Ch. 11Decorator Pattern↗
- Ch. 12Factory Pattern↗
- Ch. 13Adapter and Facade Patterns↗
- Ch. 14Template Method Pattern↗
- Ch. 15Iterator and Composite Patterns↗
- Ch. 16State Pattern↗
- Ch. 17MVC Pattern↗
- Ch. 18Template In Depth↗
- Ch. 19Visitor Pattern↗
- Ch. 20Command and Builder Patterns↗
- Last Summary and Final Look↗