Что такое интерфейс: виды интерфейсов простыми словами — от GUI до API и USB

Что такое интерфейс: виды интерфейсов простыми словами - от GUI до API и USB Полезное

Интерфейс — это граница между двумя системами и набор правил, по которым они обмениваются командами и данными. Системами могут быть человек и программа, два устройства или две программы, поэтому слово «интерфейс» в 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) или в PowerShell Get-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.

OTUS Журнал