13

डार्ट का उपयोग करने वाली कुछ भाषाएं मिरर आधारित प्रतिबिंब का उपयोग करती हैं, इसलिए सरल शब्दों में, सी # या जावा में दिखाई देने वाले कार्यान्वयन और पारंपरिक प्रतिबिंब के बीच क्या अंतर है।मिरर आधारित प्रतिबिंब और पारंपरिक प्रतिबिंब के बीच क्या अंतर है?

अद्यतन: मुझे न्यूजपीक में मिरर आधारित प्रतिबिंब पर गिलाद ब्राचा द्वारा इस उत्कृष्ट (और कुछ हद तक विचित्र) वीडियो मिला। http://www.hpi.uni-potsdam.de/hirschfeld/events/past/media/100105_Bracha_2010_LinguisticReflectionViaMirrors_HPI.mp4 (दर्पण सामग्री 7:42 पर शुरू होती है)

उत्तर

21

कई उपयोगों के लिए, मुझे नहीं लगता कि दर्पण है कि जावा प्रतिबिंब तरीके से अलग होगा । मिरर के बारे में सबसे महत्वपूर्ण बात यह है कि वे मानक ऑब्जेक्ट एपीआई से प्रतिबिंब एपीआई को कम कर देते हैं, इसलिए obj.getClass() के बजाय आप प्रतिबिंबित (obj) का उपयोग करते हैं। यह एक उचित रूप में छोटा सा फर्क है, लेकिन यह आप कुछ अच्छा चीज़ें प्राप्त होती है:

  1. वस्तु एपीआई प्रदूषित नहीं है, और वहाँ एक चिंतनशील विधि अधिभावी द्वारा प्रतिबिंब तोड़ने का कोई खतरा नहीं है।
  2. आप संभावित रूप से अलग दर्पण सिस्टम कर सकते हैं। कहें, एक जो निजी तरीकों तक पहुंच की इजाजत नहीं देता है। यह उपकरण के लिए बहुत उपयोगी हो सकता है।
  3. दर्पण प्रणाली को शामिल करने की आवश्यकता नहीं है। जेएस को संकलित करने के लिए यह महत्वपूर्ण हो सकता है। यदि मिरर का उपयोग नहीं किया जाता है तो कोड तक पहुंचने के लिए कोई आउट-ऑफ-बैंड नहीं है और छंटनी व्यवहार्य हो जाती है।
  4. रिमोट कोड पर काम करने के लिए दर्पण किए जा सकते हैं, केवल स्थानीय कोड नहीं, क्योंकि आपको प्रतिबिंबित वस्तु को दर्पण के समान अलगाव या वीएम में होने की आवश्यकता नहीं है।

    जावा:

    myObject.getClass().getMethods(); // returns an array 
    

    डार्ट:

    reflect(myObject).type.methods; // returns a map 
    

    जावास्क्रिप्ट:

यहाँ जब एक वस्तु के तरीकों प्राप्त करने के लिए प्रयोग किया जाता है कैसे दर्पण जावा और जावास्क्रिप्ट में प्रतिबिंब की तुलना में अलग हैं

var methods = []; 
for (var m in myObject) { 
    if (typeof m === 'function') { 
    methods.push(m); 
    } 
} 
5

आपकी सर्वश्रेष्ठ शर्त this article by Gilad Bracha है, डार्ट के सह-डिजाइनर और विनिर्देश लेखक। एक झलक पाने के लिए, यह शायद पहले अध्याय को पढ़ने के लिए पर्याप्त होगा।

सार दावा है कि दर्पण तीन आवश्यक सिद्धांत है कि पारंपरिक प्रतिबिंब द्वारा पीछा नहीं कर रहे हैं का पालन:

हम प्रतिबिंब और metaprogramming वस्तु उन्मुख प्रोग्रामिंग भाषाओं में सुविधाओं के लिए तीन डिजाइन सिद्धांतों की पहचान। Encapsulation: मेटा-स्तरीय सुविधाओं को उनके कार्यान्वयन को समाहित करना होगा। स्ट्रैटिफिकेशन: मेटा-स्तरीय सुविधाओं को बेस-स्तरीय कार्यक्षमता से अलग किया जाना चाहिए। Ontological पत्राचार: मेटा-स्तरीय सुविधाओं का ऑटोलॉजी भाषा के उन्मुखता के अनुरूप होना चाहिए जो वे छेड़छाड़ करते हैं। पारंपरिक/मुख्यधारा के प्रतिबिंबित आर्किटेक्चर इन नियमों का पालन नहीं करते हैं। इसके विपरीत, प्रतिबिंबित दर्पण की अवधारणा के आसपास बनाए गए एपीआई इन तीन सिद्धांतों का अनुपालन करते हैं।

+0

क्या आप संक्षेप में कर सकते हैं? –

1

मैं भी गिल्ड, जहां वह सूचीबद्ध करता है कुछ अन्य महान संदर्भ सामग्री के द्वारा इस अन्य हाल के जवाब देने के लिए आप बात करेंगे: How to get concrete object of a static method via mirror API?

+1

धन्यवाद जॉन। मैंने पहले उन लिंक को देखा था। मैं उम्मीद कर रहा था कि पेपर पढ़ने के बजाय जल्दी से सारांश या एक गिस्ट प्राप्त करें। –

+0

मेरे विचार में, कई अंतर, सॉफ़्टवेयर इंजीनियरिंग स्तर पर हैं, और उन लोगों के लिए इतना दिलचस्प नहीं है जो उनके ऊपर सॉफ़्टवेयर लिखते हैं। .net प्रतिबिंब एपीआई के साथ अपने अनुभव की तुलना में दर्पण का उपयोग करना मेरे लिए आसान लगता है। –