Русская Википедия: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 Шаблон:Sfn
Пример
Ниже определяется класс 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()
, первый из них не вызывает метод родительского класса, второй — вызывает.
См. также
Примечания
Литература
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Книга
- Шаблон:Cite web
- Шаблон:Cite web
- Шаблон:Cite web, Шаблон:Cite web
- Шаблон:Статья
Ссылки
- Moose Homepage Шаблон:Wayback
- Moose Documentation
- Moose: ООП в Perl Шаблон:Wayback
- Moose(X). Продолжение Шаблон:Wayback
Шаблон:Freesoft-stubШаблон:Compu-lang-stub