2011-01-25 8 views
6

Java में, package कहा जाता है। libraryC++ में समान अर्थ का प्रतिनिधित्व करता है, खासकर सापेक्ष कक्षाओं और संरक्षित सदस्यों के उपयोग के उदाहरण के संदर्भ में?जावा पैकेज बनाम सी ++ पुस्तकालय

धन्यवाद।

+0

दुर्भाग्यवश मुझे नहीं पता कि सी # पुस्तकालय कैसे काम करते हैं, लेकिन संरक्षित सदस्य वास्तव में पैकेज के भीतर से दिखाई दे रहे हैं और प्रत्येक पैकेज कक्षा के नामों के लिए एक अलग नामस्थान परिभाषित करता है, यदि आपका यही मतलब है। – biziclop

+0

@biziclop। मैं वास्तव में सी ++ नहीं सी # पूछ रहा हूँ। – Simplicity

+0

@ user588855 यह पता चला है कि मैं भी पढ़ नहीं सकता। :) – biziclop

उत्तर

10

जावा में package का अर्थ क्या है इसके विभिन्न आयाम हैं। एक कंटेनर के रूप में जो अन्य पैकेजों में कक्षाओं के नाम से कक्षाओं के नामों को अलग करता है, इसके बराबर सी ++ namespaces होगा।

एक इकाई के रूप में जो एक ही ब्लॉक में कक्षाओं के लिए गैर-निजी सदस्यों तक पहुंच की गारंटी देता है, सी ++ में कोई समकक्ष नहीं है। कक्षा में दी गई पहुंच स्तर नामस्थान से स्वतंत्र है जहां वर्ग परिभाषित किया गया है।

डिस्क में अपने स्रोतों को ऑर्डर करने के तरीके के रूप में, कोई समकक्ष नहीं है, सी ++ भाषा में फाइलों में कोड कैसे संग्रहीत किया जाता है इस पर कोई आवश्यकता नहीं है।

सी ++ पुस्तकालयों के संबंध में, यह जावा में jar फ़ाइलों के करीब है। वे कुछ वर्गों को बंडल करते हैं जो कुछ संबंध साझा करते हैं। एक जार में एक से अधिक पैकेज हो सकते हैं, और एक से अधिक जार में एक ही पैकेज से कक्षाएं हो सकती हैं। इसी प्रकार पुस्तकालयों के साथ, वे अलग-अलग नामस्थानों से कक्षाएं रख सकते हैं और/या विभिन्न पुस्तकालयों में समान नामस्थान से कक्षाएं हो सकती हैं।

2

कड़ाई से बोलते हुए मुझे लगता है कि सी ++ में नामस्थान समान अर्थशास्त्र प्रदान करते हैं।

7

जावा पैकेज के सबसे नज़दीक namespaces सी ++ में हैं।

उन्हें एक दूसरे में घोंसला किया जा सकता है, और आपको विशेष रूप से यह घोषणा करने की आवश्यकता है कि आप using उन्हें या उनकी सामग्री का एक हिस्सा हैं। हालांकि, वे जावा पैकेज जैसे किसी भी भौतिक फ़ाइल पदानुक्रम को लागू नहीं करते हैं।

1

मुझे लगता है कि यह सी ++ में नामस्थान से अधिक संबंधित है। जावा और सी ++ दोनों पुस्तकालयों का उपयोग करते हैं। लाइब्रेरी कक्षाओं का एक स्वतंत्र सेट हो सकता है [शायद एक ढांचा] जिसे हमारे कोड में एक्सेस किया जा सकता है।

0

बाहरी पुस्तकालय जावा और सी ++ दोनों में हैं। बस स्वरूप भिन्न होते हैं, जावा में .jar और सी ++ में .dll/.so।

पुस्तकालयों और नामस्थानों का उद्देश्य पुस्तकालयों से अलग हैं। वे उपयोगकर्ता को तार्किक रूप से स्रोत को समूहबद्ध करने की अनुमति देकर नामों से बाहर निकलने से बचते हैं।

0

जावा में package कक्षाओं, इंटरफेस और enums के लिए एक नामस्थान है। इस उदाहरण के पहले दो डॉट्स:

com.example.hello.HelloWorldApplication 
^--packagename--^ ^-----classname-----^ 
पैकेज का नाम में डॉट्स

एक अलग अर्थ तो नामों के बीच डॉट है: पैकेज नाम, एक बिंदु और classname एक वर्ग के पूरी तरह से योग्य classname फार्म पैकेज नाम का हिस्सा है, अंतिम एक विभाजक है।

यह ध्यान में रखा जाना चाहिए, क्योंकि पैकेज नामों के बारे में एक आम गलतफहमी है: सिर्फ इसलिए कि नामों को पदानुक्रमित फ़ोल्डर संरचना में मैप किया जा सकता है, कुछ लोग सोचते हैं कि पैकेज नामों का पदानुक्रम भी है - जो मामला नहीं है: helloexample का "सबपैकेज" नहीं है!

लेकिन, फ़ोल्डर और फ़ाइलों के लिए एक सरल मानचित्रण नहीं बना, एक classloader बस, पूरी तरह से योग्य वर्ग के नाम लेने पर एक स्लैश सभी बिंदुओं की जगह और .class संलग्न एक वर्ग फाइल करने के लिए एक रिश्तेदार पथ प्राप्त करने के लिए कर सकते हैं।

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