Зачем нужен интерфейс
Перейти к содержимому

Зачем нужен интерфейс

Зачем нужны абстракции и интерфейсы

Как в старом анекдоте: про объектно-ориентированное программирование можно рассказать просто и неправильно либо сложно и неправильно. Мы попробуем рассказать про очередной аспект ООП просто.

Зачем это: ООП — одна из главных концепций современной разработки. Она применима не к каким-то конкретным языкам, это скорее способ мышления в программировании. Если вы понимаете ООП, ваш код на любом языке будет чище, читаемее и эффективнее.

В этой статье разберём два сложных понятия из объектно-ориентированного программирования: абстракции и интерфейсы. Это ещё одна ступень в понимании непостижимого.

Основные идеи из ООП
  • Объектно-ориентированное программирование построено вокруг объектов. Можно представить, что объект — это коробка, в которой лежат данные и функции.
  • Деление на объекты нужно для того, чтобы можно было создавать, обслуживать и переделывать части программы, не влияя на другие части и программу в целом. По-умному это называется «для повышения уровня абстракции».
  • Смысл объекта в том, что он умеет делать какие-то свои дела, и остальные объекты не должны знать, как он это делает.
  • У объекта есть понятие атрибута и метода. Атрибут — это любые данные, которые хранятся в «коробке» объекта. Методы — это любые действия, которые можно совершать над объектом или внутри его. Атрибуты обычно выражаются переменными, а методы — функциями.
  • Объекты необходимы, например, в компьютерных играх, где каждая штучка на игровом поле — это объект с какими-то свойствами. Или в интернет-магазине, где один объект отвечает за корзину, другой — за выкладку товара.
  • Объекты можно создавать по шаблону — такие шаблоны называются классами.

Абстракция

Представьте, что вы попросили нескольких человек описать в общих чертах, что такое телефон и как им пользоваться: пусть это будут бабушка, мама и подруга. Бабушка вспомнит про дисковые телефоны и трубки с витым проводом. Мама расскажет про радиотелефоны, у которых есть база и есть трубка, с которой можно ходить по всей квартире, а подруга начнёт описывать мобильник.

Несмотря на то что рассказы будут сильно отличаться между собой, у них будет несколько общих моментов про телефон:

  • у телефона есть трубка;
  • в трубку мы говорим, из трубки — слушаем;
  • можно набрать номер нужного человека и позвонить ему;
  • если вам позвонят по телефону, вы это услышите и примете звонок.

Получается, что если представить абстрактный телефон, то получится такое устройство с динамиком, микрофоном и средством набора номера.

Это и есть абстракция: когда мы описываем только самые существенные детали, которые важны для задачи. В нашем случае задача такая — понять, что такое телефон и как им пользоваться. Поэтому микрофон и динамик для этой задачи важен, а способ связи телефона с сетью — нет. Устройство набора номера важно, а то, какая мелодия играет при вызове — нет.

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

Чтобы работать с абстракциями, используют интерфейсы.

Интерфейс

Итак, у нас есть некое устройство с трубкой, микрофоном, динамиком и средством набора номера. Но если вы вспомните рассказы мамы, бабушки и подруги, то обнаружите вот что:

  • в микрофон говорят, чтобы собеседник мог вас услышать;
  • чтобы слышать самому, ухо прикладывают к динамику;
  • чтобы набрать номер, нужно с помощью номеронабирателя вызвать нужную последовательность цифр;
  • когда идёт вызов, слышны гудки в динамике.

Всё это — интерфейсы. Они позволяют работать с объектом, не вникая в то, как он устроен внутри. Если вы умеете работать с интерфейсом номеронабирателя, то вам всё равно, нужно ли крутить диск, нажимать физические кнопки на радиотрубке или давить пальцем на сенсорный экран.

Такой интерфейс как бы говорит нам — я передам в телефон любые цифры, какие захочешь. Как я это сделаю внутри и как они будут обработаны — неважно, просто набери номер, а дальше телефон сам разберётся.

Интерфейсы — это действия над объектом, доступные другим объектам (поэтому они называются публичными).

Есть ещё инкапсулированные, то есть внутренние методы. Например, у микрофона есть публичный метод «Слушать голос», и есть внутренний метод «Преобразовать голос в электрические сигналы». С его помощью он взаимодействует с другими частями нашего абстрактного телефона. Про инкапсуляцию будет отдельный материал, потому что тема большая.

Сложная терминология

Строго говоря, интерфейсы — это не действия, а методы. Сейчас объясним.

В программировании есть операции — это простейшие действия, например, скопировать значение из одной переменной в другую.

