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
![Page 1: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/1.jpg)
Projeto e implementação de software utilizando padrões de projeto
Antonio Passos
![Page 2: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/2.jpg)
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
![Page 3: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/3.jpg)
De onde vêm os padrões?
Escadaria Selarón - RJBiblioteca Nacional - RJ
Algo em comum aqui?
![Page 4: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/4.jpg)
De onde vêm os padrões?
Pirâmide de Kukulcán - México
![Page 5: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/5.jpg)
De onde vêm os padrões?
Pirâmide de Kukulcán - México
![Page 6: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/6.jpg)
De onde vêm os padrões?
• A beleza está realmente nos olhos de quem vê?
• Ou existe base objetiva para tal julgamento?
![Page 7: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/7.jpg)
De onde vêm os padrões?
![Page 8: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/8.jpg)
• É possível projetar sistemas de forma metódica, racional, explicável?
![Page 9: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/9.jpg)
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
![Page 10: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/10.jpg)
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
![Page 11: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/11.jpg)
Gangue dos Quatro
![Page 12: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/12.jpg)
Arquitetura de aplicações corporativas
![Page 13: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/13.jpg)
GRASP
![Page 14: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/14.jpg)
Padrões GRASP
• Padrões de Princípios Gerais para Atribuição de Responsabilidade (General Responsibility Assignment Software Patterns)
![Page 15: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/15.jpg)
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.
![Page 16: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/16.jpg)
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
![Page 17: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/17.jpg)
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
![Page 18: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/18.jpg)
Padrões GRASPAcoplamento fraco
Opção 01 Opção 02
![Page 19: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/19.jpg)
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
![Page 20: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/20.jpg)
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?
![Page 21: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/21.jpg)
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
![Page 22: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/22.jpg)
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?
![Page 23: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/23.jpg)
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/
![Page 24: Projeto e Implementação de Software Utilizando Padrões](https://reader038.vdocuments.site/reader038/viewer/2022102901/557321ddd8b42aae7b8b4dab/html5/thumbnails/24.jpg)
Obrigado
• Antonio PassosE-mail: [email protected]: http://twitter.com/antoniopassosBlog: http://blog.antoniopassos.pro.brEAD: http://ead.antoniopassos.net