Aceasta este comanda PDL::Objectsp care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
PDL::Obiecte -- Orientarea obiectelor, ce este și cum se exploatează
DESCRIERE
Acest lucru mai trebuie scris corect. [De asemenea, există un motiv bun pentru care nu recomandăm
stocarea datelor suplimentare despre obiect în hash-ul antetului?]
Moştenire
Există în esență două motive pentru subclasificarea piddle-urilor. Primul este pur și simplu că tu
vrei să poți să-ți folosești propriile rutine, cum ar fi
$piddle->ceva()
dar nu vreau să stric spațiul de nume PDL (un obiectiv demn, într-adevăr!). Celălalt este că
doriți să oferiți o gestionare specială a unor funcții sau mai multe informații despre date
piagul contine. În primul caz, puteți face cu
pachet BAR;
@ISA=qw/PDL/;
sub foo {my($this) = @_; lăutar;}
pachet principal;
$a = PDL::pdl(BAR,5);
$a->foo();
Cu toate acestea, deoarece un obiect PDL este o referință opacă la o structură C, nu este posibil
extindeți clasa PDL cu, de exemplu, date suplimentare prin subclasare. Pentru a ocoli această problemă
PerlDL are suport încorporat pentru a extinde clasa PDL prin intermediul are o relatie pentru binecuvantat
hashuri. Puteți obține ARE O comporta-te ca IS-A pur și simplu prin faptul că atribuiți obiectul „PDL”.
la atributul numit PDL și redefiniți metoda initialize().
pachet FOO;
@FOO::ISA = qw(PDL);
sub initialize {
my $class = shift;
my $self = {
creation_time => time(), # extensie necesară :-)
PDL => nul, # folosit pentru a stoca obiectul PDL
};
binecuvântează $self, $clasa;
}
Toți constructorii PDL vor apela initialize() pentru a vă asigura că extensiile dvs. sunt adăugate de
toate constructori PDL automat. Atributul „PDL” este folosit de perlDL pentru a stoca
Obiectul PDL și toate metodele PDL utilizează acest atribut automat dacă sunt apelate cu a
referință hash binecuvântată în loc de un obiect PDL (un scalar binecuvântat).
Nu uitați că, dacă subclasați o clasă care este subclasată dintr-un piddle, trebuie să o faceți
sunați la SUPER::inițializați.
AI NEVOIE DE LUCRURI DESPRE COD REF!!
Exemple
Puteți găsi câteva exemple simple de subclasare PDL în cazul de testare al distribuției PDL
fișiere. Căutați în „t/subclass2.t”, „t/subclass3.t”, etc.
producție Creare automată si Subclasat Obiecte
Pentru funcțiile PDL în care rezultatul este creat și returnat, PDL va apela fie
metoda „inițializare” sau „copiere” a obiectului subclasat pentru a crea obiectul de ieșire. (Vedea
PDL::Indexare pentru o discuție despre Crearea automată a ieșirii.) Acest comportament este rezumat ca
urmează:
·
Pentru simplu funcții, definite ca având o semnătură a
func(a(), [o]b() )
PDL va apela $a->copy pentru a crea obiectul de ieșire.
În spiritul filozofiei Perl de a face Uşor Interese Uşor, Acest comportament permite
Obiectele PDL-subclasate să fie scrise fără a fi nevoie să supraîncărcați multe PDL simple
funcții din această categorie.
Fișierul t/subclass4.t din PDL Distribution testează acest comportament. Vezi acel fișier
pentru un exemplu.
·
Pentru alte funcții, PDL va apela $class->initialize pentru a crea obiectul de ieșire. Unde
$class este numele clasei primului argument furnizat funcției.
Pentru aceste cazuri mai complexe, este dificil să ghiciți obiectele subclasate
designer pentru a ști dacă o „copie” sau o „inițializare” este potrivită. Deci, pentru aceste cazuri,
$class->initialize este apelat implicit. Dacă acest lucru nu este potrivit pentru dvs., supraîncărcați
funcția din subclasa dvs. și faceți tot ce este adecvat este funcția supraîncărcată
cod.
Utilizați PDL::Objectsp online folosind serviciile onworks.net