Moose (Perl)

Из Википедии, бесплатной энциклопедии

Moose — расширение объектно-ориентированной подсистемы для Perl 5. Добавляет к Perl современные средства ООП, источником идей для Moose были CLOS, Perl 6 и множество других языков[1], таких, как Smalltalk, Java, BETA, OCaml, Ruby и др.[2].

Особенности[править | править код]

Объектно-ориентированное программирование в Moose, как и Perl 6 основывается, помимо классов и объектов, на механизме ролей, одной из альтернатив множественному наследованию (которое, впрочем, тоже поддерживается).

Атрибуты (свойства классов) классов поддерживают делегирование и отложенную инициализацию.

Роли основаны на типажах и выполняют ту же роль, что и классы-примеси. Они напоминают интерфейсы, но в отличие от них включают реализацию методов по умолчанию.

Объектная система Moose поддерживает резидентную метамодель: её можно изменять и расширять путём написания классов и ролей средствами самого Moose. Moose используется многими CPAN-расширениями, существует ряд модулей расширения Moose[1]. Начиная с версии 5.8 на объектной системе Moose основан Model-View-Controller веб-фреймвок Catalyst [3]

Пример[править | править код]

Ниже определяется класс Point (точка) и его подкласс Point3D (3-мерная точка):

package Point; use Moose; use Carp;  has 'x' => (isa => 'Num', is => 'rw'); has 'y' => (isa => 'Num', is => 'rw');  sub clear {     my $self = shift;     $self->x(0);     $self->y(0); }  sub set_to {     @_ == 3 or croak "Bad number of arguments";     my $self = shift;     my ($x, $y) = @_;     $self->x($x);     $self->y($y); }  package Point3D; use Moose; use Carp;  extends 'Point';  has 'z' => (isa => 'Num', is => 'rw');  after 'clear' => sub {     my $self = shift;     $self->z(0); };  sub set_to {     @_ == 4 or croak "Bad number of arguments";     my $self = shift;     my ($x, $y, $z) = @_;     $self->x($x);     $self->y($y);     $self->z($z); } 

В классе Point3D переопределяется методы set_to() и clear(), первый из них не вызывает метод родительского класса, второй — вызывает.

См. также[править | править код]

Примечания[править | править код]

  1. 1 2 Dave Rolsky (2012-03-21). "Perl 5.16 and beyond". LWN.net. Архивировано из оригинала 16 сентября 2013. Дата обращения: 21 августа 2013.
  2. moose.iinteractive.com — официальный сайт Moose
  3. Diment and Trout, 2009, Introduction -> Catalyst and Perl, p. xxvi.

Литература[править | править код]

Ссылки[править | править код]