Из простых действий составляются функции — это когда несколько операций «склеиваются» в нечто единое. Мы даём этой склейке название и получаем функцию. Например, может быть функция «проверить правильность электронного адреса», которая состоит из нескольких десятков простых операций.

На языке ООП функции, привязанные к объектам, называются методами. Просто такой термин. По сути это функции, то есть склеенные вместе операции.

Итого: метод — это набор простых действий, которые склеили в единое целое и засунули в объект.

Для чего это всё

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

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

Пользовательский интерфейс

Команда AskUsers

Интерфейсы окружают людей повсюду. Покупка билета в метро, снятие денег в банкомате, даже простой звонок или сообщение в смартфоне – за всем этим скрывается UI. Термин означает внешнюю часть программного обеспечения, которая помогает пользователям взаимодействовать с продуктом или платформой.

Если рассматривать техническое значение, то интерфейс включает в себя:

  • способы взаимодействия с внутренней частью программы (операционной системой, платформой, сервером и т.д.);
  • дизайн;
  • доступные функции.

Например, когда пользователь открывает программу Microsoft Word, он видит лист, разметку, фон и другие элементы. Это внешнее оформление. Возможность ввести текст, изменить шрифт, откорректировать содержимое – это функционал. А за кнопками скрывается внутренняя часть ПО, работа которой не видна пользователям.

Зачем нужен интерфейс?

Главная цель UI – упростить взаимодействие со сложными техническими объектами. Любая программа выглядит как бесконечное количество 0 и 1: набирать их вручную, чтобы написать простое сообщение – долгий бесполезный процесс. Интерфейсы помогли ускорить эти действия, сделав их доступными для всех. Они транслируют информацию, отправляют команды, помогают обмениваться данными и выполняют другие полезные функции.

С развитием приложений UI стали также выполнять задачу помощника. Графические элементы выступают индикаторами, направляя пользователей. Если убрать их, то перед вами окажется набор символов.

Оказавшись на этой странице, вы:

  • быстро отличите текстовые описания от кликабельных элементов;
  • благодаря значку корзины, поймете, что вы можете что-то купить;
  • найдете ссылки на социальные сети;
  • сможете разобраться, что перед вами слайдер, в котором несколько иллюстраций.

Создание интуитивно понятного дизайна для пользователей – это одна из задач юзабилити. Процесс проработки UX – стадия создания идеального UI, в котором будет легко ориентироваться и находить нужную информацию.

Виды интерфейсов

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

Командная строка

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

Пользователь такого интерфейса должен знать точные сочетания символов для запуска нужных процессов.

Графический, текстовый

Вторая классификация основывается на содержательных элементах UI. Текстовый интерфейс – это последователь командной строки. Он используется только для ввода и обработки символов. Рядовые пользователи чаще взаимодействуют с экранами, которые содержат графические элементы для управления.

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

Большинство иконок стандартизированы и используются в разных интерфейсах. Например, разворачивающиеся меню и списки чаще всего отражаются тремя полосками или точками, музыка – в виде ноты, настройки – как шестеренка и т.д.

Современные UI включают текстовые и графические элементы.

Жестовый, голосовой, тактильный, нейронный

Управлять программами и оборудованием можно не только с помощью мышки или клавиатуры. Производители техники расширяют возможности своей продукции, поэтому запускать функции можно с помощью голоса, жестов, касаний и даже активности мозга.

Технология voice user interface известна благодаря голосовым помощникам – Siri от Apple, Alexa от Amazon или Алиса от Яндекса. Помимо этого, на клавиатурах многих смартфонов есть опция записи звука, которая переводит его в текст. Тактильный UI – один из вариантов для управления, который был создан для незрячих людей, но его возможности применяются и при разработке смартфонов. Пример – разная степень вибрации при наборе клавиш на сенсорном экране.

NUI (жестовые, натуральные) чаще всего используются в играх с имитациями для приставок Xbox, Nintendo Wii или PlayStation. Эту же технологию вы можете встретить в оборудовании для «умного дома», например, при включении света или регулировании громкости Яндекс.Станции с помощью изменения положения руки.

Программный, аппаратный, аппаратно-программный

Интерфейсы обеспечивают взаимодействие не только между человеком и устройством, но и между программами, оборудованием или компьютерами:

  • Аппаратный: дает возможность соединить два объекта, например, подключить принтер к ноутбуку с помощью WiFi или кабель USB.
  • Программный: создает связь между программами, к примеру – подключение API одного приложения к другому. Чтобы на сайте можно было залогиниться через социальные сети или аккаунт Google, используется именно эта технология.
  • Аппаратно-программный: комбинация технических элементов под управлением ПО.

Пользовательский интерфейс

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

В рамках этого понятия можно выделить подвиды. У каждого из них – свои особенности.

