आप पर्ल में ऑब्जेक्ट्स कैसे बनाते हैं?

पर्ल में ओओपी विशेषताएं हैं, लेकिन इन्हें शायद ही कभी इस्तेमाल किया जाता है। आप विधियों और गुणों के साथ पर्ल ऑब्जेक्ट्स कैसे बनाते हैं और उपयोग करते हैं?

0
ro fr bn

8 उत्तर

Here's a guide: http://www.tutorialspoint.com/perl/perl_oo_perl.htm

संपादित करें: अच्छा बिंदु, मैं कॉपी किए गए कोड को हटा रहा हूं।

0
जोड़ा

आपको निश्चित रूप से मूस पर एक नज़र डालना चाहिए।

package Point;
use Moose; # automatically turns on strict and warnings

has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');

sub clear {
    my $self = shift;
    $self->x(0);
    $self->y(0);
}

मूस आपको (अन्य चीजों के साथ) एक कन्स्ट्रक्टर, एक्सेसर विधियों, और मुफ्त में टाइपिंग की सुविधा देता है!

तो आपके कोड में आप कर सकते हैं:

my $p = Point->new({x=>10 , y=>20}); # Free constructor
$p->x(15);     # Free setter
print $p->x(); # Free getter
$p->clear();
$p->x(15.5);   # FAILS! Free type check.

A good starting point is Moose::Manual and Moose::Cookbook

यदि आपको केवल मूलभूत सामग्री की आवश्यकता है तो आप माउस का भी उपयोग कर सकते हैं जो कि है पूर्ण नहीं है, लेकिन संकलन समय के अधिकांश दंड के बिना।

0
जोड़ा
@ एलेक्ज़ेंडर, धन्यवाद ने जवाब अपडेट किया। @ मीलोस मैंने लिंक प्रदान करने के लिए जवाब संपादित किया है
जोड़ा लेखक Pat, स्रोत
क्या मूस पर पूरी तरह से नए शौक के लिए कोई अच्छा ट्यूटोरियल है? धन्यवाद
जोड़ा लेखक melaos, स्रोत
मैंने देखा है कि मूस का सबसे अच्छा परिचय Catalyzed.org पर है: catalyzed.org/2009/06/a-gentle-introduction-to-moose.html एक अनुभवी पर्ल प्रोग्रामर के रूप में भी, मैंने थोड़ी देर के लिए मूस से परहेज किया क्योंकि यह भ्रमित लग रहा था।
जोड़ा लेखक Drew Stephens, स्रोत
कुछ मार्कडाउन लिंक साफ़ कर दिए गए, और मूस :: परिचय को मूस :: कुकबुक में बदल दिया।
जोड़ा लेखक Brad Gilbert, स्रोत
या माउस यदि आपको मूस की केवल साधारण विशेषताओं की आवश्यकता है
जोड़ा लेखक Alexandr Ciornii, स्रोत

CPAN साइट पर आधिकारिक ट्यूटोरियल अच्छा है।

CodeProject पर ऊंट POOP नामक एक अच्छा लेख भी है।

0
जोड़ा
ध्यान दें कि सभी perldoc ट्यूटोरियल कमांडलाइन पर भी उपलब्ध हैं, यदि आपके पास सामान्य पर्ल स्थापना है: इस के लिए perldoc perltoot। (पर्ल में ऑब्जेक्ट्स के साथ अधिक मज़ेदार के लिए perldoc perlboot भी देखें।)
जोड़ा लेखक Telemachus, स्रोत

On one foot, each class is a package; you establish (multiple, if desired) inheritance by setting the package variable @ISA (preferably at compile time); you create an object from an existing piece of data (often, but not always, an anonymous hash used to store instance variables) with bless(REFERENCE [, CLASSNAME]); you call object methods like $obj->methodname(@ARGS) and class methods like "CLASSNAME"->methodname(@ARGS). Multiple inheritance method resolution order can be altered using mro.

क्योंकि यह कुछ हद तक सरल है और encapsulation को मजबूर नहीं करता है, कई अलग-अलग मॉड्यूल हैं जो अधिक या अलग कार्यक्षमता प्रदान करते हैं।

0
जोड़ा

