Dar vieno analitiko svetainė

Petras Kudaras

Perlo objektai

Sesija labai užimtas metas. Bet kartu tuo pačiu metu vyksta ir šiaip daug dalykų ir netgi retokai būnu prie kompiuterio. Kaip matau kai kurie (o ypač Nightblade) jau sunerimę, kad aš dingęs arba perėjęs į PHP stovyklą. Tai vat: nė velnio.

Šiandien (tiksliau vakar, bet paskui taip išėjo, kad su viena mergina klaidžiojau po miškus, o paskui šiek tiek gėriau su mr2, perl ir Neska, tad Perlui neliko laiko) sumąsčiau, kad parašysiu apie Perlo objektus. Kiekvienas Perl programuotojas pereina atitinkamas stadijas, o jose iš pradžių susidomi objektais, paskui pradeda bjaurėtis jais (nes jie šiek tiek kitokie nei kitose kalbose) o paskui pradeda suprasti, kad Perlo objektai yra labai geri ir geresni nei bet kur kitur. Pagal šias programuotojo evoliucijos stadijas, aš esu toje „besižavinčių“ stovykloje.

Perlo objektai įdomūs ta prasme, kad jie iš tiesų nėra objektai. Tai dažniausiai būna asociatyvūs masyvai, kurie netyčia žino kokiai klasei jie priklauso. Toks genialus paprastumas. Objekto konstruktoriuje pagrindinį vaidmenį vaidina funkcija bless (Taip, palaiminti. Larry Wall labai religingas žmogus, o pasižiūrėjus į perlmonks irgi surasit krūvas Kristaus pasekėjų). Štai paprasčiausias konstruktorius, kuris grąžina tuščią objektą:

sub naujas { bless {}, $_[0] }

Perlo objekinėje sistemoje nėra tokių dalykų kaip privatūs ar vieši kintamieji (na kaip… iš tikrųjų viskas įmanoma. Žaidžiant su my ir referencais galima daryt stebuklus, o kodas vis tiek bus 10 kart trumpesnis už Java ;) Objektinio perlo principas yra toks: „programavimo kalba neturi nurodinėti programuotojui ar jis nori pasiekti privačius kintamuosius ar ne. Perlas tikisi kad programuotojas neis į objekto vidų todėl kad jis gerbia tą objektą, o ne todėl kad jei jis ten užsuks tai jį nušaus“. Su statiniais metodais ir kintamaisiais viskas Perle paprasta. Štai pilnas objektinio programavimo pavyzdukas Perlu, kuriame objektas yra Programeris, jame yra statinis metodas kiek, statinis kintamasis $kiekis, konstruktorius ir vienas paprastas metodas.

package Programeris;

sub naujas {
        $Programeris::kiekis++;
        bless $_[1], $_[0];
}
sub kiek   { $Programeris::kiekis    }
sub vardas { $_[0]->{vardas} }

package main;
my $moxlius = naujas Programeris({vardas => 'Petras', 'pravarde' => 'moxliukas'});
print "Sukurta objektu: " . Programeris::kiek . "\n";
my $pukis = naujas Programeris({vardas => 'Juozas', 'pravarde' => 'pukomuko'});
print "Sukurta objektu: " . Programeris::kiek . "\n";
print "Pukomuko vardas: " . $pukis->vardas;

Visa tai atspausdina:

Sukurta objektu: 1
Sukurta objektu: 2
Pukomuko vardas: Juozas

Vienintelis skirtumas tarp statinių ir paprastų dalykų yra tas, jog statiniams metodams ir kintamiesiems naudojamas ::, o paprastiems ->.