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

  • Moo (Perl)

Note

  1. 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.
  2. moose.iinteractive.com - site-ul oficial Moose
  3. 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.
  • Henry Van Styn. Elan . Linux Journal (23 ianuarie 2012). Preluat la 21 august 2013. Arhivat din original la 22 septembrie 2013.
  • Randal Schwartz. Elanul zboară (partea 1) . Revista Linux (19 septembrie 2007). Preluat la 21 august 2013. Arhivat din original la 29 mai 2014. , Randal Schwartz. Elanul zboară (partea 2) . Revista Linux (23 septembrie 2007). Preluat la 21 august 2013. Arhivat din original la 4 iulie 2013.
  • brian d foy. Noțiuni introductive cu Moose  // Revizuirea Perl. - iulie 2010. - Emisiune. 5.3 . Arhivat din original pe 5 decembrie 2013.

Link -uri