duvidas sobre OO  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
faq
JavaChild
[Avatar]

Membro desde: 03/08/2005 15:06:13
Mensagens: 147
Offline

Andei lendo sobre OO aqui no GUJ, especificamente a area "Patterns, ...." e um tópico em especial: "Então vc gostaria de discutir OO?". Algumas dúvidas me surgiram:

-> como são denomindados objetos simples, sem comportamento? Isso "fere" OOP, mas de vez em nunca existem objetos apenas com atributos,pelo menos no momento atual do sistema, que mais tarde podem vir a ter comportamentos.

-> Alguns usuários se reuniram e fizeram um motim contra set e get , e afirmam que os estado interno de um objeto não deveria ser acessado. Como lidar com esta caracteristica do objeto? Digo: se tenho uma propriedade A util e descritiva o suficiente para que ela seja utilizada, por que não acessa-la?

->Um usuário chamado Lipe, em um de seus posts escreveu que: "conheço 4 pessoas que programam OO, o resto, me incluindo no resto, programa pseudo OO". Realmente já li em inumeros lugares que código OO bem sucedido (da forma correta) é uma especie rara. Onde posso ler, ver, estudar, tentar assimilar um bom código OO ?

->Muito do que o usuário Philip Shoes (pcalcado) diz é: existem pessoas utilizando objetos para os dados e objetos para a logica, isto é errado. Concordo plenamente, logica e dados andam juntos,sempre. O objeto é auto contido. Onde posso arrumar exemplos sobre o código ruim tão citado pelo Philip Shoes?

->Onde posso colocar minhas duvidas sobre OO?

Se e somente se eu postei no local indevido: desculpas! Não programo Java então decidi colocar aqui mesmo...

"There are worse things than being alone" Charles Bukowski
Rafael Nunes
Moderador
[Avatar]

Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline

faq wrote:
-> como são denomindados objetos simples, sem comportamento? Isso "fere" OOP, mas de vez em nunca existem objetos apenas com atributos,pelo menos no momento atual do sistema, que mais tarde podem vir a ter comportamentos.


Eles não deveriam existir. Eu já vi gente(creio que o Phillip) chamando de objetos burros.

faq wrote:
-> Alguns usuários se reuniram e fizeram um motim contra set e get , e afirmam que os estado interno de um objeto não deveria ser acessado. Como lidar com esta caracteristica do objeto? Digo: se tenho uma propriedade A util e descritiva o suficiente para que ela seja utilizada, por que não acessa-la?

Não é que ela não deva ser acessada, mas um objeto não pode e não deve conhecer a implementação interna de outro objeto, o meio de acesso deve ser feito pela interface deste objeto, onde o responsável pela ação é quem detém a informação, ou seja, ao invés de você ter um determinado atributo e set/gets pra ele, você tem um atributo e um método que realizará alguma operação com o atributo, retornando a informação necessária.
faq wrote:
->Um usuário chamado Lipe, em um de seus posts escreveu que: "conheço 4 pessoas que programam OO, o resto, me incluindo no resto, programa pseudo OO". Realmente já li em inumeros lugares que código OO bem sucedido (da forma correta) é uma especie rara. Onde posso ler, ver, estudar, tentar assimilar um bom código OO ?

Dá uma pesquisada por algumas sugestões de livros aqui no fórum

faq wrote:
->Muito do que o usuário Philip Shoes (pcalcado) diz é: existem pessoas utilizando objetos para os dados e objetos para a logica, isto é errado. Concordo plenamente, logica e dados andam juntos,sempre. O objeto é auto contido. Onde posso arrumar exemplos sobre o código ruim tão citado pelo Philip Shoes?

Se quiser te mando os fontes daqui do trampo e você vai ver o que é um exemplo de código ruim...

faq wrote:
->Onde posso colocar minhas duvidas sobre OO?

Tem um fórum aqui mesmo no GUJ que trata especificamente de Padrões, Arquiteturas e Projetos(que aliás é esse o nome do fórum

faq wrote:
Se e somente se eu postei no local indevido: desculpas! Não programo Java então decidi colocar aqui mesmo...

Tudo bem, mas que não se repita!!!

------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."

http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
[Email]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Olá,

faq wrote:
-> como são denomindados objetos simples, sem comportamento? Isso "fere" OOP, mas de vez em nunca existem objetos apenas com atributos,pelo menos no momento atual do sistema, que mais tarde podem vir a ter comportamentos.


Isso é encorajado em ambientes (emrpesas, tecnologias, faculdades, sites, livros...) que pregam análise de negócio misturada a análise de sistema.

Se você seguir uma metodologia em cascata (waterfall), onde primeiro se analisa muuuuito, depois se projeta muuuuuuuito, depois se (na teoria) codifica o especificado, geralmene a sugestão é começar com atributos e relacionamentos, depois acrescentar comportamento.

Eu discordo disso, porque para mim não é diferente de começar com um modelo relacional e depois pensar nas "funções". Não que seja ruim, horrível ou sacrilégio, mas não acho que seja assim que se utilizam objetos de verdade.

Objetos apenas com atributos são comuns em front-end para bancos de dados. Este tipo de sistema acaba sendo mais complexo com OOP, eur ecomendo para este tipo simples de aplicação uma linguagem mais leve, menos OO ou mesmo as ferramentas do banco de dados, só cuidado com a evolução do sistema.

Faça assim: crie sua "classe de dados" e se pergunte: quem manipula esses dados?

Será que quem manipula os dados não sabe demais sobre a estrutura interna da classe? Será que realmente esta responsabilidade é dessa outra classe? E meu acoplamento, se eu mudar a "classe de dados", mudar o nome de seus atributos ou outro detalhe bem específico... o quanto isso altera minhas outras classes?

faq wrote:
-> Alguns usuários se reuniram e fizeram um motim contra set e get , e afirmam que os estado interno de um objeto não deveria ser acessado. Como lidar com esta caracteristica do objeto? Digo: se tenho uma propriedade A util e descritiva o suficiente para que ela seja utilizada, por que não acessa-la?




Eu não tenho absolutamente nada contra get ou set, eu tenho apenas uma dúvida, qual a diferença prática entre um pseudo-JavaBean cheio de get e set e uma struct/register em uma linguagem procedural?

Se OOP age da mesma forma que ProgramaçãoProcedural, por que são paradigmas diferentes?

Se você tem um atributo (algumas vezes chamado também de dimensão) que interessa a uma outra classe, por exemplo para exibir seu valor na tela, é válido sim expôr este, só cuidado para os clientes de uma classe não conhecerem demais sobre como a classe funciona por dentro.


faq wrote:
->Um usuário chamado Lipe, em um de seus posts escreveu que: "conheço 4 pessoas que programam OO, o resto, me incluindo no resto, programa pseudo OO". Realmente já li em inumeros lugares que código OO bem sucedido (da forma correta) é uma especie rara. Onde posso ler, ver, estudar, tentar assimilar um bom código OO ?


Recomendo os livros mais clássicos.

Coloquei uma vez uma lsita aqui e devo colcoar algo no meu blog em breve sobre isso.

faq wrote:
->Muito do que o usuário Philip Shoes (pcalcado) diz é: existem pessoas utilizando objetos para os dados e objetos para a logica, isto é errado. Concordo plenamente, logica e dados andam juntos,sempre. O objeto é auto contido. Onde posso arrumar exemplos sobre o código ruim tão citado pelo Philip Shoes?


Em todo lugar. Não vou citar A nem B, me soa antiético, mas basta você dar uma olhada em qualquer sisteminha que, em java, use Struts ou Servlets (neste caso não é culpa das ferramentas, muitas vezes quem usa estes dois está apenas seguindo a onda" e não possui muito conhecimento técnico, claro que isso não é uma afirmação, muita gente faz coisas legais com servlets e até com Struts, com algum esforço ). Também tem *muito* exemplo de código aqui no GUJ, faz uma busca por "mvc", "procedural" ou "responsabilidades", geralmente tópicos com estas palavras resultam em discussões e exemplos.

faq wrote:
->Onde posso colocar minhas duvidas sobre OO?


Como o rafael respondeu, aqui.

Eu movi para você

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

pcalcado wrote:
Se você tem um atributo (algumas vezes chamado também de dimensão) que interessa a uma outra classe, por exemplo para exibir seu valor na tela, é válido sim expôr este[...]

Há controvérsias hehe se ActiveRecord é tão bonito, por que "ActiveWidget" não?

Former LIPE.
[ICQ]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

LIPE wrote:
Há controvérsias hehe se ActiveRecord é tão bonito, por que "ActiveWidget" não?


E quem disse que AR é bonito? Eu não fui É uma gambiarra interessante.

Note que uma coisa é AR, onde o objeto se persiste, e outra coisa (Observer) é um objeto que avisa alguém que seu estado mudou.

Assim como um AR mistura regra de negócio com persistência um AW (?) msituraria com apresentação. Claro que você pdoe usar AOP ou decorators para aliviar isso.

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

hehe quando persistência entra em cena o "menos-pior" é o bonito

E sua sugestão é ótima
Antes isso
container.add( ( JComponent ) pessoa.drawYourself() );
a
field.setText( pessoa.getEndereco().getCEP() );

This message was edited 1 time. Last update was at 03/08/2005 18:07:11


Former LIPE.
[ICQ]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Mas na verdade, eu neme stava falando em representações, mas simplesmente uma aplicação sem um domínio, sem regras de negócio, não precisa da complexidade adicional de objetos.

Colocando objetos na frente ou não, tudo que você vai fazer é tirar e colocar de tabelas, com um mínimo mínimo mínimo mínimo de processamento...pra que se estressar? Oracle Forms, Rails ou PHP nele

Só cuidado sempre para não achar que todas as aplicações são front-end de banco de dados. Se você tem regras de negócio, o papo é outro.

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

Concordo totalmente. Isso também é reforçado (mesmo que de outra maneira) pelo Rod Johnson no link que postei no fórum de Novidades.

Former LIPE.
[ICQ]
faq
JavaChild
[Avatar]

Membro desde: 03/08/2005 15:06:13
Mensagens: 147
Offline

Irei utilizar alguns quotes abreviados, para economizar espaço e leitura. Eles possuem a função de ajudar a localizar determinadas ideias e assim constextualizar o leitor.

Primeiro: sobre objetos burros:
Isso é encorajado em ambientes (emrpesas, tecnologias, faculdades, sites, livros...) que pregam análise de negócio misturada a análise de sistema.
e segue ...

Recebi exatamente a reposta que esperava. Philip, poderia detalhar um pouco a parte "objetos de verdade "? Digo isto pois hoje me deparo com uma situação desse tipo, uma aplicação bota e tira no DB, que irá crescer. Hoje alguns objetos não possuem comportamento algum, são apenas set/get e persistencia, porem eles podem e irão(não todos) vir a ter comportamentos.

segunda: sobre set/get:
qual a diferença prática entre um pseudo-JavaBean cheio de get e set e uma struct/register em uma linguagem procedural?
e segue...

Que tal nenhuma? Esta questão nos leva rumo a primeira, objetos sem comportamento não são objetos. O que, pelo amor dos Deuses Hiborianos, devo fazer com objetos que por definição não possuem comportamento?

terceiro: sobre o OO do bem:
Coloquei uma vez uma lsita aqui e devo colcoar algo no meu blog em breve sobre isso.


Eu li esse forum de arquiteturas de ponta a ponta, inclusive esse topico sobre Delphi e Java. Visitei os links dos livros um a um. Obrigado pela paciencia de re-re-re-re-re-informar sobre os livros, afinal eles se encontram em topico pemanente "então vc queria discutir OO".

quarto (e talvez o mais importante): o OO do mal (maligno mesmo):


Se quiser te mando os fontes daqui do trampo e você vai ver o que é um exemplo de código ruim...


Me comprometo a não denegrir sua imagem, nem a da sua empresa . Poderia mesmo me mostrar alguns exemplos bons e ruins? De preferencia algo "ruim na média", coisa comum de se ver, o mesmo para o OO do bem.

Não sei se vocês perceberam mas a minha pratica tá saindo do zero agora. Pra piorar trabalho com php e python, linguagens boas, mas com quase zero de OO do bem.
Exemplo: um cara me faz um sisteminha de gerenciamento de projetos, coisa simples. olhando a estrutura do programa me deparo com o um form (html) que é "iniciado" no template(view) e tem os seus campos (text,submit, checkbox, select ...) gerados na action, que por sua vez é um mega if alternando o pedido http, moral da estoria: ninguem pode aproveitar nada do que tava escrito! Até os camarada do dreamWeaver ficaram meio "de pé atras" com o uso do sistema.
Olha que isso foi uma coisa relativamente bem feita, em php o normal mesmo é pegar html,banco,logica, misturar tudo bem misturadinho, embalar em uma ou duas funções e botar pra rodar no apache!

Pessoalmente eu faço o seguinte: Pego a descrição do problema, sento junto com meu parceiro (somos apenas 2 na parte de php) e marcamos alguns pontos, no papel mesmo. Eu tento sempre visualizar a coisa toda como um monte de gnomo trabalhando. Normalmente nos grifamos os verbos e partir deste criamos objetos, exemplo: "... postar, ...." eu marco o "postar" e logo depois anoto: conteudo é postado, um usuario esta relacionado a isto e seu nome (get ) será o autor do conteudo.
Algo errado? Recomendações?Evoluir lendo o que? Isso é uma metodologia? Isto é assinar sentença de morte?

Mas na verdade, eu neme stava falando em representações, mas simplesmente uma aplicação sem um domínio, sem regras de negócio, não precisa da complexidade adicional de objetos.

Colocando objetos na frente ou não, tudo que você vai fazer é tirar e colocar de tabelas, com um mínimo mínimo mínimo mínimo de processamento...pra que se estressar? Oracle Forms, Rails ou PHP nele

Só cuidado sempre para não achar que todas as aplicações são front-end de banco de dados. Se você tem regras de negócio, o papo é outro

Muito esclarecedor (de novo...).

Há controvérsias hehe se ActiveRecord é tão bonito, por que "ActiveWidget" não?

ActiveRecord seria uma pattern pra bota e tira no banco ligado a uma logica pobre ?
Onde exite um catalogo com estas pattern mirabolantes que vocês tanto falam?

Sites: me passem o bookmark de vocês!

O GUJ é simplesmete o lugar com a maior densidade de insteressados e estudios! Por isso Java tem a toda essa boa fama no Brasil.

"There are worse things than being alone" Charles Bukowski
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Active Record pode ser encontra aqui: http://www.martinfowler.com/eaaCatalog/activeRecord.html

Shoes wrote: Se você seguir uma metodologia em cascata (waterfall), onde primeiro se analisa muuuuito, depois se projeta muuuuuuuito, depois se (na teoria) codifica o especificado, geralmene a sugestão é começar com atributos e relacionamentos, depois acrescentar comportamento.

Eu discordo disso, porque para mim não é diferente de começar com um modelo relacional e depois pensar nas "funções". Não que seja ruim, horrível ou sacrilégio, mas não acho que seja assim que se utilizam objetos de verdade.


Bom, quanto a esta colocação eu fico em cima do muro!
Quando eu modelo um projeto, eu penso primeiro no relacionamento entre os objetos e seus relacionamentos, tudo isso em um papel de pão mesmo!

No entanto, quando começo a escrever os testes unitários eu começo a dar mais forma, vigor e vitalidade para meus objetos. Eu escrevo o teste do jeito que eu gostaria de brincar e manipular meus objetos de negócio, e ai eu vou lá no objeto de negócio e adiciono as pendências necessárias!

De certa forma, eu acho que dependendo de como a pessoa conduz o desenvolvimento, ainda é possível ter objetos bém modelados mesmo que o projeto inicial comece apenas com atributos e relacionamento entre os objetos.

Por acaso eu estou viajando? Seguindo esta idéia ainda há a possibilidade de se conseguir criar um péssimo exemplo de projeto OO!!???

Abraços!
Thiago Senna

This message was edited 1 time. Last update was at 04/08/2005 08:22:45

[Email]
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

Quer um exemplo simples?

procedural:


oo:


Viu que diferente?

Procure no blog do Shoes o artigo Mestre dos Fantoches. Recomendadérrimo.

Former LIPE.
[ICQ]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

faq wrote:O que, pelo amor dos Deuses Hiborianos, devo fazer com objetos que por definição não possuem comportamento?


Pensar melhor neles, pq objetos, POR DEFINICAO, possuem comportamento. Se eles so tem dados, e vc nao faz nada com esses dados, os objetos nao servem pra nada - o importante de frisar aqui eh que, se vc tiver objetos estuprando uns aos outros, pra pegar dados, vc ta fazendo besteira. Por isso o odio por getters e setters

faq wrote:Recomendações?Evoluir lendo o que? Isso é uma metodologia? Isto é assinar sentença de morte?


Leia mais sobre metodologias ageis de desenvolvimento (qualquer coisa do Kent Beck ou Scott Ambler sobre isso eh bacana).

faq wrote:Sites: me passem o bookmark de vocês!


http://del.icio.us/cv ta bom?
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

faq wrote:
Recebi exatamente a reposta que esperava. Phillip, poderia detalhar um pouco a parte "objetos de verdade "? Digo isto pois hoje me deparo com uma situação desse tipo, uma aplicação bota e tira no DB, que irá crescer. Hoje alguns objetos não possuem comportamento algum, são apenas set/get e persistencia, porem eles podem e irão(não todos) vir a ter comportamentos.


O que é feito com os dados dos objetos sem comportamento? Pra que eles servem?

Muitas vezes você tem um atributo qualquer como nome de um usuário por exemplo, que apenas entra via um formulário, vai pro SGBD, é exibido algumas vezes, editado outras e deletado junto com o usuário. Isso é normal.

Agora ter todo um objeto que tem apenas este tipo de atributo é muito estranho.

Eu escrevi um textinho sobre isso uma vez (que rpecisa ser atualizado ) : www.fragmental.com.br/arquivos/fantoches.pdf

Fala sobre "classes de dados e classes de lógica", pode te dar uma idéia melhor sobre o que eu penso

faq wrote:
Que tal nenhuma? Esta questão nos leva rumo a primeira, objetos sem comportamento não são objetos. O que, pelo amor dos Deuses Hiborianos, devo fazer com objetos que por definição não possuem comportamento?


Exato.

Dê um exemplo dum objeto sem comprotamento rpa gente trabalhar em cima.

faq wrote:
Me comprometo a não denegrir sua imagem, nem a da sua empresa . Poderia mesmo me mostrar alguns exemplos bons e ruins? De preferencia algo "ruim na média", coisa comum de se ver, o mesmo para o OO do bem.


Qualquer sistema que usa um padrão chamado VO/DTO/TO é um ótimo candidato. Esse padrão utilizado erroneamente (como em 99.999% das vezes é) é um objeto sem comportamento.

faq wrote:
Não sei se vocês perceberam mas a minha pratica tá saindo do zero agora. Pra piorar trabalho com php e python, linguagens boas, mas com quase zero de OO do bem.


Python é um alinguagem muito boa, e a comunidade é bem focada em OOP. O problema, provavelmente, é que scripts tendem a ser rápidos e sujos.

faq wrote:
Pessoalmente eu faço o seguinte: Pego a descrição do problema, sento junto com meu parceiro (somos apenas 2 na parte de php) e marcamos alguns pontos, no papel mesmo. Eu tento sempre visualizar a coisa toda como um monte de gnomo trabalhando. Normalmente nos grifamos os verbos e partir deste criamos objetos, exemplo: "... postar, ...." eu marco o "postar" e logo depois anoto: conteudo é postado, um usuario esta relacionado a isto e seu nome (get ) será o autor do conteudo.
Algo errado? Recomendações?Evoluir lendo o que? Isso é uma metodologia? Isto é assinar sentença de morte?


Essa dos gnomos é ótima, é o conceito básico. Cada um faz uma parte e colabora com o todo.

Isso é sim, uma metodologia, com muitos trações de análise/projeto estruturado (Tom DeMarco/Yourdon/Parge-Jones).

Um livro muito bom sobre como "achar classes" é Domain Driven Design, de Eric Evans.


faq wrote:
Sites: me passem o bookmark de vocês!


Seguindo os passos do cv:
http://del.icio.us/pcalcado

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
faq
JavaChild
[Avatar]

Membro desde: 03/08/2005 15:06:13
Mensagens: 147
Offline

Beleza as respostas!

Esse delicious é massa heim...

O Lipe postou um lance bacana. Pessoalmente eu faço assim, um exemplo bem comum aqui nas minhas classes é o "logado" do usuário, que me fala se o sujeito tá logado ou não no sistema.

Exemplo:


Em algum momento eu pergunto se o cara tá logado, o objeto da acao requer que esteja:


Ai o objeto da ação se vira da "melhor maneira" com esse erro, eu normalmente pego a Exception e "mando pra frente", criando uma msg de
erro na tela do usuario.

Não sei se ajuda, mas nas minhas aplicações, que são simples, os arquivos que fazem a ponte entre visão e as classes Noticia,Usuario,Projeto,etc costumam ter miseras linhas e nenhum if/esle e tbm nunca são questionados sobre seus atributos. Eu uso os atributos sim, tipo: passo pro template uma variavel getAutor().

De acordo com o CV: sim os objetos possuem comportamento. Vendo o que o Lipe postou, e considerando isUnderAge como comportamento, me parece possivel todos os objetos possuirem comportamento. Um comportamento pode ser simples e fazer muito pouco, o importante é evitar manipular os dados do lado de fora do objeto. Certo?

Não sei o que houve com o artigo do Philip, o PDF não abre na minha versão do visualizador de PDF do gnome. To indo ler no Windows e volto aqui pra postar minha opnião/dúvidas.

Finalizando: eu fui no nó do delicius do CV e vi lá um "by Carlos Villela" .Então seu nome é Carlos Villela e você é esse camarada do forró? Heheeh loucura total ! Ou tudo é só um fake? Deve ser muito bom escrever durante o dia e cantar forró durante a noite!

This message was edited 1 time. Last update was at 04/08/2005 16:07:44


"There are worse things than being alone" Charles Bukowski
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

É um fake hehe

Como já postei muitas vezes, evite isso:



Former LIPE.
[ICQ]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team