Skip to content

Advanced Projects

Ten projects of one to three weeks each. They are the tier where the design is the deliverable as much as the program: each one forces at least one named design-pattern decision, requires a multi-file layout with persistence or a documented input, and is marked on whether the structures you chose survive a change you did not anticipate.

Every project here requires all seven integration elements — multiple classes, relationships between classes, encapsulation, inheritance or composition, polymorphism, the STL, exception handling — and at least one design-pattern decision you must make, name in your report, and justify against the alternative you rejected.

No complete solutions are provided, and that matters most here. If you read a solution to an advanced project you have practised reading, not designing.


The ten projects

# Project Difficulty Effort Patterns it demands What it really tests
1 Chess Engine Core Advanced 2–3 weeks Factory, Command Modelling a rule-heavy domain without a rule switchboard
2 Spreadsheet Engine Advanced 2–3 weeks Composite, Observer Recalculation as a dependency problem, not a loop
3 Task Scheduler Advanced 2 weeks Strategy, Template Method Ordering under constraints, with cycles refused
4 Document Conversion Pipeline Advanced 2 weeks Chain of Responsibility, Abstract Factory A pipeline whose stages are replaceable
5 Elevator Simulation Advanced 2–3 weeks State, Strategy Time, events and state transitions kept honest
6 Policy-Based Cache Advanced 2 weeks Policy-based design, Decorator Genericity that stays readable
7 Campus Navigation Advanced 2 weeks Strategy, Observer Two routing policies over one graph, editable at run time
8 Plugin Command Runner Advanced 2 weeks Factory, Registry, Command Extension without touching the host
9 Serialization Framework Advanced 2–3 weeks Visitor, Factory Round-tripping arbitrary objects, safely
10 Component Game Engine Advanced 3 weeks Observer, Composite, Command A frame loop over owned, polymorphic objects

What every advanced project requires

  • A multi-file layout with public headers that depend on nothing internal, and a documented build command.
  • At least two design patterns, each named in the report with the requirement that earned it — and one pattern considered and declined, with the reason. Declining a pattern on purpose is marked as highly as using one.
  • A persistence or input format with a version marker and a documented round trip.
  • A test suite with assertions, covering invariants, boundaries and failure paths, including one deliberate bug introduced to prove the suite notices it.
  • A UML class diagram matching the code, with multiplicities and ownership marked.
  • A design note of one to two pages naming the decisions, the costs accepted, the alternatives rejected, and one decision you would reverse, with what reversing it would cost.
  • No warnings with g++ -std=c++17 -Wall -Wextra -Werror.

The seven integration elements, once more

Requirement What "yes" looks like
Multiple classes Eight or more types with single responsibilities; none is a namespace in disguise
Relationships Composition, aggregation and association, each named in the diagram with a reason
Encapsulation Invariants unreachable from outside; the arrow of dependency points inward
Inheritance or composition Interfaces where behaviour varies; inheritance only for genuine substitution
Polymorphism Dispatch through interfaces, with no type tags in the core logic
The STL Containers and algorithms doing the work, each chosen for a stated reason
Exception handling A documented failure policy, with every guarantee tested rather than asserted

How to choose

Choose by the difficulty you want to spend two weeks on, not by the domain you like:

If you want to practise Choose
Rules with exceptions to the rules Chess Engine, Spreadsheet
Dependency and change propagation Spreadsheet, Campus Navigation
Ordering and constraint solving Task Scheduler
Replacement of pipeline stages Document Conversion, Plugin Command Runner
Time, events and states Elevator Simulation, Component Game Engine
Genericity that stays readable Policy-Based Cache, Serialization Framework
Extension without editing the host Plugin Command Runner, Document Conversion

Do not attempt an advanced project before finishing the middle of the course. Modules 11 to 15 are the prerequisites for this tier in practice, not merely on paper: you will be working with smart pointers, templates, exceptions, algorithms and patterns simultaneously.


How to work

  1. Write the design note's skeleton first — class list, relationships, and the two patterns you expect to need. Expect it to be wrong; that is the point of writing it early.
  2. Build the smallest correct core, with no patterns, and get a test to pass.
  3. Then introduce the pattern where the variation actually appeared, and record why.
  4. Introduce one deliberate bug, confirm the suite catches it, then fix it and keep the test.
  5. Reverse one decision at the end, and write down the cost. This is the item that distinguishes an advanced submission from a large intermediate one.

Related: All projects · Project roadmap · Intermediate projects · Capstone options · Module 15 — SOLID and Design Patterns