Interested Article - Moose (Perl)

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

Особенности

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

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

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

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

Пример

Ниже определяется класс 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. Dave Rolsky . , LWN.net (21 марта 2012). 16 сентября 2013 года. Дата обращения: 21 августа 2013.
  2. — официальный сайт Moose
  3. , 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. // . — 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. (неопр.) . (13 ноября 2008). Дата обращения: 21 августа 2013. 28 мая 2013 года.
  • Henry Van Styn. (неопр.) . Linux Journal (23 января 2012). Дата обращения: 21 августа 2013. 22 сентября 2013 года.
  • Randal Schwartz. (неопр.) . Linux Magazine (19 сентября 2007). Дата обращения: 21 августа 2013. 29 мая 2014 года. , Randal Schwartz. (неопр.) . Linux Magazine (23 сентября 2007). Дата обращения: 21 августа 2013. 4 июля 2013 года.
  • brian d foy. // The Perl Review. — July 2010. — Вып. 5.3 . 5 декабря 2013 года.

Ссылки

Same as Moose (Perl)