projeto e implementação de software utilizando padrões
DESCRIPTION
Apresentação feita no Java EE Day que aconteceu em Goiânia/GO em 05/12/2009.TRANSCRIPT
Projeto e implementação de software utilizando padrões de projeto
Antonio Passos
Agenda
• De onde vêm os padrões? • Conceito de padrão• Por que estudar padrões?• Alguns padrões conhecidos • Padrões GRASP• Como tomar decisões de projeto• Pra saber mais
De onde vêm os padrões?
Escadaria Selarón - RJBiblioteca Nacional - RJ
Algo em comum aqui?
De onde vêm os padrões?
Pirâmide de Kukulcán - México
De onde vêm os padrões?
Pirâmide de Kukulcán - México
De onde vêm os padrões?
• A beleza está realmente nos olhos de quem vê?
• Ou existe base objetiva para tal julgamento?
De onde vêm os padrões?
• É possível projetar sistemas de forma metódica, racional, explicável?
Conceitos de padrões
•Par nomeado problema/so
lução que pode ser
aplicado em novos contextos, com conselhos
sobre sua aplicação em novas si
tuações e uma
discussão so
bre as consequências de se
u uso
• Padrões constituem um repertório de
princípios gerais e de soluções idiomáticas
elaborado por desenvolvedores experientes
que os guiam na construção de software
É uma técnica, uma diretriz
Por que estudar padrões?
• Melhorar a comunicação da equipe e o aprendizado individual
• Aumentar a capacidade de modificação melhorada do código
• Reutilizar soluções
Decidir se disponho do projeto certo, não apenas de um projeto que
funcione
Gangue dos Quatro
Arquitetura de aplicações corporativas
GRASP
Padrões GRASP
• Padrões de Princípios Gerais para Atribuição de Responsabilidade (General Responsibility Assignment Software Patterns)
Padrões GRASPEspecialista na informação
• Problema– Qual é o princípio básico de atribuição de
responsabilidades a objetos?
• Solução– Atribuir a responsabilidade ao especialista na
informação: a classe que tem a informação necessária para satisfazer a responsabilidade.
• Benefícios– O encapsulamento de informações é mantido.– São estimuladas definições de classes « leves », de
maior coesão, mais fáceis de compreender e manter.
Padrões GRASPCriador
• Problema– Quem deve ser responsável pela criação de uma
nova instância de uma classe?
• Solução– Atribua à classe B a responsabilidade de criar uma
instância da classe A se uma das seguintes condições for verdadeira:
• B agrega objetos de A;• B contém objetos de A;• B registra instâncias de objetos de A;• B usa de maneira muito próxima objetos de A;• B tem os dados de iniciação que serão passados para A
quando ele for criado.
• Benefícios– Favorece o acoplamento fraco
Padrões GRASPAcoplamento fraco
• Problema– Como favorecer a dependência baixa, o pequeno
impacto à mudança e aumentar a reutilização?
• Solução– Atribuir uma responsabilidade de maneira que o
acoplamento permaneça fraco.
• Benefícios– Não é afetado por mudanças em outros
componentes;– É simples de entender isoladamente;– É conveniente para reutilização
Padrões GRASPAcoplamento fraco
Opção 01 Opção 02
Padrões GRASPCoesão alta
• Problema– Como manter a complexidade sob controle?
• Solução– Atribuir uma responsabilidade de forma que a
coesão permaneça alta.
• Benefícios– Mais clareza e facilidade de compreensão no
projeto;– Simplificação da manutenção e do acréscimo de
melhorias;– Favorecimento do acoplamento fraco;– Aumento do potencial de reutilização
Padrões GRASP
• Coesão alta– Como manter a complexidade sob controle?
• Acoplamento baixo– Como favorecer a dependência baixa, o
pequeno impacto à mudança e aumentar a reutilização?
Padrões GRASPControlador
• Problema– Quem deve ser responsável por tratar um evento de
sistema?
• Solução– Atribuir a responsabilidade de receber ou tratar uma
mensagem de um evento do sistema a uma classe que represente uma das seguintes escolhas:
• Represente todo o sistema, dispositivo ou subsistema;• Represente um cenário de um caso de uso dentro do qual
ocorra o evento do sistema
• Benefícios– Aumento das possibilidades de reutilização e de
interfaces plugáveis;– Conhecer o estado do caso de uso
Como tomar decisões de projeto?
• Qual dessas implementações é a melhor?
• Sob quais circunstâncias esta alternativa seria melhor que a outra?
• Qual dessas circunstâncias é a que mais se assemelha ao meu domínio do problema?
Pra saber mais
JAVA DESIGN PATTERNShttp://www.allapplabs.com/java_design_patterns/java_design_patterns.htm
Java Design Patterns At a Glancehttp://www.javacamp.org/designPattern/
Java Design Patterns Reference and Exampleshttp://www.fluffycat.com/Java-Design-Patterns/
Obrigado
• Antonio PassosE-mail: [email protected]: http://twitter.com/antoniopassosBlog: http://blog.antoniopassos.pro.brEAD: http://ead.antoniopassos.net