- What is OOP?
- What is a class?
- What is an object?
- What is a class hierarchy?
- What is an abstract class and abstract method?
- What is a static method? Is a class from static methods only an OOP class?
- What are the features of each of the main types of relations between classes: composition, aggregation, inheritance, association?
- How is composition different from inheritance?
- What is polymorphism? What is it used for?
- What is encapsulation? What problems are solved with its help?
- What is the state of the program? How does it affect the program?
- What are side effects?
- Do I have to deal with side effects when designing in the OOP paradigm?
- Are mutations a side effect?
- What are the principles of SOLID? What does each letter of the acronym mean?
- What is identity? What is the difference from an instance?
- How are identity implemented through references to values in memory?
- What are dynamic and static polymorphisms in the context of OOP?
- How do polymorphism and interfaces allow dependency inversion to be implemented?
- What are some ways to extend the functionality of a class?
- What are the challenges of using inheritance?
- What is delegation?
- Why does a class define a behavior, not a property? And what about encapsulation?
- Why is the use of plain old javascript objects not complying with the principle "everything is an object"?
- Сайд эффекты
- Composition vs inheritance
- Наследование vs Композиция vs Агрегация
- Uses and Abuses of Inheritance, Part 1
- Uses and Abuses of Inheritance, Part 2
- Принципы проектирования классов (S.O.L.I.D.)
- OTA SOLID (интерактивный ресурс)
- SOLID Principles with Uncle Bob - Robert C. Martin
- The Principles of OOD (содержит ссылки на статьи по SOLID)