Сайты давно перестали нести в себе только информационную функцию. На доменах размещаются целые приложения, которые пользователи видят через призму web interface. Их преимущество в том, что не нужно устанавливать ПО – все функции доступны в браузере. Сейчас для их написания используются элементы JavaScript, HTML и CSS, а главная задача при разработке – продумать юзабилити так, чтобы посетителям было удобно.

Игровой

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

Материальный

Подразумевает контакт пользователей с физическим объектом: мышью, клавиатурой, тачпадом, кнопками на оргтехнике и т.д. Пример такого взаимодействия – набор текста в Microsoft Word или заметках: вы нажимаете на клавиатуру, а на экране появляется текст.

Мобильный

Выделяется в отдельную группу SIMP (Screen, Icon, Menu, Pointer), поскольку его функционал отличается от разработки для десктопов. Элементы здесь заполняют экран полностью, а блоки и системы зависят от требований операционной системы. Поведение пользователей при взаимодействии со смартфонами отличается от работы на компьютере из-за размера экрана и отсутствия отдельной клавиатуры с мышью/тачпадом. Юзабилити приложений должно строиться на поведенческих паттернах пользователей, например, как они держат телефон в руке, каким пальцем набирают текст и листают страницы, какие действия удобно совершать на ходу и т.д.

Как проработать UI?

Современный user interface должен быть удобным, функциональным и динамичным. При его разработке важно учитывать все этапы взаимодействия с продуктом: от первого касания до регулярного использования. Каждый экран приложения, кнопка, текстовое описание имеют значение.

Чтобы установить долгосрочные отношения с клиентами, важно изучать их поведение. Тестирование юзабилити в AskUsers поможет перед масштабным запуском оценить, насколько пользователям удобно на вашей платформе. Для пользователей интерфейс – это и есть продукт, поэтому дизайн должен помогать им разобраться в продукте.

Зачем нужны интерфейсы?

Дисклеймер: В этой статье и последующих, нейминги классов и методов будут приведены на русском языке.

Зачем нужны интерфейсы? - 1

Когда речь заходит о принципах объектно-ориентированного программирования (ООП): полиморфизм, наследование и инкапсуляция, полезно приводить аналогии из реального мира. Большой плюс ООП в том, что мы в программе можем смоделировать часть реальной вселенной. Смоделируем семью Ивановых: Папа, Мама и мальчик Петя. От Папы Петя унаследовал привычку прихлюпывать когда пьет чай, а от Мамы он унаследовал привычку поджимать губы во время чтения. Если попытаться реализовать эту ситуацию в программу, то у нас получиться три класса: У Папы и Мамы есть привычки, которые нужно передать Пете. Привычки — это какие-то действия — так что лучше всего реализовать их в программном мире как методы: Сначала Папа: Теперь Мама: Если речь идет о наследовании, то логично написать код так: То есть унаследовать Петю от Папы и Мамы одновременно. Если так написать, то компилятор будет ругаться, потому что в Java нельзя реализовать множественное наследование классов. К слову, в С++ можно, а вот в Java нельзя, потому что с множественным наследованием могут возникнуть большие проблемы: подробно пишут в интернете. Что бы обойти это «нельзя», в Java есть интерфейсы. И для привычек мы придумаем свой интерфейс. Даже два: Выглядеть они будут так: В интерфейсе мы только описали привычки, но не описали что они конкретно делают, потому что конкретную реализацию мы пропишем в классах. Сначала отдадим Папе и Маме их законные привычки. И теперь, абсолютно легально можно передать Пете привычки от Папы и Мамы одновременно То есть множественная реализация (чаще говорят имплементация) в Java вполне возможна. alt=»Зачем нужны интерфейсы? — 2″ width=»800″ height=»500″ />Смысл интерфейсов теперь должен быть понятен – в Java с помощью интерфейсов можно реализовать множественное наследование. Если развивать ситуацию дальше, например: ведь у Папы и Мамы наверняка есть привычки, которые они не передали Пете, да и у Пети могут быть свои личные привычки. Как эту жизненную Санта-Барбару перенести в плоскость Java вы узнаете в следующих сериях. Это не единственный пример для понимания интерфейсов.Если не читали следующие статьи, то обязательно прочтите: Интерфейсы в Java (если не открыто, можно выйти из профиля или прочитать в режиме — инкогнито) Для чего в Java нужны интерфейсы — тут реализуйте все примеры из статьи и поизменяйте методы и в интерфейсах и в калассах: наименования методов, сигнатуры (то что метод принимает на вход), типы вывода методов. Разберитесь самостоятельно: — с разницей при имплементации интерфейса с классом и абстрактным классом; — дефолтными методами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *