Object Immutability: The Basics
Interfaces and Replacement: The Liskov Substitution Principle
Plugins: Software as a set of interchangeable parts
Factory Methods: Decoupling the IoC Container from the Abstraction
Dependency Injection: Solving the Inversion of Control complexity
Inversion of Control: Putting All Together
Main and Abstraction: The decoupled peers
Dependency Inversion: why you should NOT avoid it
