Абстракция в ООП: Скрытие сложности

Вы управляете автомобилем с помощью нескольких простых действий. Вы нажимаете на педаль газа. Поворачиваете руль. Нажимаете на тормоз.

Вам не нужно знать, как топливо поступает в двигатель. Вам не нужно понимать, как двигаются поршни или как переключаются передачи. Автомобиль скрывает эти детали от вас. Вы используете простой интерфейс для управления сложной машиной.

Программное обеспечение работает так же.

Представьте отправку электронного письма. Вы вызываете одну команду: emailService.send().

За кулисами происходит множество вещей:

Вам не нужно видеть эти шаги. Вас волнует только то, что письмо отправлено.

Если бы вы не использовали абстракцию, ваш код выглядел бы так:

Повторение этого каждый раз создает проблемы. Каждая часть вашего кода знает слишком много. Если вы смените почтового провайдера, вам придется обновлять каждую строку кода, которая отправляет почту. Вашу систему становится трудно изменять.

Абстракция решает эту проблему. Она показывает, что делает объект, но скрывает, как он это делает.

Вы предоставляете простой интерфейс. Вызывающий код остается сосредоточенным на задаче. Реализация остается скрытой. Это делает ваш код слабосвязанным и легким в поддержке.

Люди часто путают абстракцию с инкапсуляцией.

Инкапсуляция спрашивает: «Кто может изменить эти данные?» Она защищает внутреннее состояние. Абстракция спрашивает: «Какие детали должен видеть пользователь?» Она скрывает сложность.

Они работают вместе для создания более совершенных систем.

Далее мы рассмотрим наследование. Мы ответим на один вопрос: если объекты имеют общее поведение, нужно ли писать один и тот же код дважды?

Источник: https://dev.to/ashay_tiwari_3658168ad5db/abstraction-in-oop-hiding-complexity-without-hiding-capability-1111