Проверяет понимание принципов SOLID, которые лежат в основе проектирования гибких и поддерживаемых объектно-ориентированных систем.
SOLID — это набор из пяти принципов проектирования классов и модулей, сформулированных Робертом Мартином. Они помогают разработчику строить системы, которые устойчивы к изменениям требований, легко читаются и тестируются. Соблюдение этих принципов снижает связанность (coupling) и повышает связность (cohesion) внутри модулей, что делает код более предсказуемым.
Worker с методами work() и eat() заставляет робота реализовывать eat(), что бессмысленно.Рассмотрим нарушение принципа открытости/закрытости и его исправление. Допустим, есть класс, который рисует фигуры:
class ShapeDrawer {
draw(shape) {
if (shape.type === 'circle') {
// рисуем круг
} else if (shape.type === 'square') {
// рисуем квадрат
}
}
}Чтобы добавить треугольник, придётся менять этот класс. Исправление через полиморфизм:
class Shape {
draw() {}
}
class Circle extends Shape {
draw() { /* круг */ }
}
class Square extends Shape {
draw() { /* квадрат */ }
}
class ShapeDrawer {
draw(shape) {
shape.draw();
}
}Теперь расширение происходит добавлением нового подкласса, без изменения существующего кода.
Применение SOLID особенно полезно в крупных проектах с длительным жизненным циклом, где требования часто меняются. Эти принципы помогают избежать накопления технического долга, упрощают рефакторинг и делают систему более модульной. Однако не стоит слепо следовать им в ущерб простоте — для небольших скриптов они могут быть избыточны.