rvf, software e mitos

Archive for outubro 2008

É incrível pensar que herança significa reutilizar código e ainda querer dizer que sabe Orientação a Objetos. Quem diz isso garanto que faz coisas do tipo:

PessoaFisica extends Pessoa

PessoaJuridica extends Pessoa

Muito bonito, reutilizou dados em comum entre PF e PJ, mas e o principio de OO, para onde foi? Para o lixo! Você simplesmente disse que, uma pessoa física é filho do mesmo pai de uma pessoa jurídica, um ser humano pode ser cosiderado irmão de uma empresa? Epa! Tem algo errado aí. Sim, isso está absolutamente errado se tratando de OO. “Ahh, mas meu professor disse que reutilizar código é bom” – Ok! Mas ele esqueceu de dizer que, deve haver uma coerência no meio disso, onde a reutilização de código se torna conseqüência de um bom modelo orientado a objetos e não uma obrigatoriedade, onde você tem a classe ChuckNorris com todos os comportamentos e atributos possíveis no universo, e faz todas suas subclasses herdarem ela.

Prefira a composição!

Como eu resolveria o problema da PessoaFisica e PessoaJuridica? Simples, usando composição. Vamos supor que você estivesse usando a classe Pessoa apenas para reutilizar dados cadastrais, ótimo, crie a classe DadosCadastrais e faça ela compor todas as classes que utilizem estes dados.

Quando usar herança?

Quando você definitivamente está certo que sua classe é uma especialização de alguma outra classe, que BEM PROVAVELMENTE será provida via polimorfismo. Por exemplo: ControleRemotoUniversal extends ControleRemoto.

A reutilização de código acontece uma vez que você ganha a componentização, onde você transformará sua família de objetos em um componente que se comunica muito bem com os objetos internos e externos. Isso é reutilizar código.

Cuidado com o que você aprende na faculdade…

Anúncios

É notável a quantidade de pessoas que acham que antes de fazer um sistema, DEVE ser feito o seu modelo UML. Ok, se isso realmente funcionasse seria tudo muito bonito, um mar de flores. Mas não é bem por aí. Acredito que estas pessoas não entenderam de fato a razão da UML existir.

A UML é (como seu nome já diz), uma linguagem unificada! Ela só serve para você não precisar conversar com o seu cliente (que não entende bulufa da parte técnica) sem ter que mostrar código pra ele. Com uma linguagem de fácil entendimento, vocês podem chegar a modelos de sistema em conjunto com o cliente, onde até ele mesmo poderá modificar o modelo.

Quando a UML vai importar para você, então? Ela será importante na fase de entendimento do seu sistema, para na hora de desenvolver o produto, você considere-a como seu requisito para definir relacionamentos, comportamentos e os atributos de uma maneira clara. Mas, esqueça que ela será uma dependência para seu código, isso acarretaria em ter que manter o seu modelo UML sincronizado com o sistema, o que nem sempre será possível – ou você acha que depois de pronto, o martelo é batido e nada mais muda?

Outro pecado que fazem é criar o modelo UML, codificar de uma maneira diferente e mesmo assim, TER QUE ATUALIZAR O UML. Qual o motivo disso? O desconhecimento. O simples prazer de ter na cabeça que o seu sistema tem um modelo. Isso é inútil e só vai fazer você perder tempo.

Algumas idéias para resolver este problema, é o focar o segmento do sistema em DSLs (linguagens especificas de domínio), onde num mundo ideal, você pudesse modelar o negócio do seu sistema diretamente no seu código, mas isso já é assunto para um outro post.

Não burocratize o desenvolvimento de software, de preferência ao ágil. Só use UML, quando realmente ela poderá agregar em algo. Se tiver melhores opções para o seu lugar, de preferência a estas outras opções, diminuindo assim um problema a menos para se preocupar.

Bom, uns já sabem, outros não… O fato é que na última terça feira fiz a tal prova no centro de inovações Microsoft (TecnoPUC) e agora sou um SCJP 5.0, com 83% de score (precisava de 59% no mínimo), ou seja 60 acertos de 72 questões, meus skills foram:

  • Declarações, Inicialização e Escopo ~ 100%
  • Controle de Fluxo ~ 100%
  • Conteúdo da API ~ 100%
  • Concorrência ~ 62%
  • Conceitos OO ~ 90%
  • Coleções / Genéricos ~ 50%
  • Fundamentos ~ 72%

A prova não estava difícil para uma prova estipulada –uma das mais difíceis do segmento de informática-, a tradução não é muito boa (peca em alguns momentos), mas nada comprometedor, as questões drag and drop estavam bem fáceis até, comparando com o que a galera costuma chorar, no geral elas se resumem a threads e IO.

Minha dica é: estudem o livro da Kathy Sierra/Bert Bates e façam mocks, como: MasterExam, Inquisition, Test Killer, e se tiver uma grana, o whizlabs também não é nada mal. Eu estudei apenas o MasterExam e o Test Killer.

Qual é a próxima? Bom, acabei comprando vouchers de forma compulsiva (3), todos “usados” (bem mais em conta!), e como usei um, ainda me restam dois, então vou pelo caminho mais natural: scja e scwcd, até o ano que vem.

 


Anúncios

  • Nenhum
  • Adolfo: Muito bom este post. Acho que tudo isso pode ser resumido em uma única palavra: humildade (isso não significa não defender seu ponto de vista).
  • Adolfo: Olá Robson, Alguns modelos até consegui identificar em alguns projetos que já trabalhei... Com algumas coisas eu concordo e outras não... Q
  • milah: Eu tenho um Amazon L71. Até 2 meses atrás não tive problemas com ele. Já troquei a placa de lan dele, por uma que capta melhor wi-fi. Só que ago