Рубрики
Без рубрики

Какова цель интерфейса?

Причина 1 – Развитие Эту причину я узнал, так как она упоминалась в одной из книг, которые я изучал, когда… Помеченный как java, интерфейс.

Причина 1 – Развитие

Эту причину я узнал, так как она упоминалась в одной из книг, которые я изучал, когда изучал Java (OCP Oracle Certified Professional Java SE 8 Programmer II Жанны Боярской и Скотта Селикоффа, стр. 51).

“Интерфейс предоставляет одному человеку возможность разрабатывать код, который использует код другого человека, не имея доступа к базовой реализации другого человека”. (возможно, было бы неплохо заменить индивидуальную терминологию на терминологию команды 🙂 )

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

Но как основывать разработку на объектах, которых еще нет? Мы определяем интерфейсы. Разработчик, использующий интерфейс, может создать временный макет объекта (иногда называемый фиктивным кодом). Макет объекта имитирует реальный объект, который реализует интерфейс с помощью простой реализации. Это позволяет разработчикам, использующим интерфейс, компилировать, запускать и тестировать свой код.

Причина 2 – Скрытие реализации

С этим я столкнулся, изучая алгоритмы, курсы, проводимые Принстоном (Роберт Седжвик и Кевин Уэйн).

Интерфейс – это определение решения, которое мы предлагаем клиенту. Он определяет методы, но не реализует их. Классы, реализующие интерфейсы, содержат используемые алгоритмы и структуры данных.

Мы делаем это по 2 причинам:

  1. Клиент не должен и не должен знать о деталях реализации. Клиент заботится о том, какие методы он может использовать, какова временная сложность и использование данных, стоящие за этим. Например, давайте предложим решение для кормления животных на ферме. У кадра много работы, много сельскохозяйственных животных, которых ему нужно кормить каждый день. Он должен быть эффективным. Фермеру действительно нужно знать, чем кормить животное и какое достаточное количество пищи требуется животному (аргументы метода feed()), но ему не нужно и не нужно заботиться о том, как быстро едят животные и какие звуки они издают во время. Кроме того, мы бы не хотели, чтобы наш фермер знал все разработанные нами алгоритмы, как кормление и другие процессы работают в фоновом режиме. Если бы он знал это, он мог бы приобрести некоторые навыки программирования и создать свое собственное решение. Это сэкономило бы ему немного денег.

  2. Реализация не знает о потребностях клиента. Библиотеки часто пишутся для разных клиентов. Мы могли бы предложить различные реализации интерфейса, где клиенты выбирали наиболее подходящий для них вариант, исходя из их потребностей. Давайте возьмем пример графика. Чтобы поддерживать структуру данных графа, нам нужно хранить вершины. Для каждой вершины нам нужно знать, что это соседняя вершина. Мы можем предложить клиенту три реализации с различными базовыми структурами данных: список ребер, матрица смежности или список смежности. Какая реализация лучше всего подходит клиенту, зависит от того, например, какие операции будут необходимы чаще всего, будет ли большой объем данных, что создаст проблему с хранением матрицы, и так далее.

Причина 3 – Тестирование

Я научился этому на практике. 🙂

Допустим, у нас есть две службы. Один предоставляет нам пользователей, а другой отправляет электронные письма. Мы хотели бы протестировать сервис, отвечающий за генерацию и отправку электронных писем. Содержание электронного письма зависит от данных пользователя. Ему нужно имя пользователя, адрес электронной почты,… Представьте, что мы тестируем генерацию содержимого электронной почты. Поскольку он включает в себя данные пользователя, мы не можем быть уверены, что наш тест завершится неудачей из-за того, что служба пользователей вернет неверные данные пользователя или сгенерирует ошибочное электронное письмо. По этой причине мы создаем макет пользовательского сервиса. Получение пользовательских данных теперь контролируется, и мы можем быть уверены, что то, что мы тестируем, действительно является составом содержимого электронной почты, определенным в службе электронной почты.

Дайте мне знать, если вы подумаете о другой цели!

Оригинал: “https://dev.to/sabinaorazem/what-is-an-interface-and-why-do-we-use-it-4112”