Назовите принципы ООП и объясните каждый своими словами.
Инкапсуляция — объединение данных и работающего с ними кода в одну сущность и сокрытие внутреннего устройства за интерфейсом. Смысл не в геттерах и сеттерах, а в том, что объект сам отвечает за свои инварианты: нельзя выставить отрицательный баланс в обход проверки.
Наследование — переиспользование и расширение поведения родителя. Самый опасный из принципов: жёстко связывает классы. Правило — «наследование для отношения *является*, композиция для *имеет*».
Полиморфизм — единый интерфейс для разных реализаций. Код работает с абстракцией Shape и не знает про круги и квадраты. Это то, ради чего ООП вообще существует: добавление новой фигуры не требует правок существующего кода.
Абстракция — выделение существенного и отбрасывание деталей. Часто объединяют с инкапсуляцией, но акцент разный: абстракция — про то, что мы моделируем, инкапсуляция — про то, как прячем.
Как ответить сильно: привести к каждому принципу пример из своего проекта. «В курсовой по расписанию у меня был интерфейс Exporter с реализациями для PDF и Excel — это полиморфизм» звучит убедительнее определения из учебника.
- Чем абстракция отличается от инкапсуляции?
- Почему говорят «композиция вместо наследования»?