Elan (Perl)
Moose este o extensie a subsistemului orientat pe obiecte pentru Perl 5. Adaugă facilități OOP moderne la Perl, Moose a fost inspirat de CLOS , Perl 6 și multe alte limbaje [1] precum Smalltalk , Java , BETA , OCaml , Ruby și altele. [2] .
Caracteristici
Programarea orientată pe obiecte în Moose, ca și Perl 6 , se bazează, pe lângă clase și obiecte, pe mecanismul rolurilor , una dintre alternativele la moștenirea multiplă (care, totuși, este și suportată).
Atributele ( proprietățile clasei ) ale claselor acceptă delegarea și inițializarea leneșă .
Rolurile sunt bazate pe trăsături și îndeplinesc același rol ca și clasele mixin . Ele seamănă cu interfețele , dar spre deosebire de ele, includ implementări implicite de metode.
Sistemul de obiecte Moose menține un metamodel rezident: acesta poate fi modificat și extins prin scrierea de clase și roluri în cadrul lui Moose. Moose este folosit de multe extensii CPAN și există o serie de module de extensie Moose [1] . Începând cu versiunea 5.8, cadrul web Model-View-Controller Catalyst se bazează pe sistemul de obiecte Moose [3]
Exemplu
Clasa Point(punctul) și subclasa sa Point3D(punctul tridimensional) sunt definite mai jos:
pachet Punct ;
utilizați Elan ;
folosi crap ;
are 'x' => ( isa => 'Număr' , este => 'rw' );
are 'y' => ( isa => 'Număr' , este => 'rw' );
sub clear {
my $self = shift ;
$self -> x ( 0 );
$self -> y ( 0 );
}
sub set_to {
@_ == 3 sau croak „Număr slab de argumente” ;
my $self = shift ;
my ( $x , $y ) = @_ ;
$self -> x ( $x );
$self -> y ( $y );
}
packagePoint3D ; _ utilizați Elan ; folosi crap ;
extinde „Punctul” ;
are 'z' => ( isa => 'Număr' , este => 'rw' );
după 'clear' => sub {
my $self = shift ;
$self -> z ( 0 );
};
sub set_to {
@_ == 4 sau croak „Număr slab de argumente” ;
my $self = shift ;
my ( $x , $y , $z ) = @_ ;
$self -> x ( $x );
$self -> y ( $y );
$self -> z ( $z );
}
Metodele și Point3Dsunt suprascrise în clasa , prima dintre ele nu apelează metoda clasei părinte, a doua face.
set_to()clear()
Vezi și
Note
- ↑ 12 Dave Rolsky . Perl 5.16 și ulterior , LWN.net (21 martie 2012). Arhivat din original pe 16 septembrie 2013. Preluat la 21 august 2013.
- ↑ moose.iinteractive.com - site-ul oficial Moose
- ↑ Diment and Trout, 2009 , Introducere -> Catalyst and Perl, p. xxvi.
Literatură
- Tom Christiansen, Larry Wall, Brian Foy și Jon Orwant. Ch. 12.Obiecte. -> Elanul din cameră // Programare Perl: Putere de neegalat pentru procesarea textului și scripting. - O'Reilly Media , 2012. - P. 453-455. — 1130 p. - ISBN 0596004923 , 9780596004927.
- cromatic. Obiecte -> Elan // Modern Perl . - Onyx Neon Press, 2011, 7 decembrie. - 290 p. - ISBN 0977920178 , 978-0977920174.
- Kieren Diment și Matt S Trout cu Eden Cardim, Jay Kuri și Jess Robinson. Cap.2 Configurarea catalizatorului și cunoștințele de bază -> Cunoștințe de bază despre catalizator -> Programarea orientată pe obiecte cu Moose // Ghidul definitiv pentru Catalyst. Scrierea de aplicații web extensibile, scalabile și întreținute bazate pe Perl. - Apress, 2009. - P. 28-44. — 362 p. - ISBN 978-1-4302-2365-8 .
- cromatic. Începători Introducere în programarea orientată pe obiecte cu Perl . O'Reily (13 noiembrie 2008). Preluat la 21 august 2013. Arhivat din original la 28 mai 2013. (nedefinit)
- Henry Van Styn. Elan . Linux Journal (23 ianuarie 2012). Preluat la 21 august 2013. Arhivat din original la 22 septembrie 2013. (nedefinit)
- Randal Schwartz. Elanul zboară (partea 1) . Revista Linux (19 septembrie 2007). Preluat la 21 august 2013. Arhivat din original la 29 mai 2014. (nedefinit) , Randal Schwartz. Elanul zboară (partea 2) . Revista Linux (23 septembrie 2007). Preluat la 21 august 2013. Arhivat din original la 4 iulie 2013. (nedefinit)
- brian d foy. Noțiuni introductive cu Moose // Revizuirea Perl. - iulie 2010. - Emisiune. 5.3 . Arhivat din original pe 5 decembrie 2013.
Link -uri
Perl |
---|
oameni |
- Larry Wall
- Randel Schwartz
- Damian Conway
- Allison Randel
- Audrey Tang
- Simon Cozens
- cromatic
- Adam Kennedy
- brian d foy
- Mark Jason Dominus
|
---|
Lucruri |
|
---|
Cadre |
|
---|
|