stringtranslate.com

Alce (Perl)

Moose es una extensión del sistema de objetos del lenguaje de programación Perl . Su propósito declarado [1] es incorporar características de lenguaje de programación orientado a objetos moderno a Perl 5 y hacer que la programación orientada a objetos en Perl sea más consistente y menos tediosa.

Características

Moose se basa en Class::MOP, un protocolo de metaobjetos (MOP). Mediante el uso de MOP, Moose proporciona una introspección de tipos completa para todas las clases que utilizan Moose.

Clases

Moose permite a un programador crear clases :

Atributos

Un atributo es una propiedad de la clase que lo define.

Roles

Los roles en Moose se basan en rasgos . Realizan una tarea similar a la de los mixins , pero se componen horizontalmente en lugar de heredarse. También son algo así como las interfaces , pero a diferencia de algunas implementaciones de interfaces, pueden proporcionar una implementación predeterminada. Los roles se pueden aplicar a instancias individuales, así como a clases.

Extensiones

Hay varios módulos de extensión de Moose en CPAN . A partir de septiembre de 2012, hay 855 módulos en 266 distribuciones en el espacio de nombres MooseX. [2] La mayoría de ellos se pueden instalar opcionalmente con el módulo Task::Moose. [3]

Ejemplos

Este es un ejemplo de una clase Pointy su subclase Point3D:

paquete Punto ; utilizar Alce ; utilizar Carpa ;   tiene 'x' => ( isa => 'Num' , es => 'rw' ); tiene 'y' = > ( isa => 'Num' , es => 'rw' );                sub clear { mi $self = shift ; $self -> x ( 0 ); $self -> y ( 0 ); }        sub set_to { @_ == 3 o croak "Número incorrecto de argumentos" ; my $self = shift ; my ( $x , $y ) = @_ ; $self -> x ( $x ); $self -> y ( $y ); }                   paquete Point3D ; utilizar Moose ; utilizar Carp ;   extiende 'Punto' ; tiene 'z' => ( isa => 'Num' , es => 'rw' );        después de 'borrar' => sub { mi $self = shift ; $self -> z ( 0 ); };         sub set_to { @_ == 4 o croak "Número incorrecto de argumentos" ; my $self = shift ; my ( $x , $y , $z ) = @_ ; $self -> x ( $x ); $self -> y ( $y ); $self -> z ( $z ); }                     

Hay un nuevo set_to()método en la Point3Dclase, por lo que el método del mismo nombre definido en la Pointclase no se invoca en el caso de Point3Dinstancias. clear()Por otro lado, el método 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::Declareextensión:

utilizar MooseX::Declare ; clase Punto { tiene 'x' => ( isa => 'Num' , es => '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 ); } }                                     clase Point3D extiende Point { tiene 'z' => ( isa => 'Num' , es => '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 ); } }                 

Véase también

Referencias

  1. ^ "Moose - Un sistema de objetos posmoderno para Perl" . Consultado el 6 de marzo de 2017 .
  2. ^ Extensiones de Moose en CPAN
  3. ^ Tarea::Alce

Enlaces externos