Kanada geyiği (Perl) - Moose (Perl)

Kanada geyiği nesnenin nesne sisteminin bir uzantısıdır Perl Programlama dili. Belirtilen amacı[1] modern nesne yönelimli dil özelliklerini Perl 5'e getirmek ve nesne yönelimli Perl programlama daha tutarlı ve daha az sıkıcı.

Özellikleri

Moose, Sınıfı üzerine inşa edilmiştir :: MOP, a meta nesne protokolü (a.k.a. MOP). Moose, MOP'u kullanarak eksiksiz iç gözlem Moose kullanan tüm sınıflar için.

Sınıflar

Moose, bir programcının sınıflar:

  • Bir sınıfın sıfır veya daha fazlası vardır Öznitellikler.
  • Bir sınıfın sıfır veya daha fazlası vardır yöntemler.
  • Bir sınıfın sıfır veya daha fazlası vardır üst sınıflar (a.k.a. ebeveyn sınıfları). Bir sınıf miras alır süper sınıflarından. Moose destekler çoklu miras.
  • Bir sınıfın sıfır veya daha fazla yöntem değiştiricisi vardır. Bu değiştiriciler kendi yöntemlerine, atalarından miras alınan yöntemlere veya roller tarafından sağlanan yöntemlere uygulanabilir.
  • Bir sınıf sıfır veya daha fazla rol oynar (aynı zamanda özellikler diğer programlama dillerinde).
  • Bir sınıfta kurucu ve bir yıkıcı.
  • Bir sınıfta metasınıf.

Öznitellikler

Bir öznitelik, onu tanımlayan sınıfın bir özelliğidir.

Roller

Moose'daki roller şuna dayanmaktadır: özellikler. Benzer bir görevi yerine getirirler. Mixins, ancak kalıtsal değil yatay olarak oluşturulur. Onlar da bir şekilde arayüzler ancak arayüzlerden farklı olarak, varsayılan bir uygulama sağlayabilirler. Roller, Sınıfların yanı sıra bireysel örneklere de uygulanabilir.

  • Bir rolün sıfır veya daha fazla özniteliği vardır.
  • Bir rolün sıfır veya daha fazla yöntemi vardır.
  • Bir rolün sıfır veya daha fazla yöntem değiştiricisi vardır.
  • Bir rolün sıfır veya daha fazla gerekli yöntemi vardır.

Uzantılar

Üzerinde birkaç Moose genişletme modülü var CPAN. Eylül 2012 itibarıyla MooseX ad alanında 266 dağıtımda 855 modül vardır.[2] Çoğu isteğe bağlı olarak Task :: Moose modülü ile kurulabilir.[3]

Örnekler

Bu bir sınıf örneğidir Nokta ve alt sınıfı Point3D:

paket Nokta;kullanım Kanada geyiği;kullanım Sazan;vardır 'x' => (isa => 'Num', dır-dir => 'rw');vardır "y" => (isa => 'Num', dır-dir => 'rw');alt açık {    benim $ self = vardiya;    $ self->x(0);    $ self->y(0);}alt ayarlanır {    @_ == 3 veya vraklamak "Kötü sayıda bağımsız değişken";    benim $ self = vardiya;    benim ($ x, y) = @_;    $ self->x($ x);    $ self->y(y);}paket Point3D;kullanım Kanada geyiği;kullanım Sazan;genişler 'Nokta';vardır 'z' => (isa => 'Num', dır-dir => 'rw');sonra 'açık' => alt {    benim $ self = vardiya;    $ self->z(0);};alt ayarlanır {    @_ == 4 veya vraklamak "Kötü sayıda bağımsız değişken";    benim $ self = vardiya;    benim ($ x, y, $ z) = @_;    $ self->x($ x);    $ self->y(y);    $ self->z($ z);}

Yeni bir ayarlanır() yöntem Point3D sınıf, böylece aynı adı taşıyan yöntem Nokta durumunda sınıf çağrılmaz Point3D örnekler. açık() Öte yandan yöntem değiştirilmez, ancak alt sınıfta genişletilir, bu nedenle her iki yöntem de doğru sırada çalıştırılır.

Bu, kullanarak aynıdır MooseX :: Bildirmek uzantı:

kullanım MooseX :: Bildirmek;sınıf Nokta {    vardır 'x' => (isa => 'Num', dır-dir => 'rw');    vardır "y" => (isa => 'Num', dır-dir => 'rw');        yöntem açık {        $ self->x(0);        $ self->y(0);    }    yöntem ayarlanır (Num $ x, Num y) {        $ self->x($ x);        $ self->y(y);    }}sınıf Point3D genişler Nokta {    vardır 'z' => (isa => 'Num', dır-dir => 'rw');    sonra açık {        $ self->z(0);    }    yöntem ayarlanır (Num $ x, Num y, Num $ z) {        $ self->x($ x);        $ self->y(y);        $ self->z($ z);    }}

Ayrıca bakınız

Referanslar

  1. ^ "Moose - Perl için postmodern bir nesne sistemi". Alındı 2017-03-06.
  2. ^ CPAN'da Moose uzantıları
  3. ^ Görev :: Moose

Dış bağlantılar