Инверсия абстракции
Материал из Википедии — свободной энциклопедии
Инве́рсия абстра́кции (abstraction inversion) — Ошибка проектирования программного модуля, когда в сложном модуле для пользователя закрыты простые, но нужные функции. В результате пользователю приходится писать простую функциональность, в то время как она уже написана.
Содержание |
[править] Последствия
- Уменьшается скорость программы, увеличиваются расходы памяти.
- Пользователям приходится писать то, что уже написано.
[править] Как обойти
Разработчикам модуля:
- Если в модуле есть сходные функции (например, критическая секция и мютекс), тщательно выясните, что писать с нуля, и что делать «обёрткой».
- Не заставляйте пользователей писать то, что у вас написано.
Пользователям модуля:
- Выбирайте, какой модуль использовать. Иногда более новая версия имеет эту проблему, в то время как более старая свободна от неё.
[править] Неправильное применение термина
- Этим словом неправильно называют сложный модуль с простым интерфейсом (что, как правило, желательно).
- Иногда это навешивают как «ярлык» на ненравящуюся архитектуру.
[править] Примеры
- В объектно-ориентированных языках программирования простые конструкции приходится реализовывать сложными путями. Например, чтобы создать поток в Java, нужно подключить интерфейс
Runnable
и переопределить методrun()
. Иногда это служит единственным объяснением классу. - Во многих библиотеках работы с графикой в Windows палитра реализуется через WinAPI (даже если библиотека WinAPI не использует). В этом случае могут быть проблемы с созданием палитровых рисунков с количеством цветов, близком к 256 (так как Windows резервирует несколько цветов в палитре для собственных нужд).