Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
PADRÕES DE PROJETO DE SOFTWARE Aula 10 – Padrões GRASP PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE O que veremos nesta décima aula Finalizar o estudo da família de padrões GRASP; Conhecer os padrões GRASP: Invenção Pura, Indireção Variações Protegidas; Aprender as principais aplicações e funcionalidades destes padrões; PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Pure Fabrication (Invenção Pura) Problema: Que objeto deve ter a responsabilidade, quando não se quer violar a Alta Coesão e o Baixo Acoplamento, mas as soluções oferecidas por Expert não são adequadas? Atribuir responsabilidades apenas para classes do domínio conceitual pode levar à situações de maior acoplamento e menos coesão. Solução: Atribuir um conjunto altamente coesivo de responsabilidades a uma classe artificial que não representa um conceito do domínio do problema. PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Exemplo Apesar de Sale ser a candidata lógica para ser a Expert, para salvar a si mesma em um banco de dados, isto levaria o projeto a ter baixo acoplamento, alta coesão e baixo reuso; Uma solução seria criar uma classe responsável somente por isto: PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Exemplo Se o Jogador lançar os dados , este comportamento não será muito reutilizável Copo é uma Invenção Pura responsável por lançar os dados PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Indireção Problema: A quem devemos atribuir a responsabilidade, evitando o acoplamento direto entre dois ou mais objetos? Como desacoplar objetos apoiando o Acoplamento Baixo e maximizando o potencial de reuso? Solução: Atribua a responsabilidade a um objeto intermediário para mediar as mensagens entre outros componentes ou serviços, para que não sejam diretamente acoplados; O objeto intermediário cria uma camada de indireção entre os dois componentes que não mais dependam um do outro: Ambos dependem da indireção. PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Exemplo O objeto AdaptadorMestreDosImpostos atua como intermediário para o calculador externo de imposto. Por meio de Polimorfismo, ele fornece uma interface consistente com os objetos internos e ocultam as variações nas APIs externas PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Exemplo O exemplo de Invenção Pura de desacoplar a Venda dos serviços de Banco de Dados através da classe ArmazenamentoPersistente É também um exemplo de atribuir responsabilidade para apoiar a Indireção. PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Indireção A maioria dos problemas em Computação podem ser resolvidos por um outro nível de indireção – Dijkstra. Exemplos de Indireção: Mediator, Façade, Bridge Adapter PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Variações protegidas Problema: Como projetar objetos, subsistemas e sistemas para que as variações ou instabilidades nesses elementos não tenham um impacto indesejável nos outros elementos? Solução: Identificar pontos de variação ou instabilidade potenciais; Atribuir responsabilidades para criar uma interface estável em volta desses pontos; Encapsulamento, interfaces, polimorfismo, indireção e padrões; Máquinas virtuais e brokers são motivados por este princípio; Evitar enviar mensagens a objetos muito distantes. PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Exemplo A solução com Polimorfismo para os calculadores de impostos externos é um exemplo de Variações Protegidas PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Variações protegidas O ponto de instabilidade (variação) são as diferentes interfaces de calculadores externos Acrescentando um nível de Indireção, uma Interface e usando o Polimorfismo com várias implementações de IAdaptadorDeCalculadorDeImposto Protegemos o sistema a partir de variações nas APIs externas. Objetos internos colaboram com uma interface estável Várias implementações do Adaptador ocultam as variações para os sistemas externos. PADRÕES GRASP – AULA 10 PADRÕES DE PROJETO DE SOFTWARE Bibliografia Utilizando UML e Padrões: uma introdução à análise e ao projeto orientados a objetos - 3ª Edição Autor: Larman, Craig Padrões de Projeto: soluções reutilizáveis de software orientado a objetos Autor: Gamma, Erich ... [et al] * * * * * * * * * * * * * *