Инверсия абстракции

Инверсия абстракции

Инве́рсия абстра́кции (abstraction inversion) — ошибка проектирования программного модуля, когда в сложном модуле для пользователя закрыты простые, но нужные функции. В результате пользователю приходится писать простую функциональность, надстраивая её над сложной, иногда с использованием недокументированных возможностей и побочных эффектов, в то время когда она уже написана.

Содержание

Последствия

  • Уменьшается скорость программы, увеличиваются расходы памяти.
  • Пользователям приходится писать то, что уже написано.

Как обойти

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

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

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

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

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

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

Примеры

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



Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное


Смотреть что такое "Инверсия абстракции" в других словарях:

  • Инверсия управления — (Inversion of Control, IoC)  важный принцип объектно ориентированного программирования, используемый для уменьшения связанности в компьютерных программах. Формулировка: Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба …   Википедия

  • Паблик Морозов — Паблик Морозов  в объектно ориентированном программировании шуточное название класса потомка, который обеспечивает открытый доступ к закрытым полям класса предка. Наличие объектов типа «Паблик Морозов» говорит об избыточно закрытой… …   Википедия

  • Антипаттерн — Возможно, эта статья содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае она может быть выставлена на удаление. Дополнительные сведения могут быть на странице обсуждения. (25 мая 2011) …   Википедия

  • АЛГЕБРА ЛОГИКИ —         система алгебраич. методов решения логич. задач, а также совокупность задач, решаемых такими методами. А. л. в узком смысле слова алгебраич. (табличное, матричное) построение классич. логики высказываний, в котором рассматриваются… …   Философская энциклопедия

  • Элементарная геометрия —         часть геометрии, входящая в элементарную математику (См. Элементарная математика). Границы Э. г., как и вообще элементарной математики, не являются строго очерченными. Говорят, что Э. г. есть та часть геометрии, которая изучается в… …   Большая советская энциклопедия

  • Verilog — Класс языка: Язык описания аппаратуры Появился в: 1983 1984 Автор(ы): Phil Moorby, Prabhu Goel Расширение файлов: .v Verilog, Verilog HDL (англ. Verilog Hardwar …   Википедия

  • Новый научный дух —         «НОВЫЙ НАУЧНЫЙ ДУХ» («Le nouvel esprit scientifique») программная работа Г. Башляра, вышедшая в свет в 1934. Она ориентирует эпистемологическую мысль на поиски новой динамической рациональности, формирующейся в революционных… …   Энциклопедия эпистемологии и философии науки

  • Принцип инверсии зависимостей — (англ. Dependency Inversion Principle, DIP)  важный принцип объектно ориентированного программирования, используемый для уменьшения связанности в компьютерных программах. Входит в пятёрку принципов SOLID. Формулировка Модули верхних… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»