Moose: Porovnání verzí

Přidáno 1 660 bajtů ,  před 9 lety
02. atributy
(→‎01: terminologie)
(02. atributy)
BEGIN failed--compilation aborted at ./07.01Kocka.pl line 9.
 
=== 01 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á:
** když voláme metodu u konkrétní instance, je tím invokantem ''tato instance''.
* ''Invokant'' se v Perlu předává funkci jakožto ''první argument''.
 
I když se nejedná o nějaký předpis jazyka Perl, jde o určitou konvenci, že jména tříd začínají velkými písmeny (třída je jakoby větší, protože může mít mnoho instatncí), zatímco jména instancí začínají malými písmeny, tedy je: ''Kocka líza''. (Je to přesně naopak než v češtině, angličtině i jiných jazycích, kde píšeme ''kočka Líza.) Pokud se nám to nelíbí, nemusíme samozřejmě tuto konvenci dodržovat.
 
<source lang='perl' line>
}
 
my $Lízalíza = Kocka->new();
my $Mňoukmňouk = Kocka->new();
 
$Lízalíza->mňau();
$Mňoukmňouk->mňau();
</source>
 
*11. Podprogram, přesněji řečeno ''metoda'' mňau, kde říkám, jak má libovolná kočka mňoukat.
*13. Uložíme invokant (tedy první parametr funkce) do proměnné $self.
*14. Tady konečně říkám, jak má kočka mňoukat.
*18.–19. Postupně vytvářím dvě instance koček, tedy dva konkrétní případy, kočky Lízu a Mňouka.
*21.-22. Vyzkouším si, jak mňoukají.
 
Výstup skriptu bude jednoduchý:
<pre>
Mňau!
Mňau!
</pre>
 
Někdo namítne, že je to nedokonalé, že Mňouk je kocour a ten že mňouká jinak. Námitka je na místě, časem zjistíme, že je možno vytvářet i různá pohlaví, která budou mňoukat jinak.
 
=== 02. Atributy ===
 
Když už vytváříme takovéto kočky, bylo by dobré, aby samy kočky věděly, jak se jmenují a mohly se nám na požádání třeba představit. Tedy všechny kočky (tj. třída koček) by měla mít nějaký šuplíček, kam by se ukládalo jméno té které kočky. A pak třeba její věk (kolik je jí let) a jestli třeba nemá nějakou dietu (třeba vytváříme databázi pacientů v kočičí nemocnici).
<source lang='perl'>
</source>
 
Tyto tzv. ''atributy'' se v ''Mose'' přikládají funkcí <tt>has()</tt>; zde je možné rovněž určit, jestli je možné tento atribut dále měnit a jaký typ proměnné bude použit, což představuje určitý typ kontroly nad tím, jak budeme moci s objektem nakládat.
<source lang='perl'>
</source>
 
<source lang='perl' line>
#! /usr/bin/perl
</source>
 
Modern::Perl;
<source lang='perl'>
use utf8;
</source>
binmode STDOUT, ':utf8';
 
package Kocka
<source lang='perl'>
{
</source>
use Moose;
 
has 'jméno', is=>'ro', isa=>'Str';
<source lang='perl'>
has 'věk', is=>'rw', isa=>'';
has 'dieta', is=>'rw';
}
 
my $tlusťoch = Kocka->new(jméno=>'Tlusťoch', věk=8, dieta=>'produkty moře');
 
say tlusťoch->jméno(), ', ', tlusťoch->věk(), 'let, dieta: ', tlusťoch->dieta();
 
tlusťoch->dieta( 'neslaná');
say tlusťoch->jméno(), ', ', tlusťoch->věk(), 'let, nová dieta: ', tlusťoch->dieta();
</source>
 
<source lang='perl'>
</source>
 
 
[[Kategorie:Perl]]
11 978

editací