क्या जावा इंस्टोफ़ ऑपरेटर को प्रतिबिंब माना जाता है, और क्या प्रतिबिंब को परिभाषित करता है?


24

मेरे पास आज एक सहकर्मी के साथ चर्चा थी, क्या जावा ऑपरेटर का उपयोग करना instanceofएक तरह का प्रतिबिंब है। और चर्चा तेजी से विकसित हुई कि वास्तव में प्रतिबिंब क्या परिभाषित करता है।

तो, प्रतिबिंब की परिभाषा क्या है?

और क्या instanceof"प्रतिबिंब का उपयोग" माना जाता है?

और इसके अलावा, यदि instanceofप्रतिबिंब माना जाता है, तो क्या बहुरूपता भी "प्रतिबिंब का उपयोग" नहीं है? यदि नहीं, तो क्या अंतर है?


4
आपने स्वयं अपने प्रश्न का उत्तर दिया है। आप 'प्रतिबिंब' को कैसे परिभाषित करते हैं, instanceofयह निर्धारित करता है कि प्रतिबिंब का एक उदाहरण है या नहीं । निश्चित रूप से यह सामान्य डेटा उपयोग और मेटाडेटा के माध्यम से कहीं getClass()और दोस्तों के माध्यम से होता है , लेकिन आपके पास काम करने योग्य परिभाषाएं हो सकती हैं।
सिल्वन फोथ

क्या return"संरचनात्मक प्रोग्रामिंग" का उपयोग माना जाता है?
एसएफ।

जवाबों:


22

यह विकिपीडिया के अनुसार प्रतिबिंब की परिभाषा है:

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

मैं इसे बेहतर नहीं कह सकता था और आपके प्रश्न के महत्वपूर्ण भाग को उजागर करता था। उस ने कहा, हां, instanceofप्रतिबिंब का उपयोग करने पर विचार किया जाता है। कार्यक्रम इसकी संरचना को देखता है और टाइप आत्मनिरीक्षण करता है


3
@ सीनियर ज्यूरिस: अंतर यह है कि if (true)एक मूल्य पर दिखता है , एक प्रकार पर नहीं । इसलिए इसे प्रतिबिंब नहीं माना जाता है।
सिल्के

1
@ सालेस्के: जिस कारण से मैंने इसका उल्लेख किया, वह इसलिए था क्योंकि एक प्रकार का अवलोकन करना एक अल्पविकसित सिद्धांत है। इसके बिना कोई बहुरूपता नहीं होगी। तकनीकी रूप से यह कहने का मतलब है कि एक साधारण ओवरराइड को भी प्रतिबिंब (या कम से कम परिणाम में) माना जा सकता है। परिभाषा के दूसरे भाग को मत भूलना: और रनटाइम पर अपनी संरचना और व्यवहार को संशोधित करें। सभी ने मुझे इस उत्तर को दिया (मेरी दूसरी टिप्पणी की जांच करें), लेकिन मुझे समझ में नहीं आता कि ओपी का सवाल कहां से आया। ; पी
स्टीवन ज्यूरिस

1
प्रतिबिंब की उस परिभाषा के अनुसार, क्या सामान्य बहुरूपता भी एक प्रकार का प्रतिबिंब नहीं होगा?
Bjarke Freund-Hansen

4
@bjarkef: मैं "नहीं" कहूंगा, क्योंकि पॉलीमॉर्फिज़्म द्वारा उपयोग किए जाने वाले आभासी प्रेषण को भाषा द्वारा ही स्पष्ट रूप से किया जाता है, बजाय इसके कि कोड अपनी विशेषताओं की पहचान करने के लिए प्रश्न में ऑब्जेक्ट की स्पष्ट रूप से जांच कर रहा हो।
डेव शेरोमैन

2
@ शेरोवेन: मैं यह भी जोड़ना चाहता हूं कि ज्यादातर काम (जंप टेबल आदि की स्थापना) संकलन समय पर किया जाता है, रन टाइम नहीं।
TMN

13

स्पष्टता के लिए, मैं दो उत्तरों पर विचार करूंगा।

सैद्धांतिक रूप से , instanceofप्रतिबिंब का एक रूप है, जैसा कि फाल्कन के उत्तर में बताया गया है ।

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

हालाँकि, व्यावहारिक रूप से , जब एक प्रोग्रामर प्रतिबिंब का उपयोग करने के बारे में बात करता है, तो वह आमतौर पर केवल जाँच से अधिक संदर्भित करता है कि क्या एक चर एक निश्चित प्रकार का है। यह ऐसी अल्पविकसित अवधारणा है, जिसके बिना बहुरूपता संभव नहीं होगा

ध्यान दें कि instanceofअक्सर उपयोग करने से कोड गंध का संकेत मिलता है, और अक्सर इसके बजाय उचित बहुरूपता का उपयोग किया जा सकता है।


1
संभावित कोड गंध के लिए +1 - हमेशा नहीं, बस क्षमता
गैरी रोवे

2

आप निम्नलिखित लेख में दिलचस्प हो सकते हैं: http://java.sun.com/developer/technicalArticles/ALT/Reflection/

इस लेख की कुंजी एक कोड स्निपेट है, जहां वे "क्लास" क्लास के "आईनस्टांस" विधि का उपयोग करके "इंस्टोफ़" कीवर्ड का अनुकरण करते हैं, जो जावा की प्रतिबिंब सुविधा का हिस्सा है।


जावा के लिए अच्छा स्पष्टीकरण।
फाल्कन

2

अन्य उत्तरों के बाद से, विकिपीडिया में परिभाषा बदल दी गई है (मैं इस परिवर्तन से सहमत होने के लिए होता हूं, लेकिन मैं वह नहीं था जिसने इसे बनाया) कोष्ठक में भाग को हटाने के लिए:

कंप्यूटर विज्ञान में, प्रतिबिंब एक कंप्यूटर प्रोग्राम की क्षमता की जांच, आत्मनिरीक्षण और रनटाइम पर अपनी संरचना और व्यवहार को संशोधित करने के लिए है।

https://en.wikipedia.org/wiki/Type_introspection भी विशेष रूप से कहता है

आत्मनिरीक्षण को प्रतिबिंब के साथ भ्रमित नहीं होना चाहिए

मैं विचार करेगा नहीं instanceofपहले परिभाषा के अंतर्गत आते हैं: कार्यक्रम एक मूल्य की अपनी संरचना नहीं की जाँच करता है, और यह कार्यक्रम संरचना (जावा में: का प्रतिनिधित्व करने के लिए किसी भी मूल्यों को शामिल नहीं करता java.lang.Class, java.reflect.Method, आदि); प्रतिबिंब की पहचान ऐसे मूल्यों के साथ काम कर रही है।


-5

हाँ, "Instof" ऑपरेटर प्रतिबिंब का एक रूप है। पिछले उत्तर आपको बताते हैं कि क्यों।

"परावर्तन" या "वस्तु / वर्ग आत्मनिरीक्षण" इन दिनों एक प्रचार है, लेकिन कई प्रोग्रामिंग भाषाओं ने कुछ समय से उस अवधारणा का उपयोग किया है।

डॉट नेट (जावा क्लोन), (गलत) बहुत उपयोग करता है।


1
Uuuuhm, ... यार?
कोनराड रुडोल्फ

3
आपका पहला वाक्य सही है, और पिछले उत्तरों के सामने बेमानी है। बाकी सिर्फ गलत है।
फ्रैंक शीयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.