Инверсия абстракции (Nufyjvnx gQvmjgtenn)
Перейти к навигации
Перейти к поиску
Инве́рсия абстра́кции (англ. abstraction inversion) — ошибка проектирования программного модуля, когда в сложном модуле для пользователя закрыты некоторые простые, но необходимые функции. В результате пользователь модуля вынужден реализовывать простую функциональность на основе интерфейса модуля, иногда с использованием недокументированных возможностей и побочных эффектов, в то время когда она уже реализована внутри модуля. То есть, реализовывать более низкоуровневые функции на основе высокоуровневых, откуда и происходит термин «инверсия абстракции».
Последствия[править | править код]
- Функция, реализованная с инверсией абстракции, может иметь неожиданно высокие требования по памяти и времени вычисления.
- Пользователям приходится писать то, что уже написано, увеличивая риск возникновения ошибок.
Как обойти[править | править код]
Разработчикам модуля:
- Если в модуле есть сходные функции (например, критическая секция и мютекс), тщательно выясните, что писать с нуля, и что делать «обёрткой».
- Не заставляйте пользователей писать то, что у вас написано.
Пользователям модуля:
- Выбирайте версию модуля. Иногда проблема имеется только в более новой версии.
Неправильное применение термина[править | править код]
- Этим словом неправильно называют сложный модуль с простым интерфейсом (что, как правило, желательно).
- Иногда это навешивают как «ярлык» на ненравящуюся архитектуру.
Примеры[править | править код]
- В объектно-ориентированных языках программирования простые конструкции приходится реализовывать сложными путями. Например, чтобы создать поток в Java, нужно подключить интерфейс
Runnable
и переопределить методrun()
. Иногда это служит единственным объяснением классу. - Во многих библиотеках работы с графикой в Windows палитра реализуется через WinAPI (даже если библиотека WinAPI не используется). В этом случае могут быть проблемы с созданием палитровых рисунков с количеством цветов, близким к 256 (так как Windows резервирует несколько цветов в палитре для собственных нужд).
Примечания[править | править код]
Литература[править | править код]
- Alan Burns, Andy Wellings. Concurrent and Real-Time Programming in Ada. — Cambridge University Press, 2007. — С. 253.
Ссылки[править | править код]
- Abstraction Inversion (англ.). c2.com.
int main()
{
printf("Hi");
return 0;
}
| Это заготовка статьи о программировании. Помогите Википедии, дополнив её. |
В статье не хватает ссылок на источники (см. рекомендации по поиску). |