LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (107) - Moose - moderní objektový systém

Perl Standardní objektový systém Perlu 5 dnes je již poměrně zastaralý a proto by mohlo být zajímavé poohlédnout se po alternatovách. Tou nejznámější je Moose. Článek je úvodem do studia tohoto tématu a přináší základní myšlenky práce s Moose.

7.4.2010 00:00 | Jiří Václavík | Články autora | přečteno 8013×

Perl je jazyk, umožňující objektově-orientovaný způsob programování již od verze 5.000 z roku 1994. I proto má velmi daleko k dnešním objektově-orientovaným jazykům. Cílem Moose (v angličtině označuje moose losa nebo někdy jeden z jeho druhů) je přiblížení Perlu moderním objektovým jazykům. Moose je postaven na základech Class::MOP.

Moose samotný neumí o tolik více než čistý Perl. Za uživatele však odvede spoustu práce a výsledný kód je kratší a přehlednější. V této minisérii se například vůbec nesetkáme s funkcí bless, budeme psát podstatně méně metod než dosud, budeme srozumitelněji deklarovat atributy a neuvidíme žádné odkazy.

Před studiem Moose je vhodné se alespoň zběžně podívat, jak funguje standardní objektový systém v Perlu. Bude pak snažší pochopit práci s Moose.

Moose je řešením objektového systému pro Perl 5. V připravovaném Perlu 6 se počítá s novým modelem, kde budou pro OOP nová klíčová slova.

Instalace

Jediná věc, která je potřebná před používáním Moose je stažení a nainstalování modulu z CPANu. To tradičně zajistí následující příkaz.

$ cpan Moose

Moose a Perl

Moose exportuje funkce, které můžeme používat podobně jako klíčová slova jazyka (a tak je také budeme dále nazývat). Za chvíli se s některými z nich seznámíme.

Vytvoření objektu

Zopakujme si nejprve, jak jsme vytvářeli objekty v čistém Perlu. Pokaždé jsme definovali nějaký balíček a v něm jsme vytvořili konstruktor - tedy metodu s názvem new. Kód začátku objektového modulu mohl vypadat takto.

package PoStaru;

sub new {
       my $trida = shift;
       my $objekt = {};
       bless $objekt, "PoStaru";
       return $objekt;
}

Co když teď použijeme Moose? Zde podobnou věc uděláme snadno.

package PomociMoose;
use Moose;

Je vidět, že kódu je v této fázi u Moose mnohem méně. Konkrétně stačí dva řádky. Moose si již vytvoří metodu new sám (přesněji řečeno ji zdědí z Moose::Object, ze které nyní budou dědit všechny naše třídy). Vzápětí uvidíme, jak se s ní pracuje.

Poznamenejme také, že Moose navíc automaticky zapne režimy warnings a strict.

Atributy a jednoduché metody

V čistém Perlu jsou atributy většinou uloženy v hashi. To je jednoduché a poměrně efektivní. Problém později bývá v tom, že je obvykle třeba definovat řadu metod, které parametry například pouze vracejí nebo přenastavují. Samotný hash to neobstará, a tak je na řadě objektový systém.

Tady by se většina uživatelů asi zeptala, zda to nejde jednodušeji a neexistuje něco jako automatické vytvoření takových metod. Standardní objektový systém jejich automatické vytvoření neumožňuje. Avšak s použitím externích modulů to samozřejmě možné je.

Správa atributů pomocí modulu Class::Accessor

Můžeme kupříkladu využít modulu Class::Accessor, který nám snadno vytvoří potřebné metody a atributy.

Podívejme se na jednoduchý příklad. Stačí nastavit Class::Accessor jako rodiče naší třídy a pomocí metody mk_accessors vytvořit atributy a metody, které se použijí k nastavení nebo získání hodnot. Díky tomu můžeme definovat všechny metody a atributy jediným řádkem.

package MojeTrida;
use base qw(Class::Accessor);

MojeTrida->mk_accessors(qw(nazev cena info));

$sluzba = MojeTrida->new();

$sluzba->nazev("strihani vlasu");
$sluzba->cena(100);
$sluzba->info("bla bla bla");

print $sluzba->get("nazev");
print $sluzba->get(qw(nazev cena info));

Co vše Class::Accessor dokáže, se lze dočíst v dokumentaci. Je toho dost. Stejně jako Class::Accessor ale dokáže s atributy pracovat Moose.

Atributy pomocí Moose, typová kontrola

Nyní se už budeme věnovat systému Moose. Podívejme se nejprve, jak pracuje s atributy ten.

Atribut se vytváří pomocí klíčového slova has, kterému předáme dvě hodnoty. Těmi jsou požadované jméno atributu a hash s danou strukturou. Touto strukturou se budeme ještě dále zabývat.

Zde je pro začátek jednoduchý příklad, který vytvoří třídu a tři atributy.

package MojeTrida;
use Moose;

has "nazev" => (
    is => "rw",
    isa => "Str"
);

has "cena" => (
    is => "rw",
    isa => "Int"
);

has "info" => (
    is => "rw",
    isa => "Str"
);

Hash parametrů může obsahovat řadu různých položek. My jsme zatím použili pouze dvě. is určuje, zda má být umožněno do atributu zapisovat (tj. read-write; v takovém případě se nastavuje hodnota rw) nebo nikoliv (tj. read-only; píše se jako ro).

Pomocí isa se zapíná typovou kontrolu. Lze použít například hodnoty Str, Num, Bool, HashRef. Pokud hodnotou atributu má být objekt, můžeme zde vepsat i jméno třídy. To bychom využili například pro atribut uchovávající datum a čas posledního přístupu k naší stránce.

has "posledni_pristup" => (
    is => "rw",
    isa => "DateTime"
);

Pro další možnosti okolo typů jako třeba co všechno za typy lze zadávat, jak definovat nové typy nebo subtypy pomocí regulárních výrazů, je užitečné nahlédnout do dokumentace.

Je dobré si uvědomit, že has je obyčejná funkce. Proto s ni podle toho můžeme zacházet. Předchozí kód bychom mohli přepsat nějak takto.

for (qw(nazev cena info)) {
  has $_ => (is => "rw", isa => zjisti_typ($_));
}

Také je možné nastavit více atributů pomocí jednoho volání has. Zde je opět příklad.

has ["nazev", "info"] => (is => "rw", isa => "Str");

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

11.2.2018 23:11 /Petr Ježek
Hledáte lehký a rychlý prolížeč PDF souborů? Pokud vás již omrzelo čekat na načítání stránek či jiné nešvary, zkuste xreader.
Přidat komentář

11.2.2018 20:35 /Redakce Linuxsoft.cz
Třetí ročník odborné IT konference na téma Cloud computing v praxi proběhne ve čtvrtek 1. března 2018 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 16 hod. odpoledne. Konference o trendech v oblasti cloud computingu nabídne i informace o konkrétních možnostech využívání cloudů a řešení vybraných otázek souvisejících s provozem IT infrastruktury.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze