Ismning majburiyligi - Name binding

Yilda dasturlash tillari, nom majburiy sub'ektlarning (ma'lumotlar va / yoki kod) birlashmasi identifikatorlar.[1] Ob'ektga bog'langan identifikator deyiladi ma'lumotnoma bu ob'ekt. Mashina tillari identifikatorlarning ichki tushunchasiga ega emas, lekin dasturchi uchun xizmat va yozuv sifatida nom-ob'ektni bog'lash dasturlash tillari tomonidan amalga oshiriladi. Bog'lanish bilan chambarchas bog'liq qamrov doirasi sifatida, qaysi nomlar qaysi ob'ektlar bilan bog'lanishini belgilaydi - dastur kodidagi qaysi joylarda (leksik jihatdan ) va qaysi mumkin bo'lgan ijro yo'llaridan biri (vaqtincha ).

Identifikatordan foydalanish id uchun majburiylikni o'rnatadigan kontekstda id majburiy (aniqlovchi) hodisa deyiladi. Boshqa barcha hodisalarda (masalan, iboralar, topshiriqlar va subprogram chaqiriqlarida) identifikator nima bilan bog'liqligini anglatadi; bunday hodisalar amaliy hodisalar deyiladi.

Majburiy vaqt

  • Statik majburiy (yoki erta majburiy) bu dasturni ishga tushirishdan oldin bajarilgan nomlarni majburiy bajarishdir [2].
  • Dinamik majburiy (yoki kech majburiy yoki virtual majburiy) - bu dastur ishlayotganda bajariladigan nomlarni majburiy bajarish [2].

Statik bog'lanishning misoli to'g'ridan-to'g'ri C funktsiya chaqiruvi: identifikator tomonidan havola qilingan funktsiya ish vaqtida o'zgarishi mumkin emas.

Ammo dinamik bog'lanishning misoli dinamik jo'natish, a kabi C ++ virtual usul bilan qo'ng'iroq qilish. A-ning o'ziga xos turidan beri polimorfik ob'ekt ish vaqtidan oldin ma'lum emas (umuman), bajarilgan funktsiya dinamik ravishda bog'langan. Masalan, quyidagilarni oling Java kod:

jamoat bekor foo(java.util.Ro'yxat<Ip> ro'yxat) {    ro'yxat.qo'shish("bar");}

Ro'yxat bu interfeys, shuning uchun ro'yxat ga murojaat qilish kerak pastki turi undan. A ga havola bormi? LinkedList, an ArrayListyoki boshqa narsalar pastki turi ning Ro'yxat? Havola qilingan haqiqiy usul qo'shish ish vaqtigacha ma'lum emas. C da dinamik bog'lanishning bunday misoli o'zgaruvchiga ishora qilgan funktsiya chaqiruvi yoki funktsiya ko'rsatgichi turining ifodasi bo'lishi mumkin, uning qiymati ish vaqtida aniqlangunga qadar noma'lum.

Orqaga bog'lash va mutatsiya

Orqaga bog'lashni mutatsiya bilan aralashtirmaslik kerak.

  • Qayta bog'lash ga o'zgartirish havola qilish identifikator.
  • Mutatsiya ga o'zgartirish havola qilingan tashkilot.

Quyidagilarni ko'rib chiqing Java kod:

LinkedList<Ip> ro'yxat;ro'yxat = yangi LinkedList<Ip>();ro'yxat.qo'shish("foo");ro'yxat = bekor;

Identifikator ro'yxat dastlab hech narsaga murojaat qilmaydi (bu shunday boshlanmagan ); keyinchalik ob'ektga (satrlarning bog'langan ro'yxati) murojaat qilish uchun qayta tiklanadi. Havola qilingan bog'langan ro'yxat ro'yxat keyin mutatsiyaga uchraydi, ro'yxatga qator qo'shiladi. Va nihoyat, ro'yxat qayta tiklanadi bekor.

Kechiktirilgan statik

Kechiktirilgan statik bog'lash - bu statik va dinamik bog'lash o'rtasidagi bog'lanishning bir variantidir. Quyidagilarni ko'rib chiqing PHP misol:

sinf A{    jamoat statik $ word = "Salom";    jamoat statik funktsiya Salom() { chop etish o'zini o'zi::$ word; }}sinf B uzaytiradi A{    jamoat statik $ word = "xayr";}B::Salom();

Ushbu misolda PHP tarjimoni kalit so'zni bog'laydi o'zini o'zi ichida A :: salom () sinfga Ava shunga o'xshash qo'ng'iroq B :: salom () "salom" qatorini ishlab chiqaradi. Agar semantikasi self :: $ word kechiktirilgan statik majburiylikka asoslangan edi, natijada "xayr" bo'lar edi.

PHP-ning 5.3 versiyasidan boshlab, kechiktirilgan statik ulanish qo'llab-quvvatlanadi.[3] Xususan, agar self :: $ word yuqoridagi narsa o'zgartirildi statik :: $ word quyidagi blokda ko'rsatilgandek, bu erda kalit so'z statik faqat ish vaqtida bog'langan bo'lar edi, keyin qo'ng'iroq natijasi B :: salom () "xayr" bo'ladi:

sinf A{    jamoat statik $ word = "Salom";    jamoat statik funktsiya Salom() { chop etish statik::$ word; }}sinf B uzaytiradi A{    jamoat statik $ word = "xayr";}B::Salom();

Shuningdek qarang

Adabiyotlar

  1. ^ Microsoft (2007 yil 11-may), Avtomatlashtirishda erta majburiy va kech bog'lanishdan foydalanish, Microsoft, olingan 11 may, 2009
  2. ^ a b Tizimlar va dasturiy ta'minot muhandisligi - ISO / IEC / IEEE 24765: 2010 (E) so'z birikmasi, IEEE, 2010 yil 15 dekabr
  3. ^ "Kechiktirilgan statik birikmalar". Olingan 3 iyul, 2013.