Python: Абстракция с помощью данных
Теория: Интерфейсы
В IT широко распространен термин «интерфейс». Мы часто используем это слово в повседневной жизни. Например, пользовательский интерфейс — это совокупность элементов управления сайтом, банкоматом, телефоном. Интерфейсом пульта управления от телевизора являются кнопки. Интерфейсом автомобиля — все рычаги управления, кнопки и руль.
Интерфейс определяет способ взаимодействия с системой. Чем сложнее система — больше возможных состояний — тем сложнее сделать интерфейс. Даже в примере с кнопкой включения телевизора, у которой два состояния — включение и выключение, можно реализовать как минимум два варианта. Например, сделать либо две кнопки, либо одну, которая ведет себя по-разному в зависимости от текущего состояния.
В программировании все устроено похожим образом.
Интерфейсом в программировании называют набор функций: возвращаемое значение, имена и их сигнатуры — количество и типы входящих параметров. Они не зависят от конкретной реализации. Такое определение совпадает с понятием абстрактного типа данных. Например, для точек интерфейсными являются все функции, которые мы реализовывали в практике и описывали в теории.
Абстракция — это слово, описывающее те данные, с которыми мы работаем. Например, почти каждое веб-приложение включает в себя абстракцию «пользователь». На Хекслете есть абстракции «курс» и «проект». А интерфейсом называется набор функций, с помощью которых можно взаимодействовать с данными.
Но функции бывают не только интерфейсные, но и вспомогательные. Они не предназначены для вызывающего кода и используются только внутри абстракции:
В сложных абстракциях, которые представляются внешними библиотеками, количество неинтерфейсных функций значительно больше, чем интерфейсных. Например, интерфейсом библиотеки могут являться одна или две функции, но в самой библиотеке их будут сотни. То, насколько хороша абстракция, определяется и тем, насколько удобен ее интерфейс.

