Интерфейс — это граница между двумя системами и набор правил, по которым они обмениваются командами и данными. Системами могут быть человек и программа, два устройства или две программы, поэтому слово «интерфейс» в IT означает три разные вещи: пользовательский (человек — компьютер: окна, кнопки, командная строка), аппаратный (устройство — устройство: USB, HDMI, Ethernet) и программный, он же API (программа — программа). Интерфейс в объектно-ориентированном программировании — частный случай программного: контракт, который обязан выполнить класс.
Содержание
Ниже — таблица видов, разбор каждого уровня, диагностика проблем с портами и два примера на Python. Код проверен на Python 3.14.7 (23.09.2026).
Три уровня интерфейсов: сводная таблица
Общее у всех видов: стороны договорились о форме взаимодействия и не обязаны знать, как устроена другая сторона.
| Вид | Кто с кем | Примеры | О чем договариваются стороны |
|---|---|---|---|
| Пользовательский (UI) | Человек — программа или устройство | Окна и кнопки (GUI), командная строка (CLI), голосовой помощник, жесты на тачпаде | Какие действия доступны и как система показывает результат |
| Аппаратный | Устройство — устройство | USB, HDMI, DisplayPort, SATA, PCI Express, Ethernet, Bluetooth | Форма разъема, электрические сигналы, скорость, протокол обмена |
| Программный (API) | Программа — программа | Системные вызовы ОС, API библиотеки, HTTP API сервиса | Имена функций или адресов, параметры, формат ответа, коды ошибок |
| Интерфейс в ООП | Класс — код, который его использует | interface в Java и C#, абстрактный класс в Python |
Какие методы обязан реализовать класс |
Три термина рядом с интерфейсом часто путают. Разъем — физическая форма (USB-C, RJ-45). Протокол — правила обмена данными (USB 3.2, HTTP). Интерфейс — вся договоренность целиком: разъем, сигналы и протокол для железа или функции и форматы для программ. Поэтому через один разъем USB-C могут работать разные интерфейсы: USB, DisplayPort, Thunderbolt.
Пользовательский интерфейс: GUI, CLI и другие
Пользовательский интерфейс (UI, user interface) — все, через что человек отдает команды системе и получает от нее ответ. Рядом стоит UX (user experience) — опыт использования: насколько быстро и без ошибок человек решает задачу. UI — конкретные экраны и элементы, UX — результат работы с ними.
| Тип | Как выглядит | Сильная сторона | Ограничение |
|---|---|---|---|
| GUI (графический) | Окна, иконки, меню, кнопки, поля ввода | Легко освоить: действия видны на экране | Сложно автоматизировать повторяющиеся действия |
| CLI (командная строка) | Команды текстом: dir, ls, ping |
Команды легко записать в скрипт и повторить | Нужно знать команды и их параметры |
| TUI (текстовый полноэкранный) | Меню и панели из символов в терминале: htop, Midnight Commander |
Работает по SSH, почти не требует ресурсов | Беднее по графике, чем GUI |
| Голосовой и жестовый | Голосовой помощник, свайпы и жесты на тачпаде | Естественно на телефоне, руки свободны | Ошибки распознавания, точность ниже мыши |
CLI и TUI различаются: в CLI вы вводите команду и получаете строки ответа, TUI рисует в терминале целый экран с панелями, по которому ходят клавишами.
Клавиатура, мышь, микрофон и сенсорный экран — не сами интерфейсы, а устройства ввода, через которые человек работает с пользовательским интерфейсом.
Аппаратный интерфейс: разъем, сигналы и протокол
Аппаратный интерфейс определяет, как соединяются и обмениваются данными устройства и их части: процессор с памятью, компьютер с монитором, ноутбук с флешкой. Внутри компьютера это шины и слоты (PCI Express, SATA, M.2), снаружи — порты и беспроводные каналы.
| Интерфейс | Для чего | Что важно знать |
|---|---|---|
| USB | Периферия, флешки, зарядка | Скорость зависит от версии порта, кабеля и устройства: USB 2.0 — до 480 Мбит/с, USB 3.2 Gen 1 — до 5 Гбит/с, USB4 — до 40 Гбит/с |
| HDMI | Монитор, телевизор, проектор | Поддержка высокой частоты кадров зависит от версии HDMI у обеих сторон и от кабеля |
| DisplayPort | Мониторы, особенно игровые и профессиональные | Может передаваться через USB-C (режим DisplayPort Alt Mode), если его поддерживает порт |
| SATA | Жесткие диски и SATA SSD | SATA III — до 6 Гбит/с, поэтому NVMe-накопители подключают через PCI Express |
| PCI Express | Видеокарты, NVMe SSD, сетевые карты | Пропускная способность зависит от поколения и числа линий (x1, x4, x16) |
| Ethernet, Wi-Fi, Bluetooth | Сеть и беспроводная периферия | Скорость согласуют обе стороны; у беспроводных она зависит от помех и расстояния |
Все цифры в таблице — максимальные по спецификации. Реальная скорость ограничена самым медленным звеном: портом, кабелем, устройством или контроллером.
Как посмотреть интерфейсы своего компьютера
- Windows: «Диспетчер устройств» (
devmgmt.msc) или в PowerShellGet-PnpDevice -PresentOnly— список подключенных устройств; сетевые интерфейсы —Get-NetAdapter. - Linux:
lsusb— устройства USB,lspci— устройства на шине PCI Express,ip link— сетевые интерфейсы. - macOS: «Информация о системе» или в терминале
system_profiler SPUSBDataType.
Команды только читают информацию. В минимальных сборках Debian и Ubuntu lsusb и lspci ставятся отдельно (пакеты usbutils и pciutils).
Если не работает: диагностика по симптому
| Симптом | Частая причина | Что проверить |
|---|---|---|
| Монитор через USB-C не показывает картинку, хотя ноутбук заряжается | Порт или кабель не поддерживают передачу видео | Значок DisplayPort или Thunderbolt у порта, характеристики кабеля, другой порт |
| Флешка копирует медленно | Устройство подключено к порту или кабелю USB 2.0 | Версию порта в характеристиках, скорость на другом порту |
| Монитор работает на 60 Гц вместо заявленной частоты | Версия HDMI или кабель не тянут нужный режим | Версию порта у видеокарты и монитора, кабель, настройки частоты в ОС |
| Устройство не определяется | Нет драйвера, неисправен кабель или порт | Видно ли устройство в «Диспетчере устройств» или lsusb |
Программный интерфейс (API): одна функция — три интерфейса
API (application programming interface) — договоренность о том, как одна программа вызывает возможности другой: какие есть функции или адреса, какие параметры они принимают и что возвращают. Вызывающей стороне не нужно знать внутреннее устройство, достаточно контракта.
Пример ниже показывает, что интерфейс отделен от логики. Одна функция перевода градусов доступна трем «клиентам»: другому Python-коду (API модуля), другой программе по сети (HTTP API) и человеку (CLI).
# converter.py
import argparse
import json
import math
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs, urlparse
# 1. Программный интерфейс (API модуля): функция с понятным контрактом
def c_to_f(celsius: float) -> float:
"""Переводит градусы Цельсия в Фаренгейты."""
if not math.isfinite(celsius) or celsius < -273.15:
raise ValueError("недопустимая температура")
return round(celsius * 9 / 5 + 32, 2)
# 2. HTTP API: та же функция, доступная другой программе по сети
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
url = urlparse(self.path)
if url.path != "/convert":
return self.reply(404, {"error": "not found"})
try:
c = float(parse_qs(url.query)["c"][0])
self.reply(200, {"c": c, "f": c_to_f(c)})
except (KeyError, ValueError) as e:
self.reply(400, {"error": f"bad input: {e}"})
def reply(self, code, body):
data = json.dumps(body, ensure_ascii=False).encode()
self.send_response(code)
self.send_header("Content-Type", "application/json; charset=utf-8")
self.send_header("Content-Length", str(len(data)))
self.end_headers()
self.wfile.write(data)
# 3. Интерфейс командной строки (CLI) для человека
if __name__ == "__main__":
p = argparse.ArgumentParser(description="Цельсий -> Фаренгейт")
p.add_argument("celsius", nargs="?", type=float)
p.add_argument("--serve", action="store_true", help="запустить HTTP API")
args = p.parse_args()
if args.serve:
# только локальный адрес: наружу учебный сервер не открываем
HTTPServer(("127.0.0.1", 8000), Handler).serve_forever()
elif args.celsius is None:
p.error("укажите температуру или --serve")
else:
print(c_to_f(args.celsius))
Через CLI: python converter.py 36.6 печатает 97.88, а запуск без аргументов — подсказку argparse:
usage: converter.py [-h] [--serve] [celsius]
converter.py: error: укажите температуру или --serve
Через API модуля: python -c "import converter; print(converter.c_to_f(-40))" печатает -40.0. Импорт не запускает CLI, потому что блок if __name__ == "__main__" выполняется только при прямом запуске файла.
Через HTTP API: в одном терминале запустите python converter.py --serve, в другом — клиент, который обращается к серверу как чужая программа:
# client.py
import json
from urllib.error import HTTPError
from urllib.request import urlopen
for query in ["c=100", "c=abc", "c=-300"]:
try:
with urlopen(f"http://127.0.0.1:8000/convert?{query}") as r:
print(r.status, json.load(r))
except HTTPError as e:
print(e.code, json.load(e))
200 {'c': 100.0, 'f': 212.0}
400 {'error': "bad input: could not convert string to float: 'abc'"}
400 {'error': 'bad input: недопустимая температура'}
Контракт API включает и ошибки: неверный ввод получает код 400 и сообщение, а не падение сервера. Проверка значений живет в самой функции, поэтому ее соблюдают все три интерфейса. Сервер слушает только 127.0.0.1 — из сети он недоступен.
Это учебный пример: встроенный http.server не предназначен для публичных сервисов, а реальному API нужны аутентификация, ограничение частоты запросов, журналирование и ответы об ошибках без внутренних подробностей.
Интерфейс в ООП: контракт для класса
В объектно-ориентированном программировании интерфейс — список методов, которые класс обещает реализовать. Код, который работает с интерфейсом, не зависит от конкретного класса: сегодня уведомления уходят по почте, завтра добавится SMS, а вызывающая функция не меняется. В Java и C# для этого есть ключевое слово interface, в Python — абстрактные классы из модуля abc (или структурные протоколы typing.Protocol).
from abc import ABC, abstractmethod
class Notifier(ABC):
"""Интерфейс: любой отправитель уведомлений обязан уметь send()."""
@abstractmethod
def send(self, to: str, text: str) -> bool: ...
class EmailNotifier(Notifier):
def send(self, to, text):
print(f"email -> {to}: {text}")
return True
class SmsNotifier(Notifier):
def send(self, to, text):
print(f"sms -> {to}: {text}")
return True
def alert_all(notifiers: list[Notifier], text: str) -> None:
# функция знает только интерфейс, а не конкретные классы
for n in notifiers:
n.send("admin", text)
alert_all([EmailNotifier(), SmsNotifier()], "диск заполнен на 95%")
email -> admin: диск заполнен на 95%
sms -> admin: диск заполнен на 95%
Что будет, если класс не выполнит контракт — например, метод назван push вместо send:
# Notifier - интерфейс из примера выше
class PushNotifier(Notifier):
def push(self, to, text): # метод назван иначе - контракт не выполнен
print(f"push -> {to}: {text}")
PushNotifier()
TypeError: Can't instantiate abstract class PushNotifier without an implementation for abstract method 'send'
Исправление — переименовать push в send с той же сигнатурой. Обратите внимание на границу проверки: Python ловит ошибку только при создании объекта, во время выполнения, и не проверяет типы параметров. Компилятор Java или C# сообщит о нереализованном методе интерфейса еще до запуска программы.
Выводы
- Интерфейс — граница между двумя системами и правила обмена; в IT различают пользовательский (человек — программа), аппаратный (устройство — устройство) и программный (программа — программа) интерфейсы.
- Разъем, протокол и интерфейс — разные понятия: через один разъем USB-C могут работать USB, DisplayPort и Thunderbolt.
- Реальная скорость аппаратного интерфейса ограничена самым медленным звеном: портом, кабелем или устройством.
- API отделяет логику от способа доступа: одну функцию можно открыть через CLI, модуль и HTTP, а контракт включает и ответы на ошибки.
- Интерфейс в ООП — список обязательных методов; Python проверяет его при создании объекта, Java и C# — при компиляции.
Где применяется / связь с практикой
Освойте тему на практике
С интерфейсами всех трех уровней каждый день работает специалист технической поддержки: помогает пользователю разобраться в GUI программы, выясняет, почему монитор не видит сигнал по USB-C, проверяет устройства в диспетчере и командной строке, а при сбое сервиса смотрит, что вернул его API. Если хотите системно освоить эту работу — от диагностики железа и сетей до работы с обращениями, — посмотрите курс по поддержке пользователей. Попробовать формат обучения бесплатно можно на открытых уроках Otus.
FAQ
Чем интерфейс отличается от протокола?
Протокол — правила обмена данными (формат сообщений, порядок, коды ошибок). Интерфейс шире: для железа он включает еще разъем и электрические сигналы, для программ — набор функций или адресов, которые сторона открывает другим.
Драйвер — это интерфейс?
Нет, драйвер — программа, которая реализует взаимодействие ОС с конкретным устройством. Он работает с аппаратным интерфейсом устройства с одной стороны и предоставляет программный интерфейс операционной системе с другой.
Что такое сетевой интерфейс в Linux?
Это точка подключения системы к сети с собственным именем: физическая карта (eth0, enp3s0, wlan0) или виртуальная (lo, мосты, VPN-туннели). Список показывает команда ip link.



