Чек-лист самопроверки
Разработчику
Аналитику
Тестировщику
Архитектору
Инженеру
Чек-лист самопроверки
- Могу ли я объяснить разницу между классом и объектом?
- Понимаю ли я, что такое экземпляр класса?
- Знаю ли я, как создать объект в Python, Java и C#?
- Могу ли я объяснить, что такое ссылка на объект?
- Понимаю ли я, чем отличается переменная от объекта?
- Знаю ли я, что такое атрибуты и методы объекта?
- Могу ли я привести пример поля и свойства в одном из языков?
- Понимаю ли я разницу между полем и свойством?
- Знаю ли я, как работают геттеры и сеттеры?
- Могу ли я объяснить, зачем нужны автоматические свойства?
- Понимаю ли я, что такое иммутабельный объект?
- Знаю ли я, что такое конструктор и зачем он нужен?
- Могу ли я описать разные виды конструкторов (по умолчанию, параметризованный, копирования)?
- Понимаю ли я, что такое сигнатура метода?
- Знаю ли я, чем метод отличается от обычной функции?
- Могу ли я объяснить, что такое абстракция в ООП?
- Понимаю ли я, зачем нужны абстрактные классы?
- Знаю ли я, как объявить абстрактный метод?
- Могу ли я привести пример использования интерфейса?
- Понимаю ли я разницу между абстрактным классом и интерфейсом?
- Знаю ли я, что такое инкапсуляция?
- Могу ли я объяснить назначение модификатора
private? - Понимаю ли я, когда следует использовать
protected? - Знаю ли я, что делает модификатор
public? - Могу ли я объяснить, зачем скрывать поля и открывать только методы?
- Понимаю ли я, что такое наследование?
- Знаю ли я, как объявить подкласс в Python, Java и C#?
- Могу ли я объяснить, что наследуется от родительского класса?
- Понимаю ли я, зачем использовать наследование вместо дублирования кода?
- Знаю ли я, что такое множественное наследование и почему оно проблематично?
- Могу ли я объяснить, что такое ромбическая проблема (Diamond Problem)?
- Понимаю ли я, как интерфейсы решают проблему множественного наследования?
- Знаю ли я, что такое полиморфизм?
- Могу ли я привести пример переопределения метода?
- Понимаю ли я, как работает вызов переопределённого метода через ссылку на базовый класс?
- Знаю ли я, что такое перегрузка методов?
- Могу ли я отличить перегрузку от переопределения?
- Понимаю ли я, как компилятор выбирает, какой перегруженный метод вызвать?
- Знаю ли я, что такое перечисление (
enum)? - Могу ли я объявить и использовать перечисление в коде?
- Понимаю ли я преимущества перечислений перед строковыми константами?
- Знаю ли я, что такое коллекция и чем она отличается от массива?
- Могу ли я объяснить, как коллекции поддерживают полиморфизм?
- Понимаю ли я, как коллекции связаны с инкапсуляцией?
- Знаю ли я, что происходит при создании объекта (этапы инициализации)?
- Могу ли я описать, как работает сборка мусора в отношении объектов?
- Понимаю ли я, что такое фабричный метод и когда его использовать?
- Знаю ли я, как обеспечить, чтобы все потомки реализовали определённый метод?
- Могу ли я спроектировать простую иерархию классов с использованием всех четырёх принципов ООП?
- Понимаю ли я, когда ООП уместен, а когда другие парадигмы могут быть предпочтительнее?