Design Pattens: Elements of Reusable Object-Oriented Software
Notes
OO Principles
Encapsulate what varies
Code to an interface rather than an implementation
Each class in your application should have only one reason to change
Classes are about behavior and functionality
Inheritance - One class receives behavior from another class.
Polymorphism - when one class inherits from another class, then polymorphism allows subclasses to stand in for a superclass.
Encapsulation - is when you hide the implementation in such a way that it makes it easy to use and change (private properties, set and get methods)
UML and Class Diagrams