Jump to content

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

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

Возможные негативные последствия:

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

Предполагаемые примеры из профессиональных кругов программирования включают:

  • В Ada выбор конструкции рандеву в качестве примитива синхронизации заставил программистов реализовывать более простые конструкции, такие как семафоры, на более сложной основе. [1]
  • В Applesoft BASIC целочисленная арифметика была реализована поверх арифметики с плавающей запятой , и не было побитовых операторов и поддержки копирования растровой графики (хотя язык поддерживал векторную графику на растровом оборудовании Apple II). Из-за этого игры и другие программы, написанные на BASIC, работали медленнее.
  • Как и Applesoft BASIC, Lua имеет тип с плавающей запятой в качестве единственного числового типа. [2] при настройке для настольных компьютеров, [3] и до Lua 5.2 в нем не было побитовых операторов. [4]
  • Создание объекта для представления функции является трудоемким процессом в объектно-ориентированных языках, таких как Java и C++ (особенно до C++11 и Java 8), в которых функции не являются объектами первого класса . В C++ можно сделать объект «вызываемым», перегрузив () оператор, но по-прежнему часто необходимо реализовать новый класс, такой как Functors в STL . ( Лямбда-функция C++11 значительно упрощает создание объекта, представляющего функцию.)
  • Том Лорд предположил, что система контроля версий Subversion платит за инверсию абстракции, заключающуюся в реализации базы данных, доступной только для записи, в базе данных для чтения/записи с низкой производительностью. [5]
  • Использование хранимых процедур для манипулирования данными в реляционной базе данных без предоставления программистам права развертывать такие процедуры приводит к повторной реализации запросов за пределами базы данных. Например, извлекаются большие наборы данных (в крайнем случае — целые таблицы), а фактическая фильтрация происходит в коде приложения. Альтернативно, тысячи строк обновляются (вставляются или даже извлекаются) одна за другой вместо выполнения запроса из нескольких строк.
  • от Microsoft WinUI 3 систематически заменяет строку заголовка создаваемых ею окон на собственную, которая игнорирует настройки цвета конечного пользователя и вместо этого всегда отображается серым. Для применения цвета, выбранного конечным пользователем, к строке заголовка требуется использование дополнительного кода настройки в Windows 11 и полная замена пользовательской строки заголовка другой настраиваемой в Windows 10. [6]

Примеры, распространенные за пределами профессиональных кругов программирования, включают:

  • Использование функций поиска в электронных таблицах для репликации функциональности базы данных.
  • Использование вариантов типов данных в качестве счетчиков циклов в Microsoft Visual Basic, где также доступен целочисленный тип.

См. также

[ редактировать ]
  1. ^ Критика определения DIN Kernel Lisp версии 1.2, сноска 2. Архивировано 6 мая 2018 г. в Wayback Machine Ады - говорится (без ссылок), что этот термин возник из критики рандеву и, по-видимому, является одним из самых ранних применений.
  2. ^ Программирование на Lua: 2.3 - Номера доступны 12 октября 2009 г.
  3. ^ lua-users c2: Доступ с плавающей запятой 12 октября 2009 г.
  4. ^ lua-users c2: Доступ к побитовым операторам 15 января 2013 г.
  5. ^ sourcefrog: Том Лорд о Subversion
  6. ^ Настройка строки заголовка — Приложения для Windows | Microsoft Обучение
[ редактировать ]
  • Инверсия абстракции в репозитории шаблонов Портленда - обширное обсуждение, большая часть которого касается «инверсии абстракции» в смысле «скрытой сложности».
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 65660a50499cf4bdf2e403485aadc185__1674546960
URL1:https://arc.ask3.ru/arc/aa/65/85/65660a50499cf4bdf2e403485aadc185.html
Заголовок, (Title) документа по адресу, URL1:
Abstraction inversion - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)