سؤال

بيرل قد OOP الميزات ، لكنها إلى حد ما نادرا ما تستخدم.كيف يمكنك إنشاء واستخدام بيرل الكائنات مع أساليب و خصائص ؟

هل كانت مفيدة؟

المحلول

بالتأكيد يجب أن نلقي نظرة على Moose.

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);
}

موس يعطيك (بين أمور أخرى) منشئ ، accessor أساليب التحقق من نوع مجانا!

حتى في التعليمات البرمجية الخاصة بك يمكنك:

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.

نقطة انطلاق جيدة Moose::Manual و Moose::Cookbook

إذا كنت بحاجة فقط الأشياء الأساسية يمكنك أيضا استخدام Mouse وهي ليست كاملة ، ولكن دون أن معظم ترجمة ركلة جزاء في الوقت.

نصائح أخرى

موس, بالتأكيد.

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

على الفور لديك مجانا جديد (طريقة) ، accessor أساليب سمات لك مجرد تعريف 'له'.لذا يمكنك أن تقول:

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

وهلم جرا.ليس هذا فقط, ولكن accessor أساليب تأتي نوع فحص مجانا (و يمكنك تحديد أنواع فضلا عن معيار منها).بالإضافة إلى الحصول على 'تمتد' على subclassing, 'مع' عن الأدوار/الصفات ، وجميع أنواع أخرى من الأشياء العظيمة التي تسمح لك للحصول على وظيفة حقيقية من كتابة جيدة قوية للصيانة OO رمز.

TMTOWTDI ، ولكن هذا واحد يعمل.

حاليا أنا استخدم كائن::InsideOut كلما أريد الكائنات ، لطيفة جدا و سوف تعطيك الكثير من الميزات القياسية المباركة تجزئة الأجسام.بعد أن قال أنه إذا كنت بدء مشروع جديد وأود أن ننظر بجدية في موس.

في حين أنه من الجيد أن تقرأ الرسمية بيرل الوثائق ، وأود أن لا نوصي محاولة الدور الخاصة بك وجوه إطار ، أو بناء الأجسام باستخدام التجزئة ، حتى أن من المغري أن تأخذ الطريق السهل و "الذروة" مباشرة إلى الكائنات "خاص" المتغيرات تماما كسر التغليف ، وهذا يعود إلى لدغة لك عندما تريد ريفاكتور الكائن.

بيرل الكائنات ليست فقط المباركة التجزئة.مباركون هم المراجع.أنها يمكن أن تكون (وفي أغلب الأحيان) المباركة تجزئة المراجع, ولكن يمكن بسهولة مثلما يتم المباركة العددية أو مجموعة من المراجع.

البرنامج التعليمي الرسمي على CPAN الموقع هو جيد.

هناك أيضا مادة جيدة يسمى الجمل أنبوب في CodeProject.

أنا أوصي أن نلقي نظرة على موس إذا كنت تريد أن تفعل OO في بيرل.ومع ذلك ، فإنه ليس من المفيد جدا إذا كنت لا تفهم ما OO في بيرل يعني.إلى فهم أفضل لكيفية بيرل OO يعمل تحت غطاء محرك السيارة ، كتبت نظرة عامة على بلدي بلوق: http://augustinalareina.wordpress.com/2010/06/06/an-introduction-to-object-oriented-perl/

من بنية البيانات وجهة نظر كائن مرجع مع عدد قليل من ميزات اضافية.المترجم يعرف التعامل مع هذه الإشارات الخاصة مثل الكائنات لأنها كانت "مبارك" مع كلمة "بارك".المباركة مراجع تحتوي على علامة تشير إلى أنها كائن.أساسا هذا يعني أنك يمكن أن تحدد أساليب الدعوة عليهم.

فعلى سبيل المثال إذا قمت بإنشاء الأساسية hashref هذا لن يعمل:$hashref->فو () ؛

ولكن إذا قمت بإنشاء المباركة hashref (ويعرف أيضا باسم كائن) هذا العمل:$blessed_hashref->فو () ؛

موس ممتازة وحدة OOP في بيرل لأنه يخلق للتنفيذ OO طبقة التلقائى مقابض accessor الأساليب حتى لا تضطر إلى تحديد مجموعة من حاصل على واضعي.إذا كنت ترغب في استخدام جمعة::ذروة لنرى كيف بيرل مترجم مخازن الكائنات ، اتبع الرابط إلى دخول بلوق نشرت أعلاه.

على قدم واحدة ، كل فئة هو حزمة ؛ يمكنك إنشاء (متعددة, إذا رغبت في ذلك) الميراث من خلال وضع حزمة متغير @عيسى (يفضل أن يكون في وقت الترجمة);يمكنك إنشاء كائن من القائمة قطعة من البيانات (في كثير من الأحيان ، ولكن ليس دائما ، مجهول تجزئة المستخدمة لتخزين المتغيرات سبيل المثال) مع بارك(المرجع [،اسم_الفئة]);يمكنك استدعاء أساليب الكائن مثل $obj->methodname(@وسائط) و أساليب الفئة مثل "CLASSNAME"->methodname(@وسائط).وراثة متعددة القرار طريقة النظام يمكن تغييرها باستخدام mro.

لأن هذا هو إلى حد ما أضيق الحدود و لا قوة التغليف ، هناك العديد من النماذج المختلفة التي توفر أكثر أو وظائف مختلفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top