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(), первый из них не вызывает метод родительского класса, второй — вызывает.

См. также

  • Moo (Perl)

Примечания

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

Литература

  • Tom Christiansen, Larry Wall, Brian Foy and Jon Orwant. Ch. 12. Objects. -> The Moose in the Room // Programming Perl: Unmatched Power for Text Processing and Scripting. O'Reilly Media, 2012. — P. 453-455. — 1130 p. — ISBN 0596004923, 9780596004927.
  • chromatic. Objects -> Moose // Modern Perl. — Onyx Neon Press, 2011, December 7. — 290 p. — ISBN 0977920178, 978-0977920174.
  • Kieren Diment and Matt S Trout with Eden Cardim, Jay Kuri, and Jess Robinson. Ch.2 Catalyst Setup and Background Knowledge -> Catalyst Background Knowledge -> Object-Oriented Programming with Moose // The Definitive Guide to Catalyst. Writing Extensible, Scalable, and Maintainable Perl-Based Web Applications. — Apress, 2009. — P. 28-44. — 362 p. — ISBN 978-1-4302-2365-8.
  • chromatic. Beginners Introduction to Object-Oriented Programming with Perl. O'Reily (13 ноября 2008). Дата обращения: 21 августа 2013.
  • Henry Van Styn. Moose. Linux Journal (23 января 2012). Дата обращения: 21 августа 2013.
  • Randal Schwartz. The Moose is Flying (part 1). Linux Magazine (19 сентября 2007)., Randal Schwartz. The Moose is Flying (part 2). Linux Magazine (23 сентября 2007).
  • brian d foy. Getting Started with Moose // The Perl Review. — July 2010. Вып. 5.3. Архивировано 5 декабря 2013 года.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.