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)
Примечания
- Dave Rolsky. Perl 5.16 and beyond, LWN.net (21 марта 2012). Дата обращения 21 августа 2013.
- moose.iinteractive.com — официальный сайт Moose
- 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 года.