Русская Википедия:Инверсия абстракции

Материал из Онлайн справочника
Версия от 10:42, 19 августа 2023; EducationBot (обсуждение | вклад) (Новая страница: «{{Русская Википедия/Панель перехода}} '''Инве́рсия абстра́кции''' ({{lang-en|abstraction inversion}}) — ошибка проектирования программного модуля, когда в сложном модуле для пользователя закрыты некоторые простые, но необх...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Инве́рсия абстра́кции (Шаблон:Lang-en) — ошибка проектирования программного модуля, когда в сложном модуле для пользователя закрыты некоторые простые, но необходимые функции. В результате пользователь модуля вынужден реализовывать простую функциональность на основе интерфейса модуля, иногда с использованием недокументированных возможностей и побочных эффектов, в то время когда она уже реализована внутри модуля. То есть, реализовывать более низкоуровневые функции на основе высокоуровневых, откуда и происходит термин «инверсия абстракции».

Последствия

  • Функция, реализованная с инверсией абстракции, может иметь неожиданно высокие требования по памяти и времени вычисления.
  • Пользователям приходится писать то, что уже написано, увеличивая риск возникновения ошибок.

Как обойти

Разработчикам модуля:

  • Если в модуле есть сходные функции (например, критическая секция и мютекс), тщательно выясните, что писать с нуля, и что делать «обёрткой».
  • Не заставляйте пользователей писать то, что у вас написано.

Пользователям модуля:

  • Выбирайте версию модуля. Иногда проблема имеется только в более новой версии.

Неправильное применение термина

  • Этим словом неправильно называют сложный модуль с простым интерфейсом (что, как правило, желательно).
  • Иногда это навешивают как «ярлык» на ненравящуюся архитектуру.

Примеры

  • В объектно-ориентированных языках программирования простые конструкции приходится реализовывать сложными путями. Например, чтобы создать поток в Java, нужно подключить интерфейс Runnable и переопределить метод run(). Иногда это служит единственным объяснением классу.
  • Во многих библиотеках работы с графикой в Windows палитра реализуется через WinAPI (даже если библиотека WinAPI не используется). В этом случае могут быть проблемы с созданием палитровых рисунков с количеством цветов, близким к 256 (так как Windows резервирует несколько цветов в палитре для собственных нужд).

Примечания

Шаблон:Примечания

Литература

Ссылки

Шаблон:Compu-prog-stub Шаблон:Нет источников