Olá gente!
Você já ouviu falar de Padrões de Projeto? Ou o termo em inglês, Design Patterns? Bem, vamos formular umas perguntas e respostas:
1) O que é Padrões de Projeto?
2) Para que servem os Padrões de Projeto?
3) Como escolher o Padrão de Projeto do meu software?
Como diria Jack, o estripador, vamos por partes. Vou contar para vocês uma historinha que o meu orientando do laboratório que estou estudando, o Dr. Jerffeson Teixeira, contou em uma palestra sobre PP (Padrões de Projeto). Suponha que um alienígena veio estudar Engenharia de Software aqui na Terra. Mais especificamente, na UECE. O alienígena, vendo que todos iam para às aulas de roupa, perguntou a mim com que roupa ele deveria ir para as aulas (Aqui nós encontramos
um problema: Como o alien deve ir para a aula). Eu, então, respondi: olha, estamos no Ceará, normalmente os alunos vão de bermuda ou calça e uma camisa (
Uma solução. Uma solução USUAL).
Ok, vamos pensar. Bermuda ou calça + camisa. É a melhor solução? Bem, talvez sim, talvez não, mas de qualquer forma, é uma
ótima solução, afinal, a grande maioria vai vestido assim, não é mesmo? Então voltando às perguntas:
1) Padrões de Projetos são boas ou até ótimas soluções para determinado software orientado à objeto a ser desenvolvido. Complementando um pouco mais com o Wikipédia: "os padrões de projeto visam facilitar a reutilização de soluções de desenho - isto é, soluções na fase de projeto do software, sem considerar reutilização de código. Também acarretam um vocabulário comum de desenho, facilitando comunicação, documentação e aprendizado dos sistemas de
software."
Antes de continuar com o restante das respostas das perguntas, devo lhes confessar que há 2 tipos de PP: Padrões GoF (Trataremos um exemplo aqui) e Padrões GRASP (
General Responsibility Assignment Software Patterns). GoF é um acrônimo de Gang of Four, formado por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides. Vale lembrar o que GoF pode ser subdivido em três tipos de padrões:
- Padrões de criação;
- Padrões estruturais;
- Padrões comportamentais.
Quem tiver realmente interessado no assunto, que vale a pena aprender, há diversos livros para download e para vender também.
2) Para que servem os Padrões de Projeto? Alguns exemplos já foram citados, tais como: criar um vocabulário comum entre desenvolvedores de software; são, geralmente, ótimas soluções; além disso, os padrões nos dão generabilidade, uma maior abstração, e os padrões têm sempre um contexto, um problema e uma (ou mais) soluções.
3) E qual o melhor Padrão de Projeto? Cada caso é um caso, já diz o ditado. Vai depender de que tipo de software você está desenvolvendo. Alguns aspectos a serem observados para lhe auxiliar na escolha do seu PP:
- Conheça bem os Padrões de Projeto;
- Considere como os padrões de projeto solucionam problemas de projeto;
- Examine as seções de descrição do problema de cada padrão;
- Estude como os padrões se interrelacionam;
- Estude padrões de finalidades semelhantes;
- Examine uma causa de reformulação de projeto;
- Olhe exemplos dos padrões;
- Considere o que deveria ser variável no seu projeto.
Para finalizar, eu gostaria de mostrar um exemplo de uma classe do
Singleton, que é um Padrão de Criação do GoF, que
garante a existência de apenas uma instância da classe. Você pode usar quando você necessitar de somente uma instância da classe, por exemplo, uma conexão com banco de dados. Suponha que você terá que chamar diversas vezes a conexão com o banco de dados em um código na mesma execução. Se você instanciar toda vez a classe de banco, haverá grande perda de desempenho. O singleton irá garantir para você que há apenas uma instância daquela classe. Enfim, vamos partir para o nosso exemplo da nossa classe em Java:
public class MySingleton {
/* Instancia privada que será acessada */
private static MySingleton myInstance;
/* Construtor privado. Suprime o construtor público padrao. */
private MySingleton() {
/* Operações de inicialização da classe */
}
/* Método público de acesso único ao objeto! */
public static MySingleton getInstance(){
if(myInstance == null) {
myInstance = new MySingleton();
}
return myInstance;
}
}
É isso. Quem tiver dúvidas, críticas, sugestões, por favor, comentem!
Abraços e até a próxima!