|
|
privatni data u objektu
|
3.10.2007 16:54
Roman Vašíček
|
Perl narozdíl od některých jiných jazyků umožňuje přistupovat k atributům třídy z programu i bez přístupové metody.
To nemusi byt uplne pravda. Zalezi totiz na tom jak vlastni objekt vytvarite. Pokud je zapotrebi aby data byla opravdu privatni a nebylo k nim mozne pristupovat jinak, nez pres metody objektu, muzeme pouzit tzv. Inside-out objekty a uzavery.
Zde je jednoduchy priklad modulu, u nejz se primo k atributum neostanete a je nutne pouzit metodu objektu.
package XYZ;
use strict; # pro jednoznacnou identifikaci objektu
# (pokud nechci pouzivat externi moduly)
sub ident {
my $ret;
return 0 if !ref($_[0]);
"$_[0]" =~ /\(([^)]+)\)/;
eval "\$ret = $1;";
return $ret;
}
{
my %value_of; sub new {
my ($class, $param) = @_;
my $new_object = bless \do{my $anon_scalar}, $class;
$new_object->set_value($param) if ($param);
return $new_object;
}
sub get_value {
my ($self) = @_;
return $value_of{ident $self};
}
sub set_value {
my ($self, $new_value) = @_;
my $old = $self->get_value();
$value_of{ident $self} = $new_value;
return $old;
}
}
1; |
|
|
|
|
KOMENTARZE
|
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
|
|
Szukanie oprogramowania
|
©Pavel Kysilka - 2003-2024 |
maillinuxsoft.cz | Design:
www.megadesign.cz
|