जवाबों:
परिभाषा
एक वस्तु प्रथम श्रेणी में है जब वह:
- चर और डेटा संरचनाओं में संग्रहीत किया जा सकता है
- एक सबरूटीन के लिए एक पैरामीटर के रूप में पारित किया जा सकता है
- एक सबरूटीन के परिणाम के रूप में वापस किया जा सकता है
- रनटाइम पर निर्माण किया जा सकता है
- आंतरिक पहचान है (किसी भी नाम से स्वतंत्र)
"ऑब्जेक्ट" शब्द का उपयोग शिथिल रूप से किया जाता है, आवश्यक रूप से ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में ऑब्जेक्ट्स का जिक्र नहीं है। सबसे सरल स्केलर डेटा प्रकार, जैसे पूर्णांक और फ्लोटिंग-पॉइंट नंबर, लगभग हमेशा प्रथम श्रेणी के होते हैं।
प्रोग्रामिंग भाषा में "प्रथम श्रेणी के नागरिक" या "प्रथम श्रेणी के तत्व" की धारणा ब्रिटिश कंप्यूटर वैज्ञानिक क्रिस्टोफर स्ट्रेची द्वारा 1960 के दशक में प्रथम श्रेणी के कार्यों के संदर्भ में पेश की गई थी । इस सिद्धांत का सबसे प्रसिद्ध सूत्रण संभवतः गेराल्ड जय सुस्मान और हैरी एबसन द्वारा कंप्यूटर प्रोग्राम की संरचना और व्याख्या में है :
- इन्हें चर नाम दिया जा सकता है।
- उन्हें प्रक्रियाओं के तर्क के रूप में पारित किया जा सकता है।
- उन्हें प्रक्रियाओं के परिणामों के रूप में लौटाया जा सकता है।
- उन्हें डेटा संरचनाओं में शामिल किया जा सकता है।
मूल रूप से, इसका मतलब है कि आप इस प्रोग्रामिंग भाषा तत्व के साथ वह सब कुछ कर सकते हैं जो आप प्रोग्रामिंग भाषा में अन्य सभी तत्वों के साथ कर सकते हैं।
यह सभी "समान अधिकारों" के बारे में है: आप उपरोक्त सभी को, पूर्णांक के साथ, कह सकते हैं, इसलिए किसी भी अन्य चीज़ को अलग क्यों होना चाहिए?
उपरोक्त परिभाषा इस अर्थ में थोड़ी प्रतिबंधात्मक है कि यह केवल कार्यक्रम की वस्तुओं से संबंधित प्रथम श्रेणी के पहलू के बारे में बात करता है। एक अधिक सामान्य परिभाषा यह होगी कि कोई चीज़ प्रथम श्रेणी की हो यदि आप उसके साथ सब कुछ कर सकते हैं तो आप इसी तरह की अन्य चीजों के साथ भी कर सकते हैं।
उदाहरण के लिए, जावा ऑपरेटर और जावा तरीके समान हैं। आप नए तरीकों को परिभाषित कर सकते हैं, आप (कुछ) स्वतंत्र रूप से अपने खुद के तरीकों के नाम चुन सकते हैं, आप तरीकों को ओवरराइड कर सकते हैं, आप तरीकों को ओवरलोड कर सकते हैं। जेम्स गोसलिंग ऑपरेटरों के साथ वह सब भी कर सकता है, लेकिन आप और मैं नहीं कर सकते। मेरा मतलब है, आम धारणा के विपरीत, जावा करता है समर्थन ऑपरेटर ओवरलोडिंग: उदाहरण के लिए, +
ऑपरेटर के लिए ओवरलोड हो गया है byte
, short
, int
, long
, float
, double
और String
, और IIRC जावा 7 में भी के लिए BigInteger
और BigDecimal
(और शायद एक जोड़े को मैं भूल गया था), यह सिर्फ है कि आपइस पर कोई प्रभाव नहीं है। यह स्पष्ट रूप से ऑपरेटरों को इस दूसरी परिभाषा के अनुसार दूसरे दर्जे का बनाता है। ध्यान दें कि विधियाँ अभी भी प्रथम परिभाषा के अनुसार प्रथम श्रेणी की वस्तुएँ नहीं हैं। (क्या इससे ऑपरेटर तीसरी श्रेणी में आते हैं?)
आमतौर पर यह एक ऐसे निर्माण को संदर्भित करता है जो एक पैरामीटर के रूप में पास करने योग्य है, इसे फ़ंक्शन से रिटर्न प्रकार के रूप में परिभाषित किया जा सकता है या इसे एक मान सौंपा जा सकता है। आम तौर पर आपको उन्हें रनटाइम पर निर्माण करने में सक्षम होना चाहिए। उदाहरण के लिए एक वर्ग का उदाहरण c ++ या जावा में प्रथम श्रेणी का नागरिक होगा, लेकिन C में कोई फ़ंक्शन नहीं होगा।
मैं कहूंगा कि एक सुविधा एक प्रथम श्रेणी का नागरिक है यदि इसे भाषा द्वारा पूरी तरह से लागू किया जाता है।
अर्थात उस सुविधा को लागू करने के लिए कई भाषा सुविधाओं या एक मानक पुस्तकालय की आवश्यकता नहीं होती है।
उदाहरण:
C / C ++ में मैं कार्यों को प्रथम श्रेणी का नागरिक नहीं मानता (अन्य लोग)।
ऐसा इसलिए है क्योंकि ऐसे कार्यों में हेरफेर करने के तरीके हैं जो सीधे भाषा द्वारा समर्थित हैं, लेकिन अन्य भाषा सुविधाओं के उपयोग की आवश्यकता होती है। किसी फ़ंक्शन से बाइंडिंग पैरामीटर सीधे समर्थित नहीं हैं और आपको इस सुविधा को कार्यान्वित करने के लिए एक फ़ंक्टर का निर्माण करना होगा।
पहले से दिए गए उत्तरों में एक उदाहरण जोड़ने के लिए:
WCF / C # में आपको वर्तमान में सेवा के रूप में सेवा करने के लिए एक सेवा अनुबंध विशेषता के साथ एक वर्ग वस्तु को चिह्नित करना होगा। ऐसी कोई बात नहीं है:
public **service** MyService (in relation public **class** MyClass).
एक वर्ग c # में प्रथम श्रेणी का नागरिक है, जहाँ कोई सेवा नहीं है।
उम्मीद है की यह मदद करेगा