Moose: Porovnání verzí

Z Wikiverzity
Smazaný obsah Přidaný obsah
Kychot (diskuse | příspěvky)
→‎Externí odkazy: Henry Van Styn
Kychot (diskuse | příspěvky)
Řádek 15: Řádek 15:


== Externí odkazy ==
== Externí odkazy ==
* Linuxsoft.cz – Jiří Václavík (2005–2011): 149dílný seriál [http://www.linuxsoft.cz/article_list.php?id_kategory=210 Perl]:
* [http://www.linuxsoft.cz Linuxsoft.cz] – Jiří Václavík (2005–2011): 149dílný seriál [http://www.linuxsoft.cz/article_list.php?id_kategory=210 Perl]:
** [http://www.linuxsoft.cz/article.php?id_article=1683 Perl (107) - Moose - moderní objektový systém]
** [http://www.linuxsoft.cz/article.php?id_article=1683 Perl (107) - Moose - moderní objektový systém]
** [http://www.linuxsoft.cz/article.php?id_article=1687 Perl (108) - Moose - základní vlastnosti]
** [http://www.linuxsoft.cz/article.php?id_article=1687 Perl (108) - Moose - základní vlastnosti]
** [http://www.linuxsoft.cz/article.php?id_article=1688 Perl (109) - Moose - role]
** [http://www.linuxsoft.cz/article.php?id_article=1688 Perl (109) - Moose - role]
** [http://www.linuxsoft.cz/article.php?id_article=1701 Perl (110) - Moose - meta API]
** [http://www.linuxsoft.cz/article.php?id_article=1701 Perl (110) - Moose - meta API]
** [http://www.linuxjournal.com linuxjournal.com] – Henry Van Styn (2012-01-23): [http://www.linuxjournal.com/content/moose '''Moose''']
* [http://www.linuxjournal.com linuxjournal.com] – Henry Van Styn (2012-01-23): [http://www.linuxjournal.com/content/moose '''Moose''']


== Instalace ==
== Instalace ==

Verze z 30. 10. 2012, 15:31

Moose je objektový systém, vytvořený jako knihovna v Perlu na knihovnou Class::MOP. V podstatě vytváří určitý způsob myšlení (školu, anticipující Perl6), jak zacházet s objekty v Perlu (s objekty se zde jinak dá zacházet celkem volně).

Info

Související články

  • KiokuDB – persistentní objekty založené na Moose jsou transparentně ukládány pomocí různých databázových backendů

Externí odkazy

Instalace

Ubuntu

Při výběru balíku libmoose-perl budou nainstalovány i následující balíky:

  • libb-hooks-endofscope-perl (verze 0.08-1) bude nainstalován
  • libclass-load-xs-perl (verze 0.03-1) bude nainstalován
  • libdevel-globaldestruction-perl (verze 0.04-2) bude nainstalován
  • libdevel-partialdump-perl (verze 0.15-1) bude nainstalován
  • libeval-closure-perl (verze 0.06-1) bude nainstalován
  • libmoose-perl (verze 2.0401-1) bude nainstalován
  • libnamespace-clean-perl (verze 0.22-1) bude nainstalován
  • libsub-exporter-perl (verze 0.982-1) bude nainstalován
  • libsub-identify-perl (verze 0.04-1build2) bude nainstalován
  • libtask-weaken-perl (verze 1.03-1) bude nainstalován
  • libvariable-magic-perl (verze 0.47-1build1) bude nainstalován


Tutoriál

Sytému Moose je věnována kapitola Objects v knize Modern Perl#07. Objekty. Touto kapitolou je inspirován tento tutoriál. Poznamenejme, že direktivami

use utf8;
binmode STDOUT, ':utf8';

můžeme (pro legraci) používat i české názvy proměnných i s diakritikou (pro vážné programování bych to ale asi nedoporučoval).

Z nějakých důvodů to ale s diakritikou nefunguje v případě, že tak nazveme třídu; příkaz

package Kočka

vyvolá chybu:

Kočka is not a module name at /usr/lib/perl5/Class/MOP/Package.pm line 207.
BEGIN failed--compilation aborted at ./07.01Kocka.pl line 9.

Nejspíš se jedná o bug – viz Pragmas > utf8 až na konci: Bugs.

01. Konstruktory – stvoření koček

Tak tedy, vytvoříme si třídu koček, které umí mňoukat, a dvě její instance, Lízu a Mňauka, které pak z mňoukání vyzkoušíme. Ale ještě k terminologii, která je v objektovém programování celkem obvyklá:

  • Třída je v Perlu v podstatě to samé, co balík. Má to logiku, zpravidla definice tříd jsou i v jiném (např. knihovním) souboru *.pm, ale klidně mohou být i v tom samém souboru. Hlavně to ale znamená, že všechny proměnné tam jsou plně kvalifikované, tj. mají vlastní jmenný prostor, daný názvem třídy.
  • Konkrétní instance se vytvářejí pomocí konstruktoru new
  • metoda je funkce, asociovaná s třídou. Když se volá, má vždy nějaký invokant, se kterým metoda pracuje:
    • když vytváříme nový objekt, je tím invokantem jmé