Padrões de Projeto Grasp - Expert
Rodrigo da Cruz Fujioka [email protected]
Métodos Avançados de Programação
Padrões de Projeto
Objetivos Objetivos
GRASP GRASP
GRASP – EXPERT
Padrões de Projeto
Conhecer as peças, tabuleiro e regras do jogo de xadrez não são suficientes para definir um
grande jogador.
Padrões de Projeto
• Conhecer e compreender as técnicas,
estratégias e jogadas dos grandes mestres é
recomendável.
Padrões de Projeto
Conhecer a sintaxe, semântica, estruturas e
regras de uma linguagem orientada a objetos
não é suficiente para definir um bom
projetista.
Padrões de Projeto
• Conhecer e compreender as técnicas,
estratégias e soluções dos grandes projetistas
é recomendável.
Padrões de Projeto
• Afinal de contas o que é um padrão?
O que são Padrões de Projeto
• Na prática:
– “Descreve uma solução que pode ser reutilizada milhões de vezes para resolver um problema que se repete constantemente“
se repete constantemente“
“ Cada padrão descreve um problema no nosso ambiente e o cerne da sua solução, de tal forma que você possa usar essa solução milhões de
vezes, sem nunca fazê-lo da mesma maneira”
O que são Padrões de Projeto
• Um Design Pattern não é uma classe ou uma biblioteca que você inclui em seus arquivos. É muito mais que
isso. É uma metodologia que deve ser seguida no
desenvolvimento de um projeto, seja ele no ramo de desenvolvimento de software, de construção civil, de engenharia, etc.
9
engenharia, etc.
Descrevem soluções para problemas recorrentes no desenvolvimento de um projeto.
Os padrões de projeto visam facilitar a reutilização de
soluções na fase de projeto.
Padrões de Projeto
• Padrões contêm o somatório da experiência dos melhores projetistas O-O!
– Entre várias situações, isolar o que muda do que é igual
Design Patterns iniciaram a febre de padrões
• Design Patterns iniciaram a febre de padrões
– Analysis Patterns
– Testing Patterns
– Business Patterns
– Pedagogical Patterns
O que são Padrões de Projeto
• Reaproveitam-se classes e suas colaborações
– Reuso de idéias, não de código
11
Definição
• Maneira eficaz de fazer algo, de atingir um objetivo
• Mesma idéia para cozinhar, dirigir e
• Mesma idéia para cozinhar, dirigir e desenvolver software
• Jargões são utilizados dentro de uma atividade para se referir a uma determinada situação ou
“coisa”
Porque utilizar padrões de projeto
Definição
• Pela facilidade de manutenção, pela escalabilidade do projeto, reutilização de material, organização e
padronização internacional, podendo seu projeto ser mantido por pessoas que vivem em outro país e falam outro idioma por exemplo.
outro idioma por exemplo.
• Como Design Patterns é uma metodologia, pode ser aplicada a qualquer situação. No ramo de
desenvolvimento de software essa metodologia pode
ser aplicada a qualquer linguagem de programação.
Porque Não utilizar padrões de projeto
Por quê padronizar
• Transformar jargões em PADRÕES
• Documentação = queremos garantir que o conhecimento acumulado sobre uma ação será preservado para futuras gerações
gerações
• Padrões de projeto
– Estão em um nível acima do código
– Como programar OO mais eficientemente
– Prover reusabilidade,
flexibilidade, legibilidade
GOF
• Gang of Four descreve 23 padrões que não são os únicos mas são os mais utilizados
• Padrões de Larman = GRASP
– General Responsability Assignment Software Patterns – General Responsability Assignment Software Patterns
• Expert
• Creator
• Fraco acoplamento
• Alta coesão
GRASP – Expert – antes de tudo
• Um sistema OO é composto de objetos que enviam mensagens uns para os outros
– Uma mensagem é um método executado no contexto de um objeto
• Escolher como distribuir as responsabilidades entre objetos (ou classes) é crucial para um bom projeto
(ou classes) é crucial para um bom projeto
– Má distribuição = sistemas frágeis, difíceis de entender, manter, reusar e estender
GRASP – Expert – responsabilidades
• São obrigações de um tipo ou de uma Classe
• Obrigações de fazer algo
– Fazer algo a si mesmo – Fazer algo a si mesmo
– Iniciar ações em outros objetos
– Controlar ou coordenar atividades em outros objetos
GRASP – responsabilidades
• Obrigações de conhecer algo
– Conhecer dados encapsulados – Conhecer objetos relacionados
– Conhecer coisas que se pode calcular
• Exemplo: Responsabilidade de fornecer acesso a um BD
– Isso não quer dizer que a classe sempre terá que fazer tudo sozinha.
GRASP - Expert
• O problema
– Que classes devem fazer o que?
– Qual é o princípio mais fundamental para atribuir responsabilidades?
GRASP - Expert
• Solução
– Atribuir a responsabilidade ao especialista da informação - a classe que possui a informação necessária para cumprir a responsabilidade
Analisar Diagrama abaixo
Exemplo
Calculo da venda
Diagrama de Colaboração de Classes
Ainda não terminamos
GRASP - Expert
GRASP - Expert
GRASP - Expert
• Tudo isso pode ser decidido sem ter que fazer diagramas UML
É obvio
GRASP - Expert
GRASP - Expert
GRASP - Expert
GRASP - Expert
Exercício e Listas Amanhã no grupo
• E no final seja