"polymorfni" objekt
Jan Kasprzak
kas na fi.muni.cz
Středa Duben 20 21:46:27 CEST 2011
Dobry vecer,
predstavte si, ze mate objekt, ktery je dostupny ve vsech programech
nejakeho systemu (treba $r cili Apache2::RequestRec nebo $q cili CGI
ve webovych aplikacich). A ted chcete, aby ten objekt mel nejakou
sadu metod, pricemz v kazdem programu potrebujete jen nejakou omezenou
podmnozinu vsech dostupnych metod.
Muzete vsechny metody dat do jednoho modulu a proste jen pouzivat
ty ktere potrebujete. Problem je, ze kdyz pak napisete
time perl -MMoje::CGI -e 1
tak to trva dve vteriny.
Cili dotaz je, jakou metodou byste dosahli toho, aby na zacatku
programu misto
my $q = Moje::CGI->new();
bylo mozno rict neco jako
my $q = Moje::CGI->new(isa => [ qw(
Moje::CGI::Autentizovane
Moje::CGI::DBI
Moje::CGI::Tiskarny
...
) ]);
a vysledne $q melo pak dostupne metody z tech uvedenych modulu.
Nejlepe jeste tak, abych mohl definovat i zavislosti mezi
jednotlivymi sub-moduly - napriklad ze bych treba v Moje/CGI/Tiskarny.pm mohl
rict neco jako ze tento modul ma zaroven nacitat modul Moje::CGI::TeX,
a ve vyslednem $q by pak byly dostupne metody nejen z Moje::CGI::Tiskarny,
ale i z Moje::CGI::TeX, aniz bych to specifikoval v konstruktoru.
Resenim je asi nejak si hrat s @ISA, ale vsude se pise ze na @ISA nemam
sahat a radsi pouzivat base.pm. Taky ale tohle vyzaduje volani
"use Moje::CGI::Neco" uvnitr retezcoveho eval "" (je-li cilem aby se
nekompilovalo pokazde vsechno), coz nevim jak je rychle.
Jak byste tohle resili?
-Y.
--
| Jan "Yenya" Kasprzak <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839 Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/ Journal: http://www.fi.muni.cz/~kas/blog/ |
Please don't top post and in particular don't attach entire digests to your
mail or we'll all soon be using bittorrent to read the list. --Alan Cox
Další informace o konferenci Perl