binding - प्रारंभिक और देर बाध्यकारी के बीच क्या अंतर है?




dynamic-binding static-binding (5)

व्याख्या की गई भाषाओं में, अंतर थोड़ा और सूक्ष्म है।

माणिक:

# early binding:
def create_a_foo(*args)
  Foo.new(*args)
end
my_foo = create_a_foo

# late binding:
def create_something(klass, *args)
  klass.new(*args)
end
my_foo = create_something(Foo)

चूंकि रूबी (आमतौर पर) संकलित नहीं होती है, इसलिए निफ्टी अप-फ्रंट सामान करने के लिए एक कंपाइलर नहीं होता है। JRuby की वृद्धि का मतलब है कि इन दिनों अधिक रूबी संकलित किया गया है, हालांकि, यह ऊपर जावा की तरह अधिक कार्य करता है।

आईडीई के साथ समस्या अभी भी खड़ी है: ग्रहण की तरह एक प्लेटफॉर्म क्लास परिभाषाओं को देख सकता है यदि आप उन्हें हार्ड-कोड करते हैं, लेकिन यदि आप उन्हें कॉलर तक नहीं छोड़ सकते हैं।

रूबी में उलटा नियंत्रण बहुत लोकप्रिय नहीं है, संभवतः इसकी अत्यधिक रनटाइम लचीलापन के कारण, लेकिन रेल आपके आवेदन को प्राप्त करने के लिए आवश्यक कॉन्फ़िगरेशन की मात्रा को कम करने के लिए देर से बाध्यकारी का बहुत अच्छा उपयोग करता है।

प्रारंभिक और देर से बाध्यकारी के बीच क्या अंतर है?


संकलन समय polymorphism को ओवरलोडिंग या प्रारंभिक बाध्यकारी या स्थैतिक बाध्यकारी भी कहा जाता है जब हमारे पास अलग-अलग व्यवहार के साथ एक ही विधि का नाम होता है। उसी विधि के एकाधिक प्रोटोटाइप को लागू करके और इसमें विभिन्न व्यवहार होते हैं। प्रारंभिक बाध्यकारी कार्यक्रम के पहले संकलन को संदर्भित करता है। लेकिन देर से बाइंडिंग ऑब्जेक्ट में रनटाइम प्रोग्राम में होता है। इसे गतिशील बाध्यकारी या ओवरराइडिंग या रनटाइम पॉलीमोर्फिज्म भी कहा जाता है।


संक्षिप्त जवाब यह है कि शुरुआती (या स्थैतिक) बाध्यकारी समय बाध्यकारी और देर से (या गतिशील) बाध्यकारी को संकलित करने के लिए संदर्भित करता है, रनटाइम बाध्यकारी को संदर्भित करता है (उदाहरण के लिए जब आप प्रतिबिंब का उपयोग करते हैं)।


सीधे http://word.mvps.org/fAQs/InterDev/EarlyvsLateBinding.htm से लिया गया

प्रोग्रामेटिक रूप से किसी अन्य एप्लिकेशन को नियंत्रित करने के लिए स्वचालन (या ओएलई स्वचालन) का उपयोग करने के दो तरीके हैं।

देर बाध्यकारी अनुप्रयोग ऑब्जेक्ट बनाने और उदाहरण बनाने के लिए CreateObject का उपयोग करता है, जिसे आप तब नियंत्रित कर सकते हैं। उदाहरण के लिए, देर से बाध्यकारी का उपयोग कर एक्सेल का एक नया उदाहरण बनाने के लिए:

 Dim oXL As Object
 Set oXL = CreateObject("Excel.Application")

दूसरी ओर, Excel के मौजूदा उदाहरण में हेरफेर करने के लिए (यदि एक्सेल पहले से ही खुला है) तो आप GetObject का उपयोग करेंगे (भले ही आप प्रारंभिक या देर से बाइंडिंग का उपयोग कर रहे हों):

 Dim oXL As Object
 Set oXL = GetObject(, "Excel.Application")

प्रारंभिक बाध्यकारी का उपयोग करने के लिए, आपको सबसे पहले अपने प्रोजेक्ट में उस एप्लिकेशन को संदर्भित करने की आवश्यकता है जिसे आप कुशल बनाना चाहते हैं। किसी भी Office अनुप्रयोग के वीबी संपादक में, या वीबी में, आप टूल + संदर्भों का चयन करके और सूची से इच्छित एप्लिकेशन का चयन करके ऐसा करते हैं (उदाहरण के लिए "माइक्रोसॉफ्ट एक्सेल 8.0 ऑब्जेक्ट लाइब्रेरी")।

प्रारंभिक बाध्यकारी का उपयोग कर एक्सेल का एक नया उदाहरण बनाने के लिए:

 Dim oXL As Excel.Application
 Set oXL = New Excel.Application

किसी भी मामले में, आकस्मिक रूप से, आप पहले Excel का मौजूदा उदाहरण प्राप्त करने का प्रयास कर सकते हैं, और यदि यह कोई त्रुटि देता है, तो आप अपने त्रुटि हैंडलर में एक नया उदाहरण बना सकते हैं।


public class child()
{    public void method1()
     {     System.out.println("child1");
     }
    public void method2()
     {     System.out.println("child2");
     }

}
public class teenager extends child()
{    public void method3()
     {      System.out.println("teenager3");
     }
}
public class adult extends teenager()
{     
    public void method1()
    {    System.out.println("adult1);
         super.method1();
     }
}


//In java
public static void main(String []args)
{    ((teenager)var).method1();
}

यह प्रिंट करेगा

adult1
child1

प्रारंभिक बाध्यकारी में कंपाइलर के पास बच्चे और किशोरी में सभी विधियों तक पहुंच होगी लेकिन देर से बाध्यकारी (रनटाइम पर) में, यह रनटाइम पर ओवरराइड की गई विधियों की जांच करेगा।

इसलिए विधि 1 (बच्चे से - प्रारंभिक बाध्यकारी) को रनटाइम (देर से बाध्यकारी) पर वयस्क से विधि 1 द्वारा ओवरराइड किया जाएगा, फिर यह किशोरी में विधि 1 में कोई विधि 1 नहीं होने के बाद से विधि 1 को लागू करेगा।

ध्यान दें कि अगर बच्चे के पास कोई विधि नहीं है तो मुख्य में कोड संकलित नहीं होगा।