वर्तमान में मैं जब भी चाहूं ऑब्जेक्ट :: अंदरूनी का उपयोग करता हूं वस्तुओं, यह काफी अच्छा है और आपको मानक धन्य हैश ऑब्जेक्ट्स पर बहुत सारी सुविधाएं प्रदान करेगा। ऐसा कहकर, अगर मैं एक नई परियोजना शुरू कर रहा था तो मैं गंभीरता से मूस को देखूंगा।

हालांकि आधिकारिक PERL दस्तावेज को पढ़ना अच्छा होता है, लेकिन मैं नहीं अपने स्वयं के ऑब्जेक्ट ढांचे को बनाने की कोशिश करने की सिफारिश करता हूं, या हैश का उपयोग करके ऑब्जेक्ट्स का निर्माण करता हूं, यह आसान सड़क और "चोटी" सीधे लेने के लिए मोहक है ऑब्जेक्ट्स में "निजी" वेरिएबल्स पूरी तरह से तोड़ने को तोड़ते हैं, जब आप वस्तु को दोबारा बदलना चाहते हैं तो यह आपको काटने के लिए वापस आ जाएगा।

0
जोड़ा

पर्ल ऑब्जेक्ट्स सिर्फ धन्य हैंश नहीं हैं। वे धन्य संदर्भ हैं। वे धन्य हैश संदर्भों (और अक्सर होते हैं) हो सकते हैं, लेकिन वे आसानी से स्केलर या सरणी संदर्भों को आसानी से आशीर्वादित कर सकते हैं।

0
जोड़ा

Moose, definitely.

package Person;
use Moose;
has age => ( isa => Int, is => 'rw'); 
has name => ( isa => Str, is => 'rw'); 
1;

तत्काल, आपके पास अभी तक 'है' के साथ परिभाषित विशेषताओं के लिए एक नई() विधि, और एक्सेसर विधियां निःशुल्क हैं। तो, आप कह सकते हैं:

my $person = Person->new();
$person->age(34);
$person->name('Mike');
print $person->name, "\n";

और इसी तरह। इतना ही नहीं, लेकिन आपके एक्सेसर विधियों को मुफ्त में टाइप-चेक किया जाता है (और आप अपने स्वयं के प्रकारों के साथ-साथ मानक वाले को परिभाषित कर सकते हैं)। इसके अलावा आपको उप-वर्गीकरण के लिए 'विस्तार' मिलता है, भूमिकाओं/लक्षणों के लिए 'साथ', और अन्य सभी बेहतरीन चीजें जो आपको अच्छी मजबूत रखरखाव ओओ कोड लिखने के वास्तविक काम के साथ मिलती हैं।

TMTOWTDI, लेकिन यह एक काम करता है।

0
जोड़ा

I highly recommend taking a look at Moose if you want to do OO in Perl. However, it's not very useful if you don't understand what OO in Perl means. To better understand how Perl OO works under the hood, I wrote an overview on my blog: http://augustinalareina.wordpress.com/2010/06/06/an-introduction-to-object-oriented-perl/

डेटा संरचना बिंदु से, ऑब्जेक्ट कुछ अतिरिक्त सुविधाओं के साथ संदर्भित है। दुभाषिया इन विशेष संदर्भों को ऑब्जेक्ट्स के रूप में मानना ​​जानता है क्योंकि वे कीवर्ड "आशीर्वाद" के साथ "धन्य" रहे हैं। धन्य संदर्भों में एक झंडा होता है जो दर्शाता है कि वे एक वस्तु हैं। अनिवार्य रूप से इसका मतलब है कि आप उन पर विधियों को परिभाषित और कॉल कर सकते हैं।

For instance if you created a basic hashref, this wouldn't work: $hashref->foo();

But if you create a blessed hashref (aka an Object) this does work: $blessed_hashref->foo();

मूस पर्ल में ओओपी के लिए एक उत्कृष्ट मॉड्यूल है क्योंकि यह एक प्रवर्तन योग्य ओओ परत बनाता है और स्वचालित रूप से एक्सेसर विधियों को संभालता है ताकि आपको गेटर्स और सेटर्स का गुच्छा परिभाषित न करना पड़े। यदि आप पेवेल दुभाषिया वस्तुओं को स्टोर करने के तरीके को देखने के लिए डेवेल :: पीक का उपयोग करने में रुचि रखते हैं, तो ऊपर पोस्ट किए गए ब्लॉग एंट्री के लिंक का पालन करें।

0
जोड़ा