sábado, 3 de outubro de 2015

Java - Padrões de Projeto

No meu livro "Métricas para Desenvolvedores" consegui reunir 2 assuntos que me fascinam: Contagem (técnica por Ponto de Função e PCU) e Padrões de Projeto. Procurei mostrar, na visão do desenvolvedor, como encarar esses assuntos como alguém que não possui o menor conhecimento sobre ambos mas se vê obrigado a entendê-los para não ficar fora do mercado.

Muitas pessoas acham que por estarem programando em Java estão consequentemente programando Orientado a Objetos (vou abreviar para OO), entendamos de uma vez por todas que Orientação a Objetos é um conceito e não uma Linguagem. Projetar software OO é difícil, e projetar software OO reusável é mais difícil ainda.

É responsabilidade do Arquiteto projetar um software OO, e isso significa que é necessário encontrar os objetos pertinentes, fatorá-los em classes na granularidade certa, definir interfaces de classes e hierarquias de herança, e estabelecer relacionamentos chave entre elas. É muito complicado achar objetos reusáveis na primeira tentativa.

Para tentar resolver este problema surgiram os Padrões de Projeto que são formas de capturar soluções desenvolvidas e evoluídas com o passar do tempo, só existe um problema quanto a eles, cada padrão descreve um problema que ocorre frequentemente no ambiente, e então descreve a solução para aquele problema, de um modo tal que pode-se usar essa mesma solução. Resumidamente: Um Problema Específico, Uma Solução Específica.

Um dos primeiros livros que surgiu a esse respeito foi "Padrões de Projeto - Soluções Reutilizaveis de Software Orientado a Objetos" de Erich Gamma, John Vlissides, Ralph Johnson, e Richard Helm (atenção os códigos descritos neste livro estão em linguagem C++ e Smalltalk). Esses quatro autores se denominaram "Gang of Four" ou simplesmente GoF. Então é comum ouvir falar de: "Padrões do GoF". No livro trataram de 23 padrões, tal como descritos na seguinte imagem:


Dividiram seus padrões em 3 categorias: Criacionais (em amarelo) trata da melhor maneira de se construir um objeto, Comportamentais (em verde) estão mais voltados as comunicações entre os objetos e Estruturais (em azul) como as classes devem ser combinadas para formar estruturas mais complexas.

No meu livro expus para cada padrão um problema e como resolvê-lo em Java. Por questões de direito autoral não posso descrevê-los aqui. Porém o pessoal do Java Code Geeks criou um excelente curso (em inglês) expondo cada um desses padrões.

23 Padrões de Projeto do GoF aplicados em Java

Espero que seja proveitoso e que possa ajudar a muitos desenvolvedores que realizam trabalhos de projeto de sistema OO a criarem melhor seus códigos ou simplesmente entender o que vem a ser Padrões de Projeto.

Obrigado e até a próxima
Fernando Anselmo