The SOLID principles are a great starting point for identifying how to build a loosely-coupled, easy-to-maintain application. Let's look at each one in order:

Single Responsibility Principle (SRP)

SRP Source Code: download

Open Closed Principle (OCP)

Starter Code: download

Completed Code: download

Liskov Substitution Principle (LSP)

Starter Code: download

Completed Code: download

Interface Segregation Principle (ISP)

Starter Code: download

Completed Code: download

Dependency Inversion Principle (DIP)

Starter Code: download

Completed Code: download