[Cascavel-pm] Com que Class::* eu vou
Igor Sutton Lopes
igor.sutton em gmail.com
Sábado Março 31 03:21:06 PDT 2007
On 2007/03/30, at 19:15, Eden Cardim wrote:
> Hmm, acho que isto está sujeito a debate. Código também é informação,
> apesar de ser executável. Alguém poderia criar uma classe e instanciar
> um objeto sem usar informação sobre o objeto, para implementar, por
> exemplo, os padrões de projeto Template Method e Strategy. Esses dois
> padrões caem nesse caso que você falou, porém o uso deles favorece
> bastante a extensibilidade do código.
Hrm... Estou lendo agora a repeito do Template Method :-) Concordo
com você, mas você tem que lembrar que a maioria das pessoas que
escrevem o tipo de código descrito acima não conhecem isto. Pelo que
eu entendi, no Template Method todos os métodos não abstratos são
geridos pela classe Template, e todos os que herdam da mesma provêm
informações para cálculos e operações pelo Template. Eu quis foi
exemplificar as classes multifunções utilitárias -facilmente
identificadas através do namespace Util :-).
Agora sobre o Strategy -lendo :-). Bom, pelo que eu entendi, ele
serve prá modificar algorítimos em tempo de execução. Algo do tipo,
criar um objeto de compactação e passar o contexto -zip, gz, etc-
para modificar o comportamento do sistema. Certo, neste caso é útil
também, mas até que ponto o contexto é acoplado na instancia do
objeto que utiliza o Strategy pattern?
Me corrija se eu estiver errado:
<code>
package Archiver;
sub new {
my ($class) = @_;
my $self = {};
bless $self, $class;
return $self;
}
sub compress {
my ($self, $strategy) = @_;
$strategy->compress($self);
...
}
sub add {
...
}
sub list {
...
}
package Archiver::Zip;
sub new {
my ($class) = @_;
my $self = {};
bless $self, $class;
return $self;
}
sub compress {
my ($self, $archiver) = @_;
# faz o necessário para comprimir os dados do Archiver
my @files = $archiver->list();
...
}
package main;
my $archiver = Archiver->new();
$archiver->add('/tmp/somefile.txt');
$archiver->compress(Archiver::Zip->new());
</code>
Deixei escapar alguma coisa? :-)
--
Igor Sutton
igor.sutton em gmail.com
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070331/953402f1/attachment-0001.html
-------------- Próxima Parte ----------
Um anexo não texto foi limpo...
Nome : PGP.sig
Tipo : application/pgp-signature
Tam : 186 bytes
Descr.: This is a digitally signed message part
Url : http://mail.pm.org/pipermail/cascavel-pm/attachments/20070331/953402f1/attachment-0001.bin
Mais detalhes sobre a lista de discussão Cascavel-pm