Привязка имени

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

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

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

Содержание
  • 1 Время связывания
  • 2 Повторное связывание и мутация
  • 3 Поздняя статика
  • 4 См. Также
  • 5 Ссылки
Время связывания
  • Статическое связывание (или раннее связывание) Связывание имен выполняется до запуска программы.
  • Динамическое связывание (или позднее связывание или виртуальное связывание) - это связывание по имени, выполняемое во время работы программы.

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

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

public void foo (java.util.List list) {list.add ("bar"); }

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

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

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

  • Повторное связывание - это изменение ссылочного идентификатора.
  • Мутация - это изменение ссылочного объекта.

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

LinkedList list ; список = новый LinkedList (); list.add ("фу"); список = ноль;

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

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

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

class A {static $ word = "hello"; статическая функция hello () {print self :: $ word; }} класс B расширяет A {static $ word = "bye"; } B :: hello ();

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

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

class A {static $ word = "hello"; статическая функция hello () {print static :: $ word; }} класс B расширяет A {static $ word = "bye"; } B :: hello ();
См. Также
Ссылки
Последняя правка сделана 2021-05-31 08:52:17
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте