PROJETO DE ARQUITETURA (PARTE 2) Projeto Detalhado de Software (PDS) Profa. Cynthia Pinheiro Antes de mais nada... 5ª Lista de Exercícios Já está disponível no site a 5ª Lista de Exercícios Entrega: dia 29/11, no horário da aula. Site: www.vindematrix.com.br/aulas/ Próximas datas: 2ª Prova: 11/12/2017 e 13/12/2017 (2ª chamada) Prova Coringa: Substitui a prova de menor nota É opcional 5 questões discursivas (não haverá objetivas e nem QP) Assunto: toda a matéria do semestre Data de aplicação: 13/12/2017. 1
Padrões de Projeto GoF (Gang of Four) Evolução da Arquitetura Lógica: São feitas referências ao uso de padrões de projeto como o Adapter (Adaptador), Fachada (Façade), Fábrica ou Strategy (Estratégia) 2
Acoplamento entre camadas e pacotes: Linhas de dependência Diagrama da Visão Lógica: ilustra acoplamentos importantes entre as camadas e os pacotes. Acoplamento pacote-pacote: Diagrama de Arquitetura Lógica mais comum: oculta os tipos específicos e foca apenas no acoplamento pacote a pacote (apenas os mais importantes e suas dependências). 3
Interação entre camadas e entre pacotes: Diagramas de Pacotes mostram informações estáticas. Para entender a dinâmica na arquitetura lógica, incluir um diagrama que mostre como os objetos se conectam e se comunicam entre as camadas Diagrama de Interação. Foca as colaborações conforme elas cruzam os limites das camadas e de pacotes. Fazer apenas para os cenários arquiteturalmente mais significativos: ilustram muitos aspectos das grandes idéias ou aquelas de larga escala. Colaboração com o padrão Camadas: Pacotes simples x Subsistemas: Alguns pacotes ou camadas não são apenas grupos conceituais de coisas, mas são verdadeiros subsistemas, com comportamentos e interface. 4
Colaboração com o padrão Camadas: Fachada: Número de interfaces expostas para as camadas superiores. Colaboração com o padrão Camadas: Fachadas de sessão e a camada de aplicação 5
Colaboração no padrão Camadas: Acoplamento em camadas relaxadas: Camadas relaxadas: Elementos de uma camada colaboram ou estão acoplados a várias outras camadas. O contrário seria a arquitetura em camadas de um protocolo de redes, em que um camada só pode ter acesso aos serviços da camada imediatamente inferior. Colaboração com o padrão Camadas: Acoplamento típico: Todas as camadas superiores tem dependências com as camadas de Serviços Técnicos. Ex: todas as camadas dependem do pacote java.util. É principalmente a camada de Domínio que tem dependência em relação à camada de Infraestrutura de Negócio. Camada de Infraestrutura de Negócio 6
Colaboração com o padrão Camadas: Acoplamento típico: A camada de IU faz solicitações à camada de Aplicação e esta faz solicitações de serviços à camada de Domínio. A camada de IU não solicita à camada de Domínio, a não ser que não exista camada de Aplicação. Camada de Aplicação Colaboração com o padrão Camadas: Acoplamento típico: 7
Outros tópicos do padrão Camadas: Visão Lógica x Implantação da Arquitetura As camadas arquiteturais são uma visão lógica da arquitetura e não uma visão da implantação dos elementos. Dependendo da plataforma, todas as camadas podem ser implantadas no mesmo nó (sistema Desktop) ou podem ser distribuídas em diversos nós (vários computadores e dispositivos, aplicações Web). Outros tópicos do padrão Camadas: A Camada de Aplicação é opcional? Estando presente, é responsável por saber o estado da sessão dos clientes, mediando as camadas de IU e de Domínio e controlando o fluxo de trabalho (a ordem das janelas ou páginas Web, por exemplo). Possui os objetos do Padrão Controlador (GRASP). 8
Outros tópicos do padrão Camadas: A Camada de Aplicação é útil: Quando várias interfaces com o usuário serão usadas. Os objetos da camada de Aplicação poderiam ser Adaptadores, que coletam e consolidam dados para diferentes IUs. Também podem ser fachadas que empacotam e ocultam o acesso à Camada de Domínio. Outros tópicos do padrão Camadas: A Camada de Aplicação é útil: Quando trata-se de um sistema distribuído e a camada de Domínio está em um nó diferente do da camada de IU. A camada de Domínio não pode ou não deve manter o estado da sessão. Existe um fluxo de trabalho definido em termos da ordem das janelas ou das páginas que são apresentadas. 9
Outros tópicos do padrão Camadas: Contraindicações e responsabilidades das camadas Em alguns contextos, a adição de camadas traz problemas de desempenho. Exemplo: Jogos de alto desempenho, onde camadas de abstração e indireção logo acima da camada de acesso a componentes da placa gráfica pode levar a problemas de performance. Outros tópicos do padrão Camadas: Contraindicações e responsabilidades das camadas O Padrão Camadas é um de vários padrões arquiteturais fundamentais, não sendo aplicável a todos os problemas. O Padrão Dutos e Filtros é útil quando a aplicação envolve o processamento de algo por meio de uma série de transformações e a ordem destas pode ser alterada (processamento de imagens, por exemplo). 10
Usos conhecidos do padrão Camadas: Máquinas Virtuais e Sistemas Operacionais Camadas mais baixas: encapsulam o acesso a recursos físicos e forneciam serviços de processos e E/S Camadas mais altas: Chamam estes serviços. A Máquina Virtual, com uma linguagem universal em bytecodes, está em uma camada situada sobre os recursos do sistema operacional e da máquina. Aplicações podem ser escritas em camadas mais altas na arquitetura e executadas em diferentes plataformas sem recompilação. Usos conhecidos do padrão Camadas: Sistemas de Informação: Arquitetura clássica em 3 camadas Interface: janelas, relatórios, etc. Lógica da Aplicação: tarefas e regras que governam o processo. Armazenamento: Mecanismo de armazenamento persistente. 11
Usos conhecidos do padrão Camadas: Sistemas de Informação: Arquitetura clássica em três camadas Usos conhecidos do padrão Camadas: Sistemas de Informação: Arquitetura clássica em três camadas Padrões relacionados: Indireção: as camadas podem acrescentar um nível de indireção para os serviços de nível inferior Variações protegidas: as camadas podem proteger contra o impacto de implementações variadas Acoplamento Baixo e Alta Coesão: as camadas apoiam fortemente estes dois princípios. 12
Separação Modelo-Visão e comunicação para cima : Como as janelas obtém as informações que exibem? Em geral: enviar mensagens a objetos de domínio, pedindo informações, que são exibidas em janelas Modelo de exibição de atualizações chamado de Consulta (Polling) ou puxar-de-cima. Mas como informar às janelas se um objeto do domínio mudar? Uma consulta a cada segundo, por exemplo, pode não ser suficiente. Separação Modelo-Visão e comunicação para cima : Mais eficiente: fazer com que alguns objetos do domínio que estão mudando informem às janelas, para que elas possam atualizar-se. Exemplo: Aplicações de monitoramento (gerenciamento de redes de telecomunicações) É necessário um modelo de exibição do tipo empurrar-debaixo. Solução? 13
Modelo-Visão e comunicação para cima : Solução? Padrão Observador: fazer o objeto da IU implementar uma interface Ouvinte de Propriedade. Padrão Façade: Adicionar uma fachada dentro da camada de IU que recebe os pedidos de baixo. Bibliografia Esta aula foi retirada dos seguintes livros/artigos: LARMAN, Craig. Utilizando UML e Padrões: uma introdução à análise e ao projeto orientados a objetos e ao desenvolvimento iterativo. 3. ed. Porto Alegre: Bookman, 2007. 14