notes

Design Principles

Encapsulate what varies

Program to interfaces, not implementations

Favor composition over inheritance

Strive for loosely coupled designs between objects that interact

Classes should be open for extension, but closed for modification