Porquê PADRÕES? - Exemplo Problema: extrair informação de um sistema CAD/CAM para um sistema pericial Sistema pericial controla a produção de uma peça Sistema pericial tem vida mais longa do que CAD/CAM Escrever a ferramenta de extracção de informação de modo a poder ser facilmente adaptada a novas versões do CAD/CAM Especificação da peça de metal (Geometria): Dimensões exteriores e Características (features): Slot Hole Cutout Special Irregular Fonte: Shalloway, Trott 2005 31 Exemplo Desenhar um programa que permita que o sistema pericial leia o modelo descrevendo a geometria de uma peça Seguidamente o sistema pericial gera os comandos para que uma máquina de controlo numérico (NC) construa a peça de metal Sistema a desenvolver: Analisar peças de folha de metal Ver como elas devem ser fabricadas, com base nas características Gerar um conjunto de instruções que sejam lidas pelo equipamento de produção (conjunto NC) Dar as instruções ao equipamento de produção quando se pretende fazer a peça Tipo de comandos a usar e a sua ordem depende das características e da sua relação com outras características regras no sistema pericial 32 1
Exemplo Permitir que o sistema pericial trabalhe com novas versões do CAD/CAM Isolar uma parte do sistema, protegendo-a de outra que tem grande probabilidade de mudar 33 Dados 2 sistemas CAD/CAM como construir um extractor de informação que pareça o mesmo para um cliente independentemente de qual é usado? 34 2
Exemplo: Primeira solução 35 Exemplo: Primeira solução Desvantagens desta solução: Redundância entre métodos Forte acoplamento características ligadas uma às outras indirectamente Fraca coesão métodos que executam funções principais estão divididos pelas classes mas principal problema é prever futuro se aparece uma 3ª versão do CAD/CAM? Que se passa com as classes? Excesso de confiança na herança implica custos de manutenção maiores do que os desejávies 36 3
Objectos Visão tradicional de objectos: dados com métodos Olhar para os objectos apenas por uma perspectiva de implementação Nova visão: entidade com responsabilidades perspectiva conceptual Responsabilidades definem o comportamento do objecto Foco no que o objecto faz ajuda a não entrar nos detalhes de implementação muito cedo Só é necessário atender à interface pública do objecto 37 Encapsulamento Visão tradicional do encapsulamento: ocultar dados Nova visão: encapsulamento ocultar qualquer coisa Dados, Implementações, classes derivadas, detalhes de desenho Encapsular dados: dados em Point, Line, Square e Circle estão escondidos de tudo o resto Encapsular métodos: Set Location em Circle Encapsular outros objectos: só Circle tem conhecimento de XXCircle Encapsular tipos: Clientes de Shape não vêem Points, Lines, Squares e Circles 38 4
Encapsulamento e padrões GoF: Considerar o que pode ser variável no desenho Aproximação oposta à de focar na causa do redesenho Em vez de considerar o que pode forçar uma alteração no desenho, considerar o que se pode querer alterar sem redesenho Encapsular o conceito que varia Padrões de desenho Muitos padrões de desenho usam encapsulamento para criar níveis entre objectos podem-se alterar um lado sem afectar o outro lado 39 Análise de comunalidade e variabilidade (James Coplien) Identificar onde as coisas variam e depois identificar como variam Análise de comunalidade: procurar elementos comuns que ajudam a perceber como os elementos de uma família são idênticos O processo de encontrar as coisas comuns define a família Análise de variabilidade: ver como os membros da família diferem Caneta de quadro, lápis, lapiseira instrumentos de escrita (família) usam-se em diferentes materiais, têm forma diferente, Usar análise de comunalidade e variabilidade para encontrar classes 40 5
Relação entre análise de comunalidade e variabilidade, perspectivas e classes abstractas 41 Pensar com Padrões 1. Identificar os padrões 2. Analisar e aplicar os padrões, repetir os passos para cada padrão que ainda não foi incluído no desenho conceptual: 1. Ordenar os padrões pela forma como criam o contexto para cada um dos outros padrões 2. Seleccionar o padrão e expandir o desenho: usando a ordenação feita, seleccionar o próximo padrão e usá-lo para criar um desenho conceptual de alto nível 3. Identificar padrões adicionais 3. Adicionar pormenores: expandir a definição de classes e métodos 42 6
Solução CAD/CAM com Padrões 1. Identificar padrões Abstract Factory: cria conjuntos de objectos relacionados (famílias) Adapter: adapta uma classe existente A à interface necessária para a classe B usar Bridge: Permite que diferentes implementações sejam usadas por um conjunto de objectos relacionados Facade: simplifica um sistema existente A, para uso por uma classe B 2. a) Ordenar os padrões pela forma como criam o contexto para cada um dos outros padrões Contexto = condições interrelacionadas nas quais algo ocorre 43 Solução CAD/CAM com Padrões Ordenar os padrões pela forma como criam o contexto para cada um dos outros padrões Factory o seu contexto é definido pela organização dos objectos que cria Um padrão define a forma como outro se comporta? Dois padrões influenciam-se mutuamente? Adapter Bridge Adapter modificar a interface de uma classe noutra interface que o cliente espera a interface que precisa de adaptação é OOGFeature Bridge separar vários exemplos concretos de uma abstracção da sua implementação a abstracção é Feature e a implementação são os sistemas V1 e V2 Bridge necessita do Adapter para modificar a interface OOGFeature o Bridge usa o Adapter Bridge cria o contexto para Adapter 44 7
Solução CAD/CAM com Padrões Falta Bridge - Facade e Facade Adapter Bridge Facade Facade usado para simplificar interface do sistema V1 Quem usa a nova interface criada é o Bridge: Bridge cria o contexto para Facade Bridge é o padrão que estabelece o contexto para os outros 45 Solução CAD/CAM com Padrões 2. b) Seleccionar o padrão e expandir o desenho padrão BRIDGE abstracção Implementações Diferentes Features com diferentes implementações - > Bridge 46 8
Forma canónica do padrão Bridge Aplicação do padrão Bridge 47 Solução CAD/CAM com Padrões Passos 2.a) e 2.b) com Facade, Adapter Verificar se Facade e Adapter criam contexto um para o outro Relacionados com diferentes partes do desenho independentes Usar ordem arbitrária Aplicar Facade - para simplificar interface do sistema V1 48 9
Solução CAD/CAM com Padrões Passos 2.a) e 2.b) com Adapter Aplicar Adapter para modificar a interface OOGFeature 49 Solução CAD/CAM com Padrões Passos 2.a) e 2.b) com Abstract Factory Aplicar Abstract Factory para garantir que todos os objectos de implementação eram do tipo V1 se tinha um sistema V1 e do tipo V2 se tinha um sistema V2 Desnecessário porque a classe Model sabe-o encapsula a regra de criação 50 10
Comparando soluções Solução Inicial Solução com padrões 51 AJAX Patterns http://ajaxpatterns.org/ 52 11