В IT широко распространен термин «интерфейс». Мы часто используем это слово в повседневной жизни. Например, пользовательский интерфейс — это совокупность элементов управления сайтом, банкоматом, телефоном. Интерфейсом пульта управления от телевизора являются кнопки. Интерфейсом автомобиля — все рычаги управления, кнопки и руль.
Интерфейс определяет способ взаимодействия с системой. Чем сложнее система — больше возможных состояний — тем сложнее сделать интерфейс. Даже в примере с кнопкой включения телевизора, у которой два состояния — включение и выключение, можно реализовать как минимум два варианта. Например, сделать либо две кнопки, либо одну, которая ведет себя по-разному в зависимости от текущего состояния.
В программировании все устроено похожим образом.
Интерфейсом в программировании называют набор функций: возвращаемое значение, имена и их сигнатуры — количество и типы входящих параметров. Они не зависят от конкретной реализации. Такое определение совпадает с понятием абстрактного типа данных. Например, для точек интерфейсными являются все функции, которые мы реализовывали в практике и описывали в теории.
Абстракция — это слово, описывающее те данные, с которыми мы работаем. Например, почти каждое веб-приложение включает в себя абстракцию «пользователь». На Хекслете есть абстракции «курс» и «проект». А интерфейсом называется набор функций, с помощью которых можно взаимодействовать с данными.
Но функции бывают не только интерфейсные, но и вспомогательные. Они не предназначены для вызывающего кода и используются только внутри абстракции:
# Функции make_user, get_age, is_adult — интерфейс абстракции User
# Они используются внешним (пользовательским, вызывающим) кодом
def make_user(name, birthday):
return {
"name": name,
"birthday": birthday,
}
def get_age(user):
return calculate_age(user["birthday"])
def is_adult(user):
return get_age(user) >= 18
# Эта функция не является частью интерфейса абстракции User
# Она является "внутренней" и возвращает возраст пользователя
def calculate_age(birthday):
###
В сложных абстракциях, которые представляются внешними библиотеками, количество неинтерфейсных функций значительно больше, чем интерфейсных. Например, интерфейсом библиотеки могут являться одна или две функции, но в самой библиотеке их будет сотни. То, насколько хороша абстракция, определяется и тем, насколько удобен ее интерфейс.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.