Q: Что такое Принцип SOLID? На какие под-принципы его можно разделить?
A: Делится на 5 принципов.
1) S (Single-responsibility principle): каждый класс/метод должен отвечать только за что-то одно.
2) O (Open–closed principle): Программные объекты должны быть открыты для расширения, но закрыты для модификации. Пример - наследование.
3) L (Liskov substitution principle): Можно заменить использование класса-родителя его потомком и в работе программы ничего не изменится.
4) I (Interface segregation principle): Объекты не должны зависеть от интерфейсов, которые они используют. То есть если мы создаем интерфейс, то не нужно делать обязательными методы, которые пригодятся только некоторым объектам, использующим этот интерфейс. Например интерфейс Animal с методами eat() и fly() - не все животные могут летать.
5) D (Dependency inversion principle): Объекты программы должны иметь слабую связность с другими объектами. Нужно полагаться на абстракции, а не на конкретные реализации. Например, можно сделать абстракцию над Datetime() классом. И тогда при смене поставщика даты, нужно будет внести изменения только внутри этой абстракции.
110 Тема: Основы программирования. Проектирование.
Q: Что такое Принцип YAGNI?
A: Расшифровывается как You Aren't Gonna Need It (Вам это не понадобится). Пишем код, только если уверены, что он нужен. При рефакторинге не боимся удалять ненужные методы.
Q: Расскажите про паттерн проектирования Abstract Factory (Абстрактная фабрика).
A: В приведенном примере метод create_form_with_buttons(factory) создает объекты классов Form и Button на основе переданной фабрики (LinuxFactory или WindowsFactory). Класс AbstractFactory определяет фабричные методы create_form() и create_button() и передает их по наследству классам LinuxFactory и WindowsFactory.