Лось (Perl)
Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( Май 2010 г. ) |
Moose — это расширение объектной системы Perl языка программирования . Его заявленная цель [1] Целью является привнести в Perl 5 современные возможности объектно-ориентированного языка и сделать объектно-ориентированное программирование на Perl более последовательным и менее утомительным.
Функции
[ редактировать ]Moose построен на основе Class::MOP, протокола метаобъектов ( он же MOP). Используя MOP, Moose обеспечивает полный самоанализ всех классов, использующих Moose.
Классы
[ редактировать ]Moose позволяет программисту создавать классы :
- Класс имеет ноль или более атрибутов .
- Класс имеет ноль или более методов .
- Класс имеет ноль или более суперклассов (родительских классов). Класс наследует свой суперкласс(ы). Moose поддерживает множественное наследование .
- Класс имеет ноль или более модификаторов методов. Эти модификаторы могут применяться к собственным методам, методам, унаследованным от его предков, или методам, предоставляемым ролями.
- Класс выполняет ноль или более ролей (также известных как черты в других языках программирования).
- Класс имеет конструктор и деструктор .
- У класса есть метакласс .
Атрибуты
[ редактировать ]Атрибут — это свойство класса, которое его определяет.
- Атрибут всегда имеет имя и может иметь ряд других определяющих характеристик.
- Характеристики атрибута могут включать флаг чтения/записи, тип, методов доступа имена , делегирование , значение по умолчанию и отложенную инициализацию .
Роли
[ редактировать ]Роли в Moose основаны на чертах характера . Они выполняют ту же задачу, что и миксины , но формируются горизонтально, а не наследуются. Они также чем-то похожи на интерфейсы , но в отличие от некоторых реализаций интерфейсов могут предоставлять реализацию по умолчанию. Роли можно применять как к отдельным экземплярам, так и к классам.
- Роль имеет ноль или более атрибутов.
- Роль имеет ноль или более методов.
- Роль имеет ноль или более модификаторов методов.
- Роль имеет ноль или более обязательных методов.
Расширения
[ редактировать ]имеется ряд модулей расширения Moose На CPAN . По состоянию на сентябрь 2012 г. [update] в пространстве имен MooseX имеется 855 модулей в 266 дистрибутивах. [2] Большинство из них можно дополнительно установить с помощью модуля Task::Moose. [3]
Примеры
[ редактировать ]Это пример класса Point
и его подкласс Point3D
:
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);
}
Есть новый set_to()
метод в Point3D
класс, поэтому метод с тем же именем, определенный в Point
класс не вызывается в случае Point3D
экземпляры. clear()
с другой стороны, не заменяется, а расширяется в подклассе, поэтому оба метода выполняются в правильном порядке.
Это то же самое, используя MooseX::Declare
расширение:
use MooseX::Declare;
class Point {
has 'x' => (isa => 'Num', is => 'rw');
has 'y' => (isa => 'Num', is => 'rw');
method clear {
$self->x(0);
$self->y(0);
}
method set_to (Num $x, Num $y) {
$self->x($x);
$self->y($y);
}
}
class Point3D extends Point {
has 'z' => (isa => 'Num', is => 'rw');
after clear {
$self->z(0);
}
method set_to (Num $x, Num $y, Num $z) {
$self->x($x);
$self->y($y);
$self->z($z);
}
}
См. также
[ редактировать ]- Раку (язык программирования) § Объектно-ориентированное программирование , вдохновение для Moose
- Joose (фреймворк) — фреймворк JavaScript , вдохновленный Moose.
- Catalyst (программное обеспечение) — платформа веб-приложений, использующая Moose.
Ссылки
[ редактировать ]- ^ «Moose — постмодернистская объектная система для Perl» . Проверено 6 марта 2017 г.
- ^ Расширения Moose на CPAN
- ^ Задача::Лось