Moose (Perl)

Elch ist eine Erweiterung des Objektsystems der Perl Programmiersprache. Sein angegebener Zweck[1] ist, moderne objektorientierte Sprachmerkmale in Perl 5 zu bringen und zu machen Objektorientierte Perl-Programmierung konsequenter und weniger mühsam.

Merkmale

Elch ist auf der Klasse aufgebaut :: mop, a MetaObject -Protokoll (a.k.a. mop). Mit dem Mopp sorgt der Elch komplett Selbstbeobachtung für alle Elchkursunterricht.

Klassen

Elch ermöglicht es einem Programmierer, erstellen Klassen:

  • Eine Klasse hat null oder mehr Attribute.
  • Eine Klasse hat null oder mehr Methoden.
  • Eine Klasse hat null oder mehr Superklassen (A.K.A. Elternklassen). Eine Klasse Erben Aus seiner Superklasse (e). Elchträger Mehrfacherbe.
  • Eine Klasse hat null oder mehr Methodenmodifikatoren. Diese Modifikatoren können sich auf ihre eigenen Methoden, Methoden anwenden, die von ihren Vorfahren oder Methoden geerbt werden, die durch Rollen bereitgestellt werden.
  • Eine Klasse macht Null oder mehr Rollen (auch als bekannt als als Züge in anderen Programmiersprachen).
  • Eine Klasse hat eine Konstrukteur und ein Zerstörer.
  • Eine Klasse hat eine Metaklas.

Attribute

Ein Attribut ist eine Eigenschaft der Klasse, die sie definiert.

Rollen

Rollen in Elch basieren auf Züge. Sie führen eine ähnliche Aufgabe wie Mischungen, aber sind horizontal und eher erbelt. Sie sind auch etwas wie SchnittstellenAber im Gegensatz zu einigen Implementierungen von Schnittstellen können sie eine Standardimplementierung bereitstellen. Rollen können sowohl auf einzelne Instanzen als auch auf Klassen angewendet werden.

  • Eine Rolle hat Null oder mehr Attribute.
  • Eine Rolle hat null oder mehr Methoden.
  • Eine Rolle hat null oder mehr Methodenmodifikatoren.
  • Eine Rolle hat keine oder mehr erforderlichen Methoden.

Erweiterungen

Es gibt eine Reihe von Elch -Erweiterungsmodulen an CPAN. Ab September 2012 Es gibt 855 Module in 266 Verteilungen im Moosex -Namespace.[2] Die meisten von ihnen können optional mit der Aufgabe installiert werden :: Moose -Modul.[3]

Beispiele

Dies ist ein Beispiel für eine Klasse Punkt und seine Unterklasse Point3d:

Paket Punkt;verwenden Elch;verwenden Karpfen;hat 'x' => (ist ein => 'Num', ist => 'rw');hat "y" => (ist ein => 'Num', ist => 'rw');Sub klar { mein $ sich selbst = Wechsel; $ self>x(0); $ self>y(0); }Sub einstellen { @_ == 3 oder Krächzen "Schlechte Anzahl von Argumenten"; mein $ sich selbst = Wechsel; mein ($ x, $ y) = @_; $ self>x($ x); $ self>y($ y); }Paket Point3d;verwenden Elch;verwenden Karpfen;erweitert 'Punkt';hat 'z' => (ist ein => 'Num', ist => 'rw');nach 'klar' => Sub { mein $ sich selbst = Wechsel; $ self>z(0); };Sub einstellen { @_ == 4 oder Krächzen "Schlechte Anzahl von Argumenten"; mein $ sich selbst = Wechsel; mein ($ x, $ y, $ z) = @_; $ self>x($ x); $ self>y($ y); $ self>z($ z); }

Da ist ein neues einstellen() Methode in der Point3d Klasse also die gleichnamige Methode in der definierten Punkt Die Klasse wird im Fall von nicht aufgerufen Point3d Instanzen. Das klar() Die Methode dagegen wird nicht ersetzt, sondern in der Unterklasse erweitert, sodass beide Methoden in der richtigen Reihenfolge ausgeführt werden.

Dies ist der gleiche mit dem gleichen Moosex :: Deklar Verlängerung:

verwenden Moosex :: Deklar;Klasse Punkt { hat 'x' => (ist ein => 'Num', ist => 'rw'); hat "y" => (ist ein => 'Num', ist => 'rw'); Methode klar { $ self>x(0); $ self>y(0); } Methode einstellen (Num $ x, Num $ y) { $ self>x($ x); $ self>y($ y); }}Klasse Point3d erweitert Punkt { hat 'z' => (ist ein => 'Num', ist => 'rw'); nach klar { $ self>z(0); } Methode einstellen (Num $ x, Num $ y, Num $ z) { $ self>x($ x); $ self>y($ y); $ self>z($ z); }}

Siehe auch

Verweise

  1. ^ "Elch - ein postmodernes Objektsystem für Perl". Abgerufen 2017-03-06.
  2. ^ Elchverlängerungen auf CPAN
  3. ^ Aufgabe :: Elch

Externe Links