[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