2013-08-09 4 views
7

जावा पर एक व्याख्यान में, एक कंप्यूटर विज्ञान प्रोफेसर का कहना है कि कक्षा के जावा इंटरफेस प्रोटोटाइप सार्वजनिक तरीकों के साथ-साथ उनके व्यवहार के विवरण भी हैं।जावा - प्रोटोटाइप क्या है?

enter image description here
(स्रोत https://www.youtube.com/watch?v=-c4I3gFYe3w @ 8: 47)

और वीडियो वह जानने के लिए वह क्या प्रोटोटाइप द्वारा मतलब है शिक्षण सहायकों के साथ चर्चा अनुभाग पर जाएँ कहते हैं में 8:13 पर।

उपर्युक्त संदर्भ में जावा में "प्रोटोटाइप" का क्या अर्थ है?

+6

कोई जावा प्रोटोटाइप कीवर्ड नहीं है। वह अंग्रेजी भाषा के उपयोग में प्रोटोटाइप कह रहा है, जिसका अर्थ है एक मॉडल जिससे चीजें बनाई जा सकती हैं। – Kon

+2

यह दो ग्रीक शब्दों से आता है, "प्रोटो" जिसका अर्थ पहले है, और "टाइप" का अर्थ है प्रतिलिपि बनाने के लिए इस्तेमाल किया जाने वाला मॉडल। –

+1

"प्रोटोटाइप" जावा में एक चीज़ नहीं है। वह शायद [सी/सी ++/आदि में अवधारणा] का जिक्र कर रहा है (http://en.wikipedia.org/wiki/Function_prototype)। –

उत्तर

2

"प्रोटोटाइप" उपयोग करने के लिए सबसे अच्छा/सही टर्मिनस नहीं है। interfaces "अनुबंध" की तरह अधिक हैं, जो कक्षाओं को लागू करना है।

विधि के सिर/परिभाषाओं को लागू करने वाले वर्ग में लागू किया जाना चाहिए (कक्षा 12/कक्षा वर्ग/कक्षा परिभाषा/public class xy implements ... में कीवर्ड का उपयोग करके)।

मुझे लगता है कि इस नामकरण सम्मेलन में अधिक विचारधारात्मक बहस के लिए बहुत अधिक जगह छोड़ दी गई है।

या लेखक के पास एक मानसिक लैप्सस था और किसी भी तरह जावास्क्रिप्ट से जावा में प्रोटोटाइपिकल विरासत के निर्माण को मैप किया गया था।

7

मुझे लगता है कि इस संदर्भ में शब्द प्रोटोटाइप के उपयोग दुर्भाग्यपूर्ण है, जावास्क्रिप्ट जैसे कुछ भाषाओं कुछ प्रोटोटाइप विरासत कहा जाता है जो क्या व्याख्यान में चर्चा हो रही है की तुलना में पूरी तरह से अलग है का उपयोग करें। मुझे लगता है कि शब्द 'अनुबंध' अधिक उपयुक्त होगा। एक जावा इंटरफ़ेस एक भाषा सुविधा है जो कक्षा के लेखक को यह घोषणा करने की अनुमति देती है कि उस वर्ग के किसी भी ठोस कार्यान्वयन से लागू किसी भी इंटरफेस में घोषित सभी विधियों के कार्यान्वयन प्रदान किए जाएंगे।

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

+2

असली "दुर्भाग्यपूर्णता" यह है कि सीएस और आईटी साहित्य में "टेम्पलेट" का प्रयोग वैध रूप से कई अलग-अलग चीजों के लिए किया जाता है। एक शब्द का पूरी तरह से उपयोग करने से बचने के लिए अव्यवहारिक है क्योंकि अन्य लोग इसे असंगत रूप से उपयोग करते हैं। –

+0

@BeWarned, इस संदर्भ में प्रोटोटाइप शब्द दुर्भाग्यपूर्ण नहीं है जैसा कि आप कहते हैं। ईसीएमएस्क्रिप्ट केवल कुछ भाषाओं में से एक है जो वर्ग पदानुक्रम के विकल्प के रूप में प्रोटोटाइप विरासत का उपयोग करते हैं। इस अर्थ में प्रोटोटाइप शब्द सी से 'कैर-ओवर' है, एक ऐसी भाषा जो जावा को दृढ़ता से प्रभावित करती है। सी (और सी ++, ओबीजे-सी) में, मुख्य() से ऊपर फ़ंक्शन प्रोटोटाइप रखकर, कोई उस कोड को मुख्य() से कॉल कर सकता है लेकिन मुख्य() के नीचे कार्यान्वयन कोड है। वास्तव में सीएस, ईसीई, ईई, और आईटी में अंग्रेजी शब्द प्रोटोटाइप के संदर्भ में संदर्भ के आधार पर विभिन्न अर्थ हैं। यह दुर्भाग्यपूर्ण नहीं है! –

+0

ऐसा नहीं है कि प्रोटोटाइप गलत है, यह केवल भ्रम पैदा कर सकता है जब इन छात्रों को अंततः जावास्क्रिप्ट से अवगत कराया जाता है। जावास्क्रिप्ट ओओ को समझने में लोगों को पहले से ही पर्याप्त परेशानी है, जावा ओओ का वर्णन करते समय उस शब्द का उपयोग करके इसे मिश्रित न करें। विशेष रूप से जब कई अन्य समानार्थी होते हैं। – BeWarned

1

इंटरफेस जावा में कक्षाओं के लिए प्रोटोटाइप नहीं हैं।

सी & सी ++ जैसी भाषाओं में, जो मशीन कोड को प्रत्यक्ष रूप से संकलित करता है, कंपाइलर को किसी भी पहचानकर्ता (चर/वर्ग/कार्यों) की प्रकृति से अवगत होना चाहिए, इससे पहले कि वे कार्यक्रम में कहीं भी संदर्भ हों। इसका मतलब है कि उन भाषाओं से संबंधित मशीन कोड आउटपुट उत्पन्न करने के लिए पहचानकर्ता की प्रकृति को जानना आवश्यक है।

सरल शब्दों में, सी ++ संकलक को कक्षा में विधियों और सदस्य के सदस्य से अवगत होना चाहिए इससे पहले कि कक्षा में कोड का उपयोग कहीं भी किया जाता है। इसे पूरा करने के लिए, आपको उस कोड लाइन से पहले कक्षा को परिभाषित करना चाहिए जहां इसका उपयोग किया जाता है, या आपको कम से कम अपनी प्रकृति घोषित करनी चाहिए। केवल एक समारोह या कक्षा की प्रकृति घोषित करना एक 'प्रोटोटाइप' बनाता है।

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

2

वह C/C++ तरीके से बताता है,, मुझे समझाती हूँ C++ में आप जहां कोई वर्ग अवधारणा है ताकि अन्य वर्गों C में इन तरीकों को पहचान सकते हैं, यह भी कक्षाओं के हेडर फाइल में तरीकों के लिए प्रोटोटाइप परिभाषित कर सकते हैं, आप कर सकते हैं फ़ाइल की शुरुआत में प्रोटोटाइप परिभाषित करें और फिर कहीं भी उसी फ़ाइल में आप इन प्रोटोटाइप को कार्यान्वित कर सकते हैं, ताकि विधियों का उपयोग उनके कार्यान्वयन से पहले भी किया जा सके। तो Java में इंटरफेस बहुत ज्यादा एक ही तरीके प्रदान करते हैं आप तरीकों (विधि हेडर) कि वर्गों है कि इस इंटरफ़ेस को लागू द्वारा लागू किया जाएगा के लिए प्रोटोटाइप परिभाषित कर सकते हैं।

3

उपर्युक्त संदर्भ में जावा में "प्रोटोटाइप" का क्या अर्थ है?

शब्द "प्रोटोटाइप" मानक जावा शब्दावली नहीं है। इसका उपयोग जेएलएस में नहीं किया जाता है, और इसका उल्लेख Java Tutorial Glossary में नहीं किया गया है। संक्षेप में कोई जावा विशिष्ट अर्थ नहीं है।

आपका व्याख्याता एक जावा विशेष भावना के बजाय एक व्यापक अर्थ में इस शब्द का उपयोग कर रहा है। वास्तव में, उनका उपयोग "फ़ंक्शन प्रोटोटाइप" से मेल खाता है जैसा कि this Wikipedia page में वर्णित है।


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

  • सी ++ "टेम्पलेट" में संदर्भित करता है कि जावा जेनेरिक क्लास या विधि कहता है।

  • जावास्क्रिप्ट में, एक वस्तु एक "टेम्पलेट" विशेषता है कि वस्तुओं के तरीकों देता है।

  • आम तौर पर, टेम्पलेट आधारित टाइपिंग एक विकल्प (और अधिक गतिशील) OO टाइपिंग करने का तरीका है।

लेकिन तथ्य यह है कि इन अर्थ मौजूद मतलब यह नहीं है कि आपके व्याख्याता "टेम्पलेट्स" के रूप में विधि हस्ताक्षर इंटरफेस का उल्लेख करने के गलत था।

1

जावा पर एक व्याख्यान में, एक कंप्यूटर विज्ञान के प्रोफेसर कहा गया है कि:

जावा एक वर्ग की इंटरफेस हैं:
1. सार्वजनिक तरीकों के लिए प्रोटोटाइप हैं,
2. प्लस विवरण उनके व्यवहार का।

के लिए 1. ठीक है: - हाँ, वे कक्षा के लागू सार्वजनिक तरीकों के लिए प्रोटोटाइप हैं।
2. यह हिस्सा थोड़ा मुश्किल हो सकता है। :)

  • क्यों?
  • हम जानते हैं: इंटरफ़ेस परिभाषा (प्रोटोटाइप होते हैं), लेकिन विधियों के व्यवहार को परिभाषित नहीं करता है (वर्णन)।
  • कंप्यूटर विज्ञान प्रोफेसर कहता है: "... उनके व्यवहार के प्लस विवरण।"यह केवल तभी सही है जब हम कक्षा के अंदर देखते हैं जो उस इंटरफ़ेस को लागू करता है (इंटरफ़ेस कार्यान्वयन = प्रोटोटाइप परिभाषाएं या वर्णन)।

हाँ, एक छोटे से मुश्किल सा समझने के लिए :)

ग्रंथ सूची:
Definition vs Description
Context-dependent
Name visibility - C++ Tutorials


अतिरिक्त कार्य:

नोट: परीक्षण नहीं किया गया, बस सोच रहा है! :)

सी ++:

// C++ namespace just with prototypes: 
// could be used like interface similar with Java? 
// hm, could we then define (describe) prototypes? 
// could we then inherit namespace? :) 

namespace anIntf{ 
    void politeHello(char *msg); 
    void bigThankYou(); 
} 
1

प्रोटोटाइप कार्यों आप अपने कोड के भीतर का उपयोग करेगा के हस्ताक्षर हैं। वे कुछ हद तक वैकल्पिक हैं, अगर आप इस तरह है कि आप केवल कार्यों कि पहले कर रहे हैं परिभाषित तो आप एक समारोह है कि दो पूर्णांकों दिया जाता है योग के लिए एक प्रोटोटाइप नीचे उन

को परिभाषित करने के बिना प्राप्त कर सकते हैं का उपयोग अपने कोड आदेश कर सकते हैं।

int add(int a, int b); 
संबंधित मुद्दे