~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 5496372B0752B1D13D9822962480AF7F__1715617860 ✰
Заголовок документа оригинал.:
✰ Name binding - Wikipedia ✰
Заголовок документа перевод.:
✰ Привязка имени — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Name_binding ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/54/7f/5496372b0752b1d13d9822962480af7f.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/54/7f/5496372b0752b1d13d9822962480af7f__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 19:19:44 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 13 May 2024, at 19:31 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Привязка имени — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии

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

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

Время связывания [ править ]

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

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

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

public   void   foo  (  java.util  .  List  <String>   list  )   { 
     list  .   добавить  (  «бар»  ); 
  } 

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

Перепривязка и мутация [ править ]

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

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

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

LinkedList  <String>   список  ; 
  список   =   новый   LinkedList  <String>  (  )  ; 
  список  .   добавить  (  «фу»  ); 
  список   =   ноль  ; 
  {   LinkedList  <  Целое число  >   list   =   новый   LinkedList  <  Целое число  >  ();    список  .   добавить  (  Целое число  (  2  ));    } 

Идентификатор listпривязан к переменной в первой строке; во втором — переменной присваивается ссылка на объект (связанный список строк). Затем связанный список, на который ссылается переменная, мутируется, добавляя в список строку. Далее переменной присваивается константа null. В последней строке идентификатор перепривязывается к области действия блока. Операции внутри блока получают доступ к новой переменной, а не к переменной, ранее привязанной к ней. list.

Поздняя статика [ править ]

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

класс   A 
 { 
     public   static   $word   =   "привет"  ; 
      public   static   function   hello  ()   {   print   self  ::  $word  ;    } 
 } 

 Класс   B   расширяет   A 
 { 
     public   static   $word   =   "bye"  ; 
  } 

 B  ::  привет  (); 

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

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

класс   A 
 { 
     public   static   $word   =   "привет"  ; 
      public   static   function   hello  ()   {   print   static  ::  $word  ;    } 
 } 

 Класс   B   расширяет   A 
 { 
     public   static   $word   =   "bye"  ; 
  } 

 B  ::  привет  (); 

См. также [ править ]

  • Таблица ветвей - метод передачи управления программой другой части программы.
  • Абстрактный синтаксис высшего порядка - метод представления абстрактных синтаксических деревьев в языках с привязками переменных.

Ссылки [ править ]

  1. ^ Microsoft (11 мая 2007 г.), Использование раннего связывания и позднего связывания в автоматизации , Microsoft , получено 11 мая 2009 г.
  2. ^ Перейти обратно: а б Системная и программная инженерия. Словарь ISO/IEC/IEEE 24765:2010(E) , IEEE, 15 декабря 2010 г.
  3. ^ «Поздние статические привязки» . Проверено 3 июля 2013 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 5496372B0752B1D13D9822962480AF7F__1715617860
URL1:https://en.wikipedia.org/wiki/Name_binding
Заголовок, (Title) документа по адресу, URL1:
Name binding - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)