Moose (Perl) - Moose (Perl)
![]() | Tento článek obsahuje seznam obecných Reference, ale zůstává z velké části neověřený, protože postrádá dostatečné odpovídající vložené citace.Květen 2010) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Los je rozšíření objektového systému Perl programovací jazyk. Je to stanovený účel[1] je přinést moderní objektově orientované jazykové funkce do Perlu 5 a vytvořit objektově orientované programování v Perlu důslednější a méně zdlouhavé.
Funkce
Moose je postaven na vrcholu Class :: MOP, a metaobjektový protokol (také znám jako MOP). Pomocí MOP poskytuje Moose kompletní introspekce pro všechny třídy využívající Moose.
Třídy
Moose umožňuje programátorovi vytvářet třídy:
- Třída má nulu nebo více atributy.
- Třída má nulu nebo více metody.
- Třída má nulu nebo více nadtřídy (aka rodičovské třídy). Třída dědí ze své nadtřídy. Moose podporuje vícenásobné dědictví.
- Třída má nula nebo více modifikátorů metod. Tyto modifikátory lze použít na jeho vlastní metody, metody zděděné od jejích předků nebo metody poskytované rolemi.
- Třída má nulovou nebo více rolí (také známých jako rysy v jiných programovacích jazycích).
- Třída má konstruktor a a destruktor.
- Třída má metaclass.
Atributy
Atribut je vlastnost třídy, která jej definuje.
- Atribut má vždy název a může mít řadu dalších definujících charakteristik.
- Vlastnosti atributu mohou zahrnovat příznak pro čtení / zápis, typ, přístupová metoda jména, delegace, a výchozí hodnota a líná inicializace.
Role
Role v Moose jsou založeny na rysy. Vykonávají podobný úkol jako mixiny, ale jsou složeny spíše horizontálně než zděděně. Jsou také trochu jako rozhraní, ale na rozdíl od rozhraní mohou poskytnout výchozí implementaci. Role lze aplikovat na jednotlivé instance i třídy.
- Role má nula nebo více atributů.
- Role má nula nebo více metod.
- Role má nula nebo více modifikátorů metod.
- Role má nulové nebo více požadovaných metod.
Rozšíření
Existuje řada rozšiřujících modulů Moose CPAN. Od září 2012[Aktualizace] ve jmenném prostoru MooseX je 855 modulů v 266 distribucích.[2] Většinu z nich lze volitelně nainstalovat s modulem Task :: Moose.[3]
Příklady
Toto je příklad třídy Směřovat
a jeho podtřída Point3D
:
balík Směřovat;použití Los;použití Kapr;má 'X' => (je => 'Num', je => 'rw');má 'y' => (je => 'Num', je => 'rw');sub Průhledná { můj $ já = posun; $ vlastní>X(0); $ vlastní>y(0);}sub nastaven na { @_ == 3 nebo kuňkat „Špatný počet argumentů“; můj $ já = posun; můj ($ x, $ r) = @_; $ vlastní>X($ x); $ vlastní>y($ r);}balík Point3D;použití Los;použití Kapr;rozšiřuje 'Směřovat';má 'z' => (je => 'Num', je => 'rw');po 'Průhledná' => sub { můj $ já = posun; $ vlastní>z(0);};sub nastaven na { @_ == 4 nebo kuňkat „Špatný počet argumentů“; můj $ já = posun; můj ($ x, $ r, $ z) = @_; $ vlastní>X($ x); $ vlastní>y($ r); $ vlastní>z($ z);}
Je tu nový nastaven na()
metoda v Point3D
třídy, takže metoda stejného jména definovaná v Směřovat
třída není vyvolána v případě Point3D
instance. The Průhledná()
metoda na druhé straně není nahrazena, ale rozšířena v podtřídě, takže obě metody jsou spuštěny ve správném pořadí.
Totéž platí pro použití MooseX :: Prohlásit
rozšíření:
použití MooseX :: Prohlásit;třída Směřovat { má 'X' => (je => 'Num', je => 'rw'); má 'y' => (je => 'Num', je => 'rw'); metoda Průhledná { $ vlastní>X(0); $ vlastní>y(0); } metoda nastaven na (Num $ x, Num $ r) { $ vlastní>X($ x); $ vlastní>y($ r); }}třída Point3D rozšiřuje Směřovat { má 'z' => (je => 'Num', je => 'rw'); po Průhledná { $ vlastní>z(0); } metoda nastaven na (Num $ x, Num $ r, Num $ z) { $ vlastní>X($ x); $ vlastní>y($ r); $ vlastní>z($ z); }}
Viz také
- Objektový systém Raku což je inspirace pro Moose
- Joose, a JavaScript rámec inspirovaný Mooseem
- Katalyzátor, rámec webových aplikací využívající Moose
Reference
- ^ „Moose - postmoderní objektový systém pro Perl“. Citováno 2017-03-06.
- ^ Moose rozšíření na CPAN
- ^ Úkol :: Los