stringtranslate.com

Косвенность

В компьютерном программировании косвенность (также называемая разыменованием ) — это возможность ссылаться на что-то, используя имя, ссылку или контейнер вместо самого значения . Наиболее распространенной формой косвенности является манипулирование значением через его адрес в памяти . Например, доступ к переменной с помощью указателя . Сохраненный указатель, который существует для предоставления ссылки на объект посредством двойной косвенности, называется узлом косвенности . В некоторых старых компьютерных архитектурах косвенные слова поддерживали множество более или менее сложных режимов адресации .

Другим важным примером является система доменных имен , которая позволяет использовать такие имена en.wikipedia.orgвместо сетевых адресов, как 208.80.154.224. Переход от удобочитаемых имен к сетевым адресам означает, что ссылки на веб-страницу становятся более запоминающимися, и ссылки не нужно менять при перемещении веб-сайта на другой сервер.

Обзор

Знаменитый афоризм Батлера Лэмпсона гласит: «Все проблемы в информатике могут быть решены с помощью другого уровня косвенности» (« фундаментальная теорема разработки программного обеспечения »). [1] Это часто намеренно неправильно цитируют, заменяя « уровень абстракции » словом «уровень косвенности». Часто цитируемое следствие этого: «... за исключением проблемы слишком большого количества уровней косвенности».

В юмористическом интернет-меморандуме RFC 1925 утверждается ,  что:

(6) Проблему легче переместить (например, переместив ее в другую часть общей сетевой архитектуры ), чем решить ее.

(6а) (следствие). Всегда можно добавить еще один уровень косвенности.

В объектно-ориентированном программировании широко используется косвенность, простым примером является динамическая диспетчеризация . Примерами косвенности более высокого уровня являются шаблоны проектирования прокси и прокси-сервера . Делегирование — еще один классический пример шаблона косвенности. В строго типизированных интерпретируемых языках с динамическими типами данных большинство ссылок на переменные требуют определенного уровня косвенности: сначала тип переменной проверяется на безопасность, а затем указатель на фактическое значение разыменовывается и обрабатывается.

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

При символьном программировании на основе формальной математической спецификации использование косвенности может оказаться весьма полезным. Начнем с простого примера: переменные x , y и z в уравнении могут относиться к любому числу. Можно представить объекты для различных чисел, а затем x , y и z могут указывать на конкретные числа, используемые для конкретной задачи. Простой пример имеет ограничения, поскольку действительных чисел бесконечно много. В различных других частях символьного программирования имеется ограниченное количество символов. Итак, переходя к более важному примеру, в логике формула α может относиться к любой формуле, поэтому это может быть β , γ , δ , ... или ηπ , ςσ , ... Когда построитель множеств используется обозначение : утверждение Δ={ α } означает набор всех формул - поэтому, хотя речь идет об α , здесь есть два уровня косвенности: первый - к множеству всех α , а затем второй - к конкретной формуле для каждой появление α в множестве ∆.

Смотрите также

Рекомендации

  1. ^ Спинеллис, Диомидис (2007). «Другой уровень косвенности». В Ораме, Энди; Уилсон, Грег (ред.). Красивый код: ведущие программисты объясняют, как они думают. Севастополь, Калифорния: О'Рейли и партнеры. стр. 279–291.