Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Интерфейсы Python: Абстракция с помощью данных

В 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):
    ###

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


Дополнительные материалы

  1. Абстрактный тип данных

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 7 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»