Jump to content

Действие на расстоянии (компьютерное программирование)

Действие на расстоянии — это антипаттерн в информатике, при котором поведение в одной части программы сильно трудно или невозможно идентифицировать варьируется в зависимости от того, что операции в другой части программы .

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

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

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

Этот пример из языка программирования Perl демонстрирует особенно серьезный случай действия на расстоянии (обратите внимание на $[ переменная устарела в более поздних версиях Perl [1] ):

Индексы массива обычно начинаются с 0, поскольку значение $[ обычно равен 0; если ты установишь $[ до 1, то массивы начинаются с 1, что радует программистов Fortran и Lua , и поэтому мы видим подобные примеры в perl(3) Справочная страница :

foreach $num ($[ .. $#entry) {
    print "  $num\t'",$entry[$num],"'\n";
}

И, конечно, вы можете установить $[ до 17, чтобы массивы начинались с некоторого случайного числа, например 17 или 4, а не с 0 или 1. Это был отличный способ саботировать авторов модулей.

К счастью, здравомыслие взяло верх. Сейчас признано, что эти особенности были ошибкой. В списке рассылки perl5-porters теперь есть крылатая фраза для таких функций: они называются «действие на расстоянии». Принцип заключается в том, что объявление в одной части программы не должно радикально и незаметно изменять поведение какой-либо другой части программы.

Марк Джейсон Доминус , Возвращение к грехам Perl [2]

Действие на расстоянии между объектами

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

Правильное объектно-ориентированное программирование предполагает принципы проектирования, которые позволяют избежать действий на расстоянии.

Закон Деметры гласит, что объект должен взаимодействовать только с другими объектами вблизи себя. Если потребуется действие в удаленной части системы, его следует реализовать путем распространения сообщения. Правильный дизайн существенно ограничивает количество действий на расстоянии, что способствует удобству сопровождения программ. Принуждение к созданию объектной оргии возникает из-за плохого дизайна интерфейса, который, возможно, принимает форму объекта Бога , не реализует истинные объекты или не учитывает Закон Деметры.

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

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

См. также

[ редактировать ]
  1. ^ «Perl-документация $[ переменная" .
  2. ^ Доминус, Марк Джейсон (1999). «Возвращение к грехам Perl» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 39ee4cbf94c0bd31a441e39ab8271a4d__1715608560
URL1:https://arc.ask3.ru/arc/aa/39/4d/39ee4cbf94c0bd31a441e39ab8271a4d.html
Заголовок, (Title) документа по адресу, URL1:
Action at a distance (computer programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)