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

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

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

Как сформулировал Джоэл Спольски, закон of Leaky Abstractions утверждает:

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

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

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

Содержание
  • 1 История
  • 2 Влияние на разработку программного обеспечения
  • 3 Примеры
  • 4 См. Также
  • 5 Ссылки
История

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

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

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

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

Примеры

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

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

Интерфейс Git - еще один пример ненадежной абстракции, как описано в этой статье.

См. Также
Ссылки
Последняя правка сделана 2021-05-26 04:16:42
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте