[SP-pm] Dúvidas em Perl.
Luis Motta Campos
luismottacampos at yahoo.co.uk
Tue Aug 5 15:17:56 PDT 2008
Viviane Oliveira wrote:
> Bom dia Luis! Desculpe estar escrevendo diretamente em seu email
> pessoal, mas eh q aqui vou me sentir mais a vontade, para alguns
> esclareciemtos.
Boa noite, Viviane Oliveira. Nenhum problema em me escrever em privado.
Espero que você não se incomode se eu responder para a lista dos
SPPMers, eu me sinto mais à vontade falando em público.
Você parece ser uma usuária muito nova de listas de discussão, ainda não
compreendeu a etiqueta da lista. Por isso eu estou sendo polido,
respondendo à sua mensagem e pedindo a você que não me faça perguntas em
privado, a não ser que você tenha uma boa razão para isso.
Eu não sou empregado dos Perl Mongers, tenho um trabalho /full/ /time/
como todo mundo aqui (bom, a maioria).
Eu faço isso por que eu gosto de ajudar. Dar suporte técnico público,
gratuito, e de boa qualidade é uma das minhas contribuições para o mundo
Open Source.
> Referente as minha dúvidas são as seguintes: Eu tenho que usar o use
> CLASS?
Sim.
> É necessaria a criação de metodos de acesso para cada pacote?
Sim.
Claro, você pode desconsiderar as minhas respostas se você achar que não
é preciso ser uma boa programadora. Mas, neste caso, eu aconselho você a
tentar VB ou Java. Quem programa Perl e fala nas listas de discussão
gosta de codificar com qualidade.
> No exemplo q vc me enviou e de acordo com o q eu entendi (posso ter
> interpretado errado), nessa linha vc esta criando o objeto. e na
> proxima vc esta serializando.
> my $data = Data::Object->new( nome => 'Luis', sobrenome => 'Motta' );
Sim, esta linha cria um objeto do tipo "Data::Object".
> # Teria como eu usar o objeto direto?
> Ai no caso ficaria dessa forma:
> my $data = Data::Object->new(pessoa);
Você obviamente não entendeu nada do que foi escrito no package
Data::Object.
> $data_masher->serialize( $data ) ;
Esta é a parte importante para responder à sua questão: é assim que você
serializa objetos em Perl.
> ai ficaria algo assim
>
> #arquivo classe.pm
Sem comentários, o nome do teu arquivo é horrível. Alguém por favor
aponte a Viviane Oliveira para a documentação que explica como criar
módulos em Perl? Eu não me lembro mais se é perlmodlib ou outra coisa...
> package Data::Object;
> use strict;
> use warnings;
> use Data::Serializer;
Que diabos é isso? Um módulo vazio? :D Isso não funciona, Viviane. Você
precisa aprender a programar. Alguém, por favor, recomenda um bom livro
de programação orientada à objetos para a Viviane começar?
> package Pessoa;
Você declarou outro package dentro do mesmo arquivo. A pesar de isso ser
Perl válido, nós recomendamos que os novatos não tentem usar assim, por
uma questão de boas práticas e também para evitar os problemas e
armadilhas relacionadas com isso. Por favor separe as tuas classes uma
por arquivo, e nomeie os arquivos conforme as classes que eles contém.
Por exemplo, o pacote Data::Object ficaria num arquivo chamado
"Data/Object.pm" dentro do seu diretório de bibliotecas.
Nunca se esqueça de dizer "use warnings" e "use strict" quando você
declarar um package novo.
> # Construtor
> sub new {
> $clspss = shift;
> $this = ref ($clspss) || $clspss;
> $dados = { nome => '' , telefone =>'', };
>
> return bless $dados, $this;
> }
Meus deuses... por favor, repense os seus nomes. Procure não usar
notação polonesa quando escrever código, isso não é mais 1970. E também
procure ser uniforme quando escrever código.
O que é que quer dizer "clspss"?
Nunca construa DAOs que não aceitem atributos no seu construtor - este
tipo de código não funciona bem no dia-a-dia, e alguém vai encontrar um
"jeitinho" de colocar dados dentro das classes, e você vai estar a meio
caminho de um inferno dantesco de manutenção.
> 1;
>
> No caso aqui, eu preciso de um arquivo para serializar eum outro
> para deserializar
Por que? Você tem problemas para entender documentação, ou simplesmente
não se deu ao trabalho de ler nada.
> #serial.pm funcao para serializar
> use Data::Serializer;
> use strict;
> use warnings;
> #funcao serializa o objeto
> sub serialize {
> my $serialized = shift;
> my $obj = Data::Serializer->new();
> $serialized = $obj->serialize($serialized);
> return $serialized;
> }
>
> 1;
Um arquivo não é um modulo. Leia Roger Pressman, "Engenharia de
Software". Especialmente os primeiros capítulos, onde ele explica reuso
de código, e conceitos básicos sobre módulos ou pacotes. Você precisa
entender como organizar o software antes de sair criando montes de
pacotes. Está apenas fazendo confusão.
> # esse arquivo eh onde ocorre a serializacao, onde eh
> # chamada a funcao serialize, e a deserializao
> package Data::Object;
> use strict;
> use warnings;
> require("serial.pm");
> require("classe.pm");
NÃO USE require() SE VOCÊ NÃO SABE O QUE ESTÁ FAZENDO.
Alguém por favor explique os detalhes, sim?
> # esse $pessoa foi utilizado para exemplo, para saber se estava
> # funcionado a serializaco e a deserializacao
> #no caso teria q ser substituido pelo objeto.
> my $pessoa = {
> nome => 'Marciano',
> sobrenome => 'Urano',
> };
A pesar de ter mais de 10 anos de prática em ler código ruim dos outros,
eu não consegui entender o que é que aquele "pessoa" tem a ver com isso
tudo. Seria ótimo se você explicasse o seu problema em palavras simples,
para o pessoal da lista te ajudar a escrever código para resolver o teu
problema (que não parece ser nenhuma coisa do outro mundo).
Por favor seja clara e conscisa nos seus exemplos. Eu tenho mais o que
fazer do que ler emails teus a noite inteira, com todo o respeito.
> ####################################################################
> Como eu faria pra serializar o objeto aqui? de que forma posso
> transferi-lo e passa-lo para as funções?
> ####################################################################
RTFM: "perldoc Data::Serialize"
> #chama a sub serialize do arquivo serial.pm e serializa o objeto
> my $serializado = serialize($pessoa);
> # chama a sub deserial e deserializa o objeto
> my $deserializado = deserial($serializado);
> #funcao deserializa.
> sub deserial {
> my $deserial = shift;
> my $obj = Data::Serializer->new();
> $deserial = $obj->deserialize($deserial);
> return $deserial;
> }
> __END__
Que críticos mais leves do que eu comentem isso, por favor. Se eu
continuar, vou começar a usar termos indelicados.
> Fiz dessa forma, pq seu exemplo, ficou um pouco vago pra mim..
O que está vago no meu exemplo? Por favor responda o email *para* *a*
*lista* e faça perguntas. Seria muito mais simples de te explicar o que
está vago lá do que tentar entender tudo o que você fez até aqui.
> Obrigada pela atenção!
Por nada. Obrigado por usar Perl.
Putamplexos.
--
Luis Motta Campos is a software engineer,
Perl Programmer, foodie and photographer.
More information about the SaoPaulo-pm
mailing list