LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> 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 10805×

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ů

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

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

> Poslední diskuze

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

Více ...

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