Ce sunt metaclasele în perl

Ce este metaclasses. Pentru ce sunt metaclasses? Ce este un protocol meta-obiect. Ce este Clasa :: MOP. Ce este folosit pentru Class :: MOP.

Ce sunt metaclasele?

În OOP, o metaclașă este o clasă ale cărei instanțe nu sunt obiecte, ca de obicei, ci clase. Așa cum o clasă normală definește comportamentul unor obiecte, metaclasele definesc comportamentul unor clase și instanțele lor.







Nu toate limbile de programare care acceptă metaclasele de sprijin ale paradigmei OOP. În același timp, nivelul de sprijin pentru metaclase pentru fiecare limbă poate fi destul de diferit. Implementarea protocolului metaobiect diferă, de asemenea, de principiile care guvernează interacțiunea obiectelor, clasei și metaclaselor.

Printre limbile cele mai populare, suporturile metaclaselor: Obiectiv-C, Python, Perl și Ruby.

Uneori ideea de metaclase este comparată cu modelul de design "Fabrica".

Pentru ce sunt metaclasses?

Ideea de metaclase apare în limbile de programare orientate pe obiecte. Cu ajutorul său, este implementat un design complet recursiv al sistemului. Este convenabil atunci când lucrați cu ierarhiile de clasă.

Pentru Perl, în forma sa pură, ideea de metaclase este absolut străină. Deși interesant în ceea ce privește arhitectura și implementarea.

Ce este un protocol meta-obiect?

Un protocol meta-obiect este un mecanism pentru definirea și utilizarea noilor metaclase.

Un protocol meta-obiect definește un set de funcții care conțin metode pentru clase. Programarea la nivelul protocolului meta-obiect este definirea noilor clase, împreună cu metodele pentru aceste clase.

Metaclasses în perl

În Perl pur 5, concepte cum ar fi pachetul, clasa, metoda, constructorul nu au diferențe și limite distincte. Conceptul de atribut lipsește cu totul.

Implementarea metaclasses în Perl folosind protocolul metaobject, care este reprezentat de sistemul Class :: MOP. Clasa :: MOP și metaclasses sunt utilizate pe scară largă populare Moose (definiția oficială: «Moose - extensia pentru Perl 5, simplifica punerea în aplicare a OEP,“ Eu nu sunt de acord cu faptul că Moose există ceva mai ușor cred, totul este complet opus ..) .

Clasa :: MOP definește clar conceptele de clase, metode, pachete, adaugă conceptul de atribut. Moose, datorită clasei :: MOP, aduce OOP în perl la standardele general acceptate.

Ie de fapt, clasa :: MOP este mai mult decât o modalitate de a crea metaclase.







Protocolul Metaobject în perl, Clasa :: MOP

Protocolul Metaobject creează concepte abstracte de clase, metode, obiecte, atribute. Aceste abstracții pot fi folosite pentru a verifica și controla acele elemente ale sistemului pe care le descriu.

Pentru o persoană nepregătită, tot ceea ce este scos sună ca un nonsens complet. Prin urmare, este mai bine să începeți să dezasamblați metaclasele și protocolul meta-obiect folosind exemple.

Protocolul meta-obiect din perl este implementat de modulul Class :: MOP și include 4 subprotocoale:

  • Protocol de clasă - instrument de gestionare a clasei. Este implementat prin Class :: MOP :: Class.
  • Protocolul atributului - Implementează gestionarea atributelor de clasă. Este implementat prin Class :: MOP :: Attribute. Poate fi extins prin moștenire.
  • Protocolul de metode - Un instrument de lucru cu metodele sistemului obiect. Este implementat prin metoda :: MOP :: Metoda.
  • Protocolul protocolului - Oferă un anumit nivel de abstractizare pentru instanțierea obiectelor. Implementat prin Class :: MOP :: Instanță

Protocolul de protocol nu va fi luat în considerare astăzi.

Protocolul de clasă

Clasa :: MOP :: Clasa - clasa metaobiectelor. Acest protocol este partea cea mai mare și cea mai complexă a clasei :: MOP.

Clasa :: MOP :: Class este o subclasă a clasei :: MOP :: Module. Clasa :: MOP :: Module, la rândul său, este o subclasă de Clasă :: MOP :: Pachet. Protocolul de pachete oferă o abstracție pentru pachetele perl și metode de lucru cu spațiul de nume.

Obiectul creat va fi un obiect metaclass.

Dacă încercați să re-creați obiectul, atunci obțineți doar o referință la o instanță deja creată.

metodele de gestionare a succesiunii

Puteți obține o listă cu toate subclasele sau, dimpotrivă, deveniți moștenitorul unei clase. Metodele lucrează cu @ISA.

metode de lucru cu metodele de clasă

Puteți utiliza acest tip de metodă pentru a crea metode de clasă, a le șterge și a le modifica. Aceste metode în activitatea lor se vor referi la obiectele Class :: MOP :: Method.

metode de lucru cu atribute de clasă

Metodele vor funcționa cu obiecte de clasă :: MOP :: Atribut. Metodele sunt utilizate pentru a specifica, căuta, citi și șterge atributele de clasă.

metode de congelare

Aceasta este o oportunitate de a adăuga un cod pe care, atunci când apelați o metodă de clasă este executată înainte de execuție (înainte de modificatorul), după (după modificator) și în timpul executării codului principal (în jurul valorii de modificator).

Un exemplu de utilizare a Class :: MOP :: Class

Extinderea funcționalității unei clase existente

Clasa existentă, modul Meta.pm:

În acel moment, conceptul de metaclasuri a devenit destul de ușor de înțeles.

Protocolul atributului

Protocolul de atribut este invenția clasei :: MOP. Perl 5 nu acceptă atribute. Cu atât este mai important să înțelegeți ce este.

Atributul unei clase sau al unui obiect este o variabilă asociată cu clasa sau obiectul. Accesul la atribute se face prin numele lor. Aceste atribute sunt diferite de datele pe care le conține obiectul și accesul la acestea se face numai prin metodele obiectului.
Programatorul perl ridică în mod firesc întrebarea - am nevoie de ea? Răspunsul este că nu toată lumea folosește un limbaj atât de cool ca perl.

În unele limbi de programare orientate pe obiecte (de exemplu, în Java), nu există variabile globale. În acest caz, atributele de clasă reprezintă singura modalitate de stocare și utilizare a datelor globale.

Lucrul cu atributele din clasa :: MOP :: Class. în opinia mea, este urât și nu este convenabil. Iată un exemplu.

Fișier modul Meta4.pm:







Articole similare

Trimiteți-le prietenilor: