Moose es una extensión del sistema de objetos del lenguaje de programación Perl . Su propósito declarado [1] es traer características modernas del lenguaje orientado a objetos a Perl 5, y hacer que la programación Perl orientada a objetos sea más consistente y menos tediosa.
Características
Moose se basa en Class :: MOP, un protocolo de metaobjetos (también conocido como MOP). Usando el MOP, Moose proporciona una introspección completa para todas las clases que usan Moose.
Clases
Moose permite a un programador crear clases :
- Una clase tiene cero o más atributos .
- Una clase tiene cero o más métodos .
- Una clase tiene cero o más superclases (también conocidas como clases principales). Una clase hereda de su (s) superclase (s). Moose admite herencia múltiple .
- Una clase tiene cero o más modificadores de método. Estos modificadores pueden aplicarse a sus propios métodos, métodos heredados de sus antepasados o métodos proporcionados por roles.
- Una clase hace cero o más roles (también conocidos como rasgos en otros lenguajes de programación).
- Una clase tiene un constructor y un destructor .
- Una clase tiene una metaclase .
Atributos
Un atributo es una propiedad de la clase que lo define.
- Un atributo siempre tiene un nombre y puede tener otras características definitorias.
- Las características de un atributo pueden incluir un indicador de lectura / escritura, un tipo, nombres de métodos de acceso , delegaciones , un valor predeterminado e inicialización diferida .
Roles
Los roles en Moose se basan en rasgos . Realizan una tarea similar a los mixins , pero se componen horizontalmente en lugar de heredarse. También son algo así como interfaces , pero a diferencia de las interfaces, pueden proporcionar una implementación predeterminada. Los roles se pueden aplicar tanto a instancias individuales como a clases.
- Un rol tiene cero o más atributos.
- Un rol tiene cero o más métodos.
- Un rol tiene cero o más modificadores de método.
- Un rol tiene cero o más métodos requeridos.
Extensiones
Hay varios módulos de extensión Moose en CPAN . A septiembre de 2012[actualizar]hay 855 módulos en 266 distribuciones en el espacio de nombres de MooseX. [2] La mayoría de ellos se pueden instalar opcionalmente con el módulo Task :: Moose. [3]
Ejemplos de
Este es un ejemplo de una clase Point
y su subclase Point3D
:
Punto de paquete ;use Moose ;utilizar carpa ;tiene 'x' => ( isa => 'Num' , es => 'rw' );tiene 'y' => ( isa => 'Num' , es => 'rw' );sub clear { my $ self = shift ; $ uno mismo- > x ( 0 ); $ self- > y ( 0 );}sub set_to { @_ == 3 o croar "Número incorrecto de argumentos" ; my $ self = shift ; mi ( $ x , $ y ) = @_ ; $ uno mismo- > x ( $ x ); $ self- > y ( $ y );}paquete Point3D ;use Moose ;utilizar carpa ;extiende 'Punto' ;tiene 'z' => ( isa => 'Num' , is => 'rw' );después de 'clear' => sub { my $ self = shift ; $ self- > z ( 0 );};sub set_to { @_ == 4 o croar "Número incorrecto de argumentos" ; my $ self = shift ; mi ( $ x , $ y , $ z ) = @_ ; $ uno mismo- > x ( $ x ); $ self- > y ( $ y ); $ self- > z ( $ z );}
Hay un nuevo set_to()
método en la Point3D
clase, por lo que el método del mismo nombre definido en la Point
clase no se invoca en el caso de las Point3D
instancias. El clear()
método, por otro lado, no se reemplaza sino que se extiende en la subclase, por lo que ambos métodos se ejecutan en el orden correcto.
Esto es lo mismo usando la MooseX::Declare
extensión:
use MooseX :: Declare ;class Point { tiene 'x' => ( isa => 'Num' , is => 'rw' ); tiene 'y' => ( isa => 'Num' , es => 'rw' ); método clear { $ self- > x ( 0 ); $ self- > y ( 0 ); } método set_to ( Num $ x , Num $ y ) { $ self- > x ( $ x ); $ self- > y ( $ y ); }}class Point3D extiende Point { has 'z' => ( isa => 'Num' , is => 'rw' ); después de borrar { $ self- > z ( 0 ); } método set_to ( Num $ x , Num $ y , Num $ z ) { $ self- > x ( $ x ); $ self- > y ( $ y ); $ self- > z ( $ z ); }}
Ver también
- Sistema de objetos Raku que es la inspiración para Moose
- Joose , un marco de JavaScript inspirado en Moose
- Catalyst , un marco de aplicación web que utiliza Moose
Referencias
- ^ "Moose - Un sistema de objetos posmoderno para Perl" . Consultado el 6 de marzo de 2017 .
- ^ Extensiones de alces en CPAN
- ^ Tarea :: Alce