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()
, первый из них не вызывает метод родительского класса, второй — вызывает.
См. также
[править | править код]Примечания
[править | править код]- ↑ 1 2 Dave Rolsky (2012-03-21). "Perl 5.16 and beyond". LWN.net. Архивировано 16 сентября 2013. Дата обращения: 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. Архивировано 28 мая 2013 года.
- Henry Van Styn. Moose . Linux Journal (23 января 2012). Дата обращения: 21 августа 2013. Архивировано 22 сентября 2013 года.
- Randal Schwartz. The Moose is Flying (part 1) . Linux Magazine (19 сентября 2007). Дата обращения: 21 августа 2013. Архивировано 29 мая 2014 года., Randal Schwartz. The Moose is Flying (part 2) . Linux Magazine (23 сентября 2007). Дата обращения: 21 августа 2013. Архивировано 4 июля 2013 года.
- brian d foy. Getting Started with Moose // The Perl Review. — July 2010. — Вып. 5.3. Архивировано 5 декабря 2013 года.
Ссылки
[править | править код]- Moose Homepage Архивная копия от 2 сентября 2013 на Wayback Machine
- Moose Documentation
- Moose: ООП в Perl Архивная копия от 17 мая 2013 на Wayback Machine
- Moose(X). Продолжение Архивная копия от 18 марта 2013 на Wayback Machine
Это заготовка статьи о программном обеспечении. Помогите Википедии, дополнив её. |
Это заготовка статьи о компьютерных языках. Помогите Википедии, дополнив её. |