Привязка имени - Name binding

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

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

Связывание времени

  • Статическая привязка (или же раннее связывание) - привязка имени, выполняемая перед запуском программы [2].
  • Динамическое связывание (или же позднее связывание или виртуальная привязка) привязка имени выполняется во время работы программы [2].

Пример статической привязки - прямая C вызов функции: функция, на которую ссылается идентификатор, не может измениться во время выполнения.

Но пример динамического связывания динамическая отправка, как в C ++ вызов виртуального метода. Поскольку конкретный тип полиморфный объект не известен до времени выполнения (как правило), выполняемая функция динамически связана. Возьмем, например, следующие Ява код:

общественный пустота фу(Ява.утилита.Список<Строка> список) {    список.Добавить("бар");}

Список является интерфейс, так список должен относиться к подтип из этого. Это ссылка на LinkedList, ArrayList, или какой-то другой подтип из Список? Фактический метод, на который ссылается Добавить не известно до времени выполнения. В C таким экземпляром динамического связывания может быть вызов функции, на которую указывает переменная или выражение типа указателя функции, значение которого неизвестно, пока оно не будет фактически оценено во время выполнения.

Повторное связывание и мутация

Повторное связывание не следует путать с мутацией.

  • Переплет это изменение ссылка идентификатор.
  • Мутация это изменение упомянутый организация.

Рассмотрим следующее Ява код:

LinkedList<Строка> список;список = новый LinkedList<Строка>();список.Добавить("фу");список = значение NULL;

Идентификатор список изначально ничего не ссылается (это неинициализированный ); затем он повторно связывается для ссылки на объект (связанный список строк). Связанный список, на который ссылается список затем изменяется, добавляя строку в список. Наконец, список возвращается к значение NULL.

Поздняя статика

Поздняя статическая привязка - это вариант привязки где-то между статической и динамической привязкой. Рассмотрим следующее PHP пример:

класс А{    общественный статический $ слово = "Здравствуйте";    общественный статический функция Привет() { Распечатать себя::$ слово; }}класс B расширяет А{    общественный статический $ слово = "до свидания";}B::Привет();

В этом примере интерпретатор PHP связывает ключевое слово себя внутри A :: привет () к классу А, и поэтому звонок B :: привет () производит строку «привет». Если семантика self :: $ word был основан на позднем статическом связывании, то результат был бы «пока».

Начиная с версии PHP 5.3, поддерживается позднее статическое связывание.[3] В частности, если self :: $ word в приведенном выше были изменены на static :: $ word как показано в следующем блоке, где ключевое слово статический будет привязан только во время выполнения, тогда результат вызова B :: привет () будет "до свидания":

класс А{    общественный статический $ слово = "Здравствуйте";    общественный статический функция Привет() { Распечатать статический::$ слово; }}класс B расширяет А{    общественный статический $ слово = "до свидания";}B::Привет();

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

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

  1. ^ Microsoft (11 мая 2007 г.), Использование раннего и позднего связывания в автоматизации, Microsoft, получено 11 мая, 2009
  2. ^ а б Системная и программная инженерия - Словарь ISO / IEC / IEEE 24765: 2010 (E), IEEE, 15 декабря 2010 г.
  3. ^ «Поздние статические привязки». Получено 3 июля, 2013.