projeto e implementação de software utilizando padrões

Post on 06-Jun-2015

5.435 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

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: antoniopassos@gmail.comTwitter: http://twitter.com/antoniopassosBlog: http://blog.antoniopassos.pro.brEAD: http://ead.antoniopassos.net

top related