2011-03-27 20 views
5

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

+1

जावा? क्या मैं कुछ भुल गया? – CromTheDestroyer

+0

[mu] (http://en.wikipedia.org/wiki/Mu_%28negative%29) ... लेकिन हेडर फाइलें मुझे आलसी होने की अनुमति देती हैं और सभी घोषणाएं नहीं लिखती हैं (और प्रकार और enums और परिभाषित करता है और मैक्रोज़) सभी "सादा" सी स्रोत फाइलें – pmg

+1

जावा कक्षाएं (कम से कम मेरे स्कूल में) आमतौर पर एक फ़ाइल में परिभाषित की जाती हैं। सी, सी ++, और उद्देश्य सी कक्षाओं को आमतौर पर दो फाइलों में परिभाषित किया जाता है। – jeffythedragonslayer

उत्तर

12

एरिक Lippert, जो यह बहुत अच्छी तरह से कहते हैं द्वारा एक संबंधित blog post से लिया:

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

यह कंपाइलर लेखक को एक चीज़, और उपयोगकर्ता को एक चीज़ खरीदता है।

क्या यह उपयोगकर्ता खरीदता है कि आप एक "obj" फ़ाइल में प्रत्येक व्यक्ति "cpp" फ़ाइल संकलन कर सकते हैं स्वतंत्र रूप से, प्रदान की आप सभी आवश्यक हेडर होता है। उन सभी निकायों को उत्पन्न करने के लिए आवश्यक है जो किसी दिए गए सीपीपी फ़ाइल में हैं हेडर के सेट से प्राप्त किया जा सकता है। इसका अर्थ है कि बिल्ड सिस्टम को केवल उन सीपीपी फ़ाइलों को दोबारा बदल सकता है, जो प्रदान किए गए हैं, बशर्ते कोई हेडर बदल नहीं गया हो।

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

यह सी # (जिसके बारे में ब्लॉग पोस्ट है) और जावा, जो कि एक बहुत करीबी रिश्तेदार है, के विपरीत है।

+2

इस बारे में दिलचस्प बात यह है कि यह उपयोगकर्ता को खरीदता है। यह उपयोगकर्ता को फ़ाइल द्वारा फ़ाइल को फिर से संकलित करने की अनुमति देता है। लेकिन यह वास्तव में केवल सी और विशेष रूप से सी ++ के असाधारण संकलन/लिंक समय की वजह से आवश्यक है। तो मेरे दिमाग में यह वास्तव में संकलक के बारे में सब कुछ है और गरीब डेवलपर द्वितीय श्रेणी का नागरिक है। –

+2

जावा सी # के करीबी रिश्तेदार है। जावा सी # का पिता है। – irreputable

+0

@irreputable: इससे मुझे हंसी हुई। यह भी एक राय है जो मैं साझा करता हूं। – Jon

-2

संक्षेप में, सी या सी ++ हेडर फाइलों में अलग-अलग फ़ाइलों को सामान्य परिभाषाओं या घोषणाओं को साझा करने की अनुमति मिलती है।

जावा में सब कुछ एक वस्तु है, इसलिए वस्तुओं को छोड़कर कुछ भी साझा करने की कोई अवधारणा नहीं है। प्रत्येक वस्तु एक फ़ाइल है; यदि आप ऑब्जेक्ट तक पहुंचना चाहते हैं, तो आप फ़ाइल आयात करते हैं।

1

इंटरफ़ेस और कार्यान्वयन को अलग करना अभी भी एक अच्छा विचार है। लेकिन यह शारीरिक अलगाव नहीं होना चाहिए। जावा में आप javadoc से इंटरफ़ेस देख सकते हैं। जावा आईडीई आमतौर पर एपीआई संरचनाओं को प्रदर्शित कर सकते हैं, और वे ब्लॉक को फोल्ड कर सकते हैं। कोई अनिवार्य कारण नहीं है जिसके लिए शारीरिक अलगाव की आवश्यकता है। सी दशकों पहले आविष्कार किया गया था इसलिए हमें इसे लेने की जरूरत नहीं है।

संबंधित मुद्दे