2009-07-17 22 views
16

ऑब्जेक्ट उन्मुख पर्ल में पैकेज, मॉड्यूल और कक्षा के बीच क्या अंतर है?ऑब्जेक्ट उन्मुख पर्ल में पैकेज, मॉड्यूल और कक्षा के बीच क्या अंतर है?

+2

इससे पहले कि आप इस तरह के प्रश्न पूछें, पहले पर्ल दस्तावेज़ों को पढ़ने का प्रयास करें। यदि आप समझ नहीं पाते कि आप क्या पढ़ रहे हैं, तो इसके बारे में प्रश्न पूछें। –

+1

आपको इतना यकीन है कि वह आरटीएफएम नहीं था? – spoulson

+4

@ स्पॉल्सन: अपने प्रश्न इतिहास को देखें। यह एक बंद नहीं है। –

उत्तर

24

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

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

package SomePackage; 

sub some_subroutine { ... } # really SomePackage::some_subroutine 

आप पैकेज तक पहुंचने के लिए मॉड्यूल लोड:

use SomePackage; # read and compile the module file 

SomePackage::some_subroutine(...); 

एक पर्ल वर्ग एक पैकेज और उसके संबंधित व्यवहार है। एक कक्षा में तरीकों बस सामान्य सबरूटीन्स हैं, हालांकि जब हम तरीके के रूप में सबरूटीन्स का इलाज, पहले पैरामीटर बात (एक पैकेज का नाम या वस्तु, यह भी दिग्दर्शन रूप में जाना) विधि कहा जाता है जो:

package SomeClass; 

sub class_method { my($class, @args) = @_; ... } 
sub instance_method { my($self, @args) = @_; ... } 

के बाद से वर्ग किसी भी अन्य पैकेज की तरह एक पैकेज है, और शायद एक मॉड्यूल में रहती है, तो आप इसे use साथ उसी तरह का उपयोग:

use SomeClass; 

my $i = SomeClass->class_method(...); 

OO तीर वाक्य रचना some_method सबरूटीन पता है कि यह है कि यह बताने के लिए कुछ खास सामान है एक विधि के रूप में कहा जा रहा है। पर्ल पहली बार तर्क के रूप में (इस मामले में SomeClass) को संदर्भित करता है। इसके अतिरिक्त, ओओ सिंटैक्स का उपयोग करते समय, पर्ल अपनी विरासत सुविधाओं का उपयोग करना जानता है।

तरीके के साथ कहा जाता है '->' विधि के लिए पहले पैरामीटर के रूप दिग्दर्शन, तो यह कॉल प्राप्त:

SomeClass->new('world'); 

वाक्य रचना है अगर आप इसे पहले पैरामीटर के रूप वर्ग के नाम के साथ बुलाया था:

SomeClass::new('SomeClass' ,'world'); # no inheritance this way 

यह ऑब्जेक्ट्स के लिए भी वही काम करता है। जब एक वस्तु दिग्दर्शन है:

SomeClass::bar($i, 'world'); 
+0

यह कहने का एक सुंदर चौराहे तरीका है कि पर्ल <6 में कक्षाएं नहीं हैं ;-) – innaM

+0

हालांकि, मैंने कहा, मैं * उस तरह * व्यवहार की तरह। मुख्य रूप से सोचने के तरीके को पाने के लिए PHP द्वारा शॉर्ट-शाफ्ट किया गया, मेरा मतलब है, यह नहीं है, (और कभी नहीं होगा, (* कानों में उंगलियां डालता है)) नामस्थान नाम समर्थन। –

+5

पैकेज स्कॉप्स नहीं हैं। वे स्पष्ट रूप से scoped हैं, लेकिन एक गुंजाइश परिभाषित नहीं करते हैं। –

12

पर्ल कक्षाएं नहीं है:

my $i = SomeClass->new(); 
$i->bar('world'); 

वस्तु विधि के रूप में पहली पैरामीटर है। इसमें नामस्थान हैं जिन्हें आप package के साथ बदलते हैं। पर्ल ओओपी के पूर्ण विवरण के लिए, इंटरमीडिएट पर्ल या ऑब्जेक्ट ओरिएंटेड पर्ल देखें। आप perltoot और perlboot दस्तावेज़ीकरण भी देख सकते हैं। संक्षेप में, पर्ल नकल करता है कि लोग "असली" कक्षाओं को संकुल, सामान्य सबराउटिन और संदर्भों के साथ क्या उम्मीद करते हैं।

एक मॉड्यूल एक फ़ाइल में निहित कोड का एक वितरित टुकड़ा है। perlmod देखें।


मैं इस बारे में और अधिक कहते हैं The Effective Perler के लिए मेरी पोस्ट, Find a module's release managers में। मैं ओओ सामान में नहीं आता, लेकिन मैं "मॉड्यूल" के आसपास के अन्य शब्दों के बारे में बात करता हूं।

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