Object Oriented Programming
Classes
Methods
Properties
Encapsulation
Private
Public
Protected
Tools
Interfaced
Abstract classes
Static properties and methods
Design Patterns
Composition, inheritance and delegation
Polymorphism
Open Recursion
Documentation
Solid principles
Single responsibility principle
Open/closed principle
Interface segregation principle
Dependency inversion principle
Test Driven Development
Composition, inheritance and delegation