Jump to content

Дырявая абстракция

В разработке программного обеспечения дырявая абстракция — это абстракция , из которой утекают детали, которые она должна абстрагировать. [1]

сформулированный Джоэлом Спольски , Закон дырявых абстракций, гласит: [2]

Все нетривиальные абстракции в той или иной степени дырявы.

Это утверждение подчеркивает особенно проблемную причину дефектов программного обеспечения: уверенность разработчика программного обеспечения в безошибочности абстракции.

В статье Спольски приводятся примеры абстракции, которая работает большую часть времени, но в которой нельзя игнорировать детали базовой сложности, что приводит к утечке сложности из абстракции обратно в программное обеспечение, которое ее использует.

Термин «дырявая абстракция» был популяризирован в 2002 году Джоэлом Спольски . [2] [3] В статье Кичалеса 1992 года описаны некоторые проблемы, связанные с несовершенными абстракциями, и представлено потенциальное решение проблемы, позволяющее настраивать саму абстракцию. [4]

Влияние на разработку программного обеспечения

[ редактировать ]

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

Однако этот закон утверждает, что разработчики надежного программного обеспечения в любом случае должны изучить основные детали абстракции.

Спольски В статье приводится множество примеров дырявых абстракций, которые создают проблемы при разработке программного обеспечения:

  • Стек протоколов TCP/IP представляет собой комбинацию TCP , которая пытается обеспечить надежную доставку информации, работающую поверх IP , который предоставляет только услуги «наилучшего качества». Когда IP теряет пакет, TCP должен передать его повторно, что занимает дополнительное время. Таким образом, TCP обеспечивает абстракцию надежного соединения, но детали реализации просачиваются в виде потенциально изменяющейся производительности (когда данные должны быть переданы повторно), страдает пропускная способность и задержка, и соединение все равно может полностью разорваться.
  • Итерация по большому двумерному массиву может иметь совершенно разную производительность, если выполняется горизонтально, а не вертикально, в зависимости от порядка, в котором элементы хранятся в памяти. Одно направление может значительно увеличить количество промахов в кэше и ошибок страниц , которые значительно задерживают доступ к памяти.
  • Язык SQL абстрагирует процедурные этапы запроса к базе данных , позволяя пользователю просто определить, что он хочет. Но некоторые SQL-запросы выполняются в тысячи раз медленнее, чем другие логически эквивалентные запросы. На еще более высоком уровне абстракции системы ORM , которые изолируют объектно-ориентированный код от реализации персистентности объектов с использованием реляционной базы данных, по-прежнему заставляют программиста думать в терминах баз данных, таблиц и собственных SQL-запросов, как только выполнение Запросы, генерируемые ORM, становятся проблемой.
  • Хотя сетевые файловые системы, такие как NFS и SMB, позволяют обращаться с файлами на удаленных машинах так, как если бы они были локальными, соединение с удаленной машиной может замедлиться или прерваться, и файл перестанет вести себя так, как если бы он был локальным.
  • Платформа программирования веб-форм ASP.NET , которую не следует путать с ASP.NET MVC, абстрагирует разницу между скомпилированным внутренним кодом для обработки щелчка по гиперссылке ( <a>) и код для обработки нажатия кнопки. Однако ASP.NET необходимо скрывать тот факт, что в HTML нет возможности отправить форму по гиперссылке. Для этого он генерирует несколько строк JavaScript и присоединяет onclick к гиперссылке обработчик . Однако если у конечного пользователя отключен JavaScript, приложение ASP.NET будет работать со сбоями. Более того, нельзя наивно думать об обработчиках событий в ASP.NET так же, как в среде настольного графического интерфейса, такой как Windows Forms ; из-за асинхронной природы Интернета обработка обработчиков событий в ASP.NET требует обмена данными с сервером и перезагрузки формы.

В 2020 году Массачусетского технологического института преподаватели информатики Аниш, Хосе и Джон утверждали, что интерфейс командной строки для git — это дырявая абстракция, в которой для эффективного использования необходимо понимать лежащий в основе «красивый дизайн» модели данных git. из git. [5]

См. также

[ редактировать ]
  1. ^ Сейбель, Питер (1 ноября 2006 г.). Практический Common Lisp . Апресс. п. 96. ИСБН  978-1-4302-0017-8 .
  2. ^ Перейти обратно: а б Спольски, Джоэл (2002). «Закон дырявых абстракций» . Проверено 22 сентября 2010 г.
  3. ^ арвиндпдмн (23 августа 2019 г.). «Дырявые абстракции» . Девопедия . Проверено 7 июля 2020 г.
  4. ^ Кицалес, Грегор (1992). «На пути к новой модели абстракции в разработке программного обеспечения» (PDF) . Архивировано из оригинала (PDF) 4 июня 2011 г. Проверено 3 февраля 2010 г.
  5. ^ «Контроль версий (Git)» . недостающий семестр вашего обучения в области компьютерных наук . Проверено 31 июля 2020 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 38d391a24198c1edb49a2dc4c77ab24c__1710875220
URL1:https://arc.ask3.ru/arc/aa/38/4c/38d391a24198c1edb49a2dc4c77ab24c.html
Заголовок, (Title) документа по адресу, URL1:
Leaky abstraction - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)