Alce (Perl)
Moose es una extensión del subsistema orientado a objetos para Perl 5. Agrega funciones OOP modernas a Perl, Moose se inspiró en CLOS , Perl 6 y muchos otros lenguajes [1] como Smalltalk , Java , BETA , OCaml , Ruby y otros [2] .
Características
La programación orientada a objetos en Moose, como Perl 6 , se basa, además de en clases y objetos, en el mecanismo de roles , una de las alternativas a la herencia múltiple (que, sin embargo, también es compatible).
Los atributos ( propiedades de clase ) de las clases admiten la delegación y la inicialización diferida .
Los roles se basan en rasgos y desempeñan el mismo rol que las clases mixtas . Se parecen a las interfaces , pero a diferencia de ellas, incluyen implementaciones de métodos predeterminados.
El sistema de objetos de Moose mantiene un metamodelo residente: se puede modificar y ampliar escribiendo clases y roles dentro de Moose. Muchas extensiones de CPAN utilizan Moose , y hay varios módulos de extensión de Moose [1] . A partir de la versión 5.8, el marco web Model-View-Controller Catalyst se basa en el sistema de objetos Moose [3]
Ejemplo
La clase Point(punto) y su subclase Point3D(punto tridimensional) se definen a continuación:
punto del paquete ;
usar alce ;
usar carpa ;
tiene 'x' => ( isa => 'Num' , is => 'rw' );
tiene 'y' => ( isa => 'Num' , is => 'rw' );
sub clear {
mi $self = shift ;
$auto -> x ( 0 );
$auto -> y ( 0 );
}
sub set_to {
@_ == 3 o croar "Número incorrecto de argumentos" ;
mi $yo = cambio ;
mi ( $x , $y ) = @_ ;
$propio -> x ( $x );
$self -> y ( $y );
}
paquetePunto3D ; _ usar alce ; usar carpa ;
extiende 'Punto' ;
tiene 'z' => ( isa => 'Num' , is => 'rw' );
después de 'borrar' => sub {
my $self = shift ;
$auto -> z ( 0 );
};
sub set_to {
@_ == 4 o croar "Número incorrecto de argumentos" ;
mi $yo = cambio ;
mi ( $x , $y , $z ) = @_ ;
$propio -> x ( $x );
$self -> y ( $y );
$auto -> z ( $z );
}
Point3DLos métodos set_to()y se anulan en la clase clear(), el primero de ellos no llama al método de la clase principal, el segundo sí lo hace.
Véase también
Notas
- ↑ 12 Dave Rolsky . Perl 5.16 y posteriores , LWN.net (21 de marzo de 2012). Archivado desde el original el 16 de septiembre de 2013. Consultado el 21 de agosto de 2013.
- ↑ moose.iinteractive.com - sitio web oficial de Moose
- ↑ Diment y Trout, 2009 , Introducción -> Catalyst y Perl, p. xxvi.
Literatura
- Tom Christiansen, Larry Wall, Brian Foy y Jon Orwant. cap. 12.Objetos. -> The Moose in the Room // Programación Perl: potencia inigualable para el procesamiento de texto y secuencias de comandos. - O'Reilly Media , 2012. - Pág. 453-455. — 1130 pág. - ISBN 0596004923 , 9780596004927.
- cromático. Objetos -> Moose // Perl moderno . - Onyx Neon Press, 7 de diciembre de 2011. - 290 p. - ISBN 0977920178 , 978-0977920174.
- Kieren Diment y Matt S Trout con Eden Cardim, Jay Kuri y Jess Robinson. Capítulo 2 Configuración de Catalyst y conocimientos previos -> Conocimiento previo de Catalyst -> Programación orientada a objetos con Moose // La guía definitiva de Catalyst. Escribir aplicaciones web basadas en Perl extensibles, escalables y mantenibles. - Apress, 2009. - Págs. 28-44. — 362 págs. - ISBN 978-1-4302-2365-8 .
- cromático. Principiantes Introducción a la Programación Orientada a Objetos con Perl . O'Reily (13 de noviembre de 2008). Consultado el 21 de agosto de 2013. Archivado desde el original el 28 de mayo de 2013. (indefinido)
- Henry Van Styn. alce _ Linux Journal (23 de enero de 2012). Consultado el 21 de agosto de 2013. Archivado desde el original el 22 de septiembre de 2013. (indefinido)
- Randal Schwartz. El alce vuela (parte 1) . Revista Linux (19 de septiembre de 2007). Consultado el 21 de agosto de 2013. Archivado desde el original el 29 de mayo de 2014. (indefinido) , Randal Schwartz. El alce vuela (parte 2) . Revista Linux (23 de septiembre de 2007). Consultado el 21 de agosto de 2013. Archivado desde el original el 4 de julio de 2013. (indefinido)
- brian d foy Primeros pasos con Moose // La revisión de Perl. - Julio 2010. - Edición. 5.3 . Archivado desde el original el 5 de diciembre de 2013.
Enlaces