Загрузка данных


Вот краткие объяснения для каждого задания — вставь в ответ как есть.

Задание 1 — SRP
Вывод на экран и сохранение в файл — это разные причины для изменения. Класс Trip должен отвечать только за данные о поездке. Поэтому печать и сохранение вынесены в отдельные классы. Используется принцип единственной ответственности.

Задание 2 — OCP
Новый способ оплаты добавляется созданием нового класса, наследующего PaymentMethod, без изменения существующих CardPayment, CashPayment и т.д. Код открыт для расширения, закрыт для изменений — это OCP.

Задание 3 — LSP
BrokenCar при вызове move() выдаёт ошибку, а не работает как Vehicle. Подстановка потомка вместо родителя должна сохранять корректное поведение. Здесь подстановка невозможна — нарушен принцип Барбары Лисков.

Задание 4 — ISP
Механик не чинит проводку, электрик не чинит двигатель. Интерфейс ServiceWorker надо разделить на EngineRepairer и WiringRepairer. Тогда каждый класс реализует только нужные методы. Это принцип разделения интерфейсов.

Задание 5 — DIP
Если внутри Dashboard жёстко создать SpeedSensor, замена на GPSSensor потребует изменения кода Dashboard. Правильно: передавать любой датчик через конструктор (зависимость от абстракции). DIP позволяет легко менять источник данных.