Options:
- High-level modules should depend on low-level modules
- Modifying existing classes should be avoided
- Changes made to existing classes are unlikely to affect the rest of the library
- Inheritance should be used to add new features
- A class should be open for extension but closed for modification