Атауы міндетті - Name binding

Жылы бағдарламалау тілдері, атауы міндетті субъектілердің (деректер және / немесе код) бірлестігі болып табылады идентификаторлар.[1] Нысанға байланысты идентификатор айтады анықтама сол объект. Машина тілдері идентификаторлардың кіріктірілген ұғымы жоқ, бірақ бағдарламалаушыға қызмет және белгілеу ретінде атауды байланыстыру бағдарламалау тілдерімен жүзеге асырылады. Байланыстыру тығыз байланысты ауқымдылық ретінде, қандай аттар қандай объектілермен байланыстырылатынын - бағдарлама кодында қай жерлерде болатындығын анықтайды (лексикалық тұрғыдан ) және мүмкін орындалу жолдарының қайсысында (уақытша ).

Идентификаторды қолдану идентификатор байланыстыратын контекстте идентификатор байланыстырушы (анықтайтын) құбылыс деп аталады. Барлық басқа көріністерде (мысалы, өрнектерде, тапсырмаларда және кіші бағдарламалық қоңырауларда) идентификатор міндетті түрде нені білдіреді; мұндай көріністер қолданбалы құбылыстар деп аталады.

Түптеу уақыты

  • Статикалық байланыстыру (немесе ерте міндеттеу) - бұл бағдарлама іске қосылмай тұрып орындалатын атау [2].
  • Динамикалық байланыстыру (немесе кеш байланыстыру немесе виртуалды байланыстыру) - бұл бағдарлама жұмыс істеп тұрған кезде орындалатын атау [2].

Статикалық байланыстың мысалы - тікелей C функциялық шақыру: идентификатор сілтеме жасайтын функция жұмыс кезінде өзгере алмайды.

Бірақ динамикалық байланыстырудың мысалы болып табылады динамикалық диспетчер, а сияқты C ++ виртуалды әдіс. Нақты түрінен бастап а полиморфты объект жұмыс уақытына дейін белгісіз (жалпы), орындалатын функция динамикалық байланысқан. Мысалы, келесілерді алайық Java коды:

қоғамдық жарамсыз ақымақ(java.утил.Тізім<Жол> тізім) {    тізім.қосу(«бар»);}

Тізім болып табылады интерфейс, сондықтан тізім а сілтемесі болуы керек кіші түр оның. Бұл сілтеме ма Байланысты тізім, an ArrayList, немесе басқа кіші түр туралы Тізім? Сілтеме жасаған нақты әдіс қосу жұмыс уақытына дейін белгісіз. Си тілінде динамикалық байланыстырудың мұндай данасы айнымалымен көрсетілген функцияға шақыру болуы мүмкін немесе функционалдық типтің өрнегі, ол жұмыс уақытында нақты бағаланғанға дейін белгісіз болады.

Қайта оралу және мутация

Қайта орауды мутациямен шатастыруға болмайды.

  • Қайта байлау бұл өзгертулер сілтеме жасау идентификатор.
  • Мутация бұл өзгертулер сілтеме жасалған тұлға.

Келесі жағдайды қарастырайық Java коды:

Байланысты тізім<Жол> тізім;тізім = жаңа Байланысты тізім<Жол>();тізім.қосу(«ақымақ»);тізім = нөл;

Идентификатор тізім бастапқыда ештеңеге сілтеме жасалмайды (ол инициализацияланбаған ); содан кейін объектіге сілтеме жасау қалпына келеді (жолдардың байланыстырылған тізімі). Сілтеме жасалған сілтеме тізімі тізім тізбеге жол қосып мутацияланады. Соңында, тізім қалпына келеді нөл.

Кеш статикалық

Кеш статикалық байланыстыру - бұл статикалық және динамикалық байланыстыру арасындағы байланыстырудың нұсқасы. Келесі жағдайды қарастырайық PHP мысал:

сынып A{    қоғамдық статикалық $ word = «Сәлеметсіз бе»;    қоғамдық статикалық функциясы Сәлеметсіз бе() { басып шығару өзіндік::$ word; }}сынып B ұзарады A{    қоғамдық статикалық $ word = «қош»;}B::Сәлеметсіз бе();

Бұл мысалда PHP интерпретаторы кілт сөзді байланыстырады өзіндік ішінде А :: сәлем () сыныпқа Aжәне, осылайша, қоңырау B :: сәлем () «сәлем» жолын шығарады. Егер семантикасы өзіндік :: $ сөз кеш статикалық байланыстыруға негізделген болса, онда нәтиже «қош» болар еді.

PHP 5.3 нұсқасынан бастап, кеш статикалық байланыстыруға қолдау көрсетіледі.[3] Нақтырақ айтқанда, егер өзіндік :: $ сөз жоғарыда өзгертілді статикалық :: $ word келесі блокта көрсетілгендей, мұнда кілт сөзі статикалық тек орындалу кезінде байланысты болады, содан кейін қоңыраудың нәтижесі B :: сәлем () «қош» болар еді:

сынып A{    қоғамдық статикалық $ word = «Сәлеметсіз бе»;    қоғамдық статикалық функциясы Сәлеметсіз бе() { басып шығару статикалық::$ word; }}сынып B ұзарады A{    қоғамдық статикалық $ word = «қош»;}B::Сәлеметсіз бе();

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Microsoft (2007 ж. 11 мамыр), Автоматикада ерте байланыстыруды және кеш байланыстыруды қолдану, Microsoft, алынды 11 мамыр, 2009
  2. ^ а б Жүйелер және бағдарламалық қамтамасыз ету - ISO / IEC / IEEE 24765: 2010 (E) сөздік қоры, IEEE, 15 желтоқсан, 2010 жыл
  3. ^ «Кеш статикалық байланыстыру». Алынған 3 шілде, 2013.