Arquitetura de software Problema: vamos implementar um clone do compraentrega.com.br Mantém preços atualizados Recebe encomendas e pagamento Recomenda itens a usuários Por onde começamos? “Arquitetura = {Elementos, Organização, Decisões}” (Perry & Wolf) “a estrutura ou estruturas do sistema, a qual é composta de elementos de software, as propriedades externamente visíveis desses elementos, e os relacionamentos entre eles.” (Bass et al.) Arquitetura é a organização fundamental de um sistema, representada por seus componentes, seus relacionamentos com o ambiente, e pelos princípios que conduzem seu design e evolução. (IEEE) Elementos em comum: Descrição dos componentes principais Relacionamentos e interações entre componentes Omite informação sobre o conteúdo dos componentes não relacionada a suas interações O comportamento dos componentes é uma parte da arquitetura enquanto possa ser discernido do ponto de vista de outro componente A arquitetura define uma lógica por trás dos componentes e da estrutura Arquitetura é processo e artefato (assim como projeto) “Arquitetura do Facebook” vs. “Um livro sobre Arquitetura de Software” Visão focada em módulos funcionais Visão focada em elementos de processamento e dados Arquitetura não é só sobre funcionalidade Envolve: Funcionalidade Usabilidade Desempenho Reuso Segurança Facilidade de compreensão Restrições e equilíbrio de fatores econômicos e tecnológicos 9 A arquitetura envolve um conjunto de decisões de design, regras ou padrões que restringem o projeto e a implementação arquitetura projeto implementação Código As decisões de arquitetura são as mais fundamentais e alterálas provoca efeitos colaterais significativos. Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 10 Distinções importantes Arquitetura vs. Projeto A arquitetura é um aspecto do projeto, focada em elementos que são importantes estruturalmente elementos que têm impacto significativo em desempenho, confiabilidade, custo, adaptabilidade, etc. A arquitetura não diz respeito ao projeto detalhado de componentes individuais Arquitetura vs. Infraestrutura Infraestrutura é parte integral e importante da arquitetura A arquitetura define interoperabilidade entre a infraestrutura e os componentes da aplicação Arquitetura aborda estrutura, decomposição, interfaces, etc. Arquitetura aborda... Aspectos dinâmicos Argumentação lógica Adequação ao contexto “A arquitetura é um diagrama” A arquitetura é plana apenas em casos muito triviais A arquitetura tem muitas dimensões, que representam múltiplas questões de múltiplos stakeholders Usar um único diagrama para representar todas as dimensões da arquitetura leva à sobrecarga semântica (leia-se “confusão”) Arquitetura requer múltiplas visões como e porque Como e por que Queremos organizar módulos, dependências, processos e acesso a dados* Queremos promover: Integridade e qualidade do sistema Controle da complexidade Previsibilidade Testabilidade Reuso Comunicação Organização e gerência de projetos Arquitetar ou não? Sistemas muito simples têm arquitetura trivial Sistemas grandes dependem de arquitetura Alguns conceitos relevantes Acoplamento Coesão Interface Componentes Conectores Estilo arquitetural Padrões de projeto Visão arquitetural Acoplamento Grau de interconexão entre diferentes pedaços de um sistema Pedaços menos acoplados são mais fáceis de entender, testar, reusar e manter Baixo acoplamento também promove o paralelismo de implementação Alto Acoplamento (efeito cascata) Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 19 Conceitos Coesão Quão proximamente são relacionadas as atividades dentro de um único pedaço (componente) ou entre um grupo de padaços? Componentes altamente coesos = relacionados a apenas UMA funcionalidade Impressão Relatório Alta coesão Impressão Relatório Interface Baixa coesão Interface Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 20 Interface As maneiras em que subsistemas dentro de um projeto maior interagem são claramente definidas. Idealmente, interações são especificadas de um modo que possam se manter relativamente estáveis ao longo do ciclo de vida do sistema. Um modo de alcançar isso é através de abstrações sobre a implementação concreta. Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 21 Conceitos Interface Exemplo clássico: tomada! Interface bem definida Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 22 Conceitos Interface Exemplo clássico: tomada! Abstração sobre... Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) ... a implementação concreta 23 Componentes • Unidades de distribuição, montagem, implantação e substituição • Executam funcionalidade não trivial • Um componente é definido pelos serviços que provê e pelos serviços que requer • Não necessariamente uma única unidade de código ou um único executável (não estamos falando de ES orientada a componentes) Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 24 Conectores Veículos de comunicação entre componentes Descrição das interações entre componentes Exemplos de conectores: Chamadas de procedimento Anúncios de eventos Protocolos de comunicação Invocações de serviços Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 25 Estilo ou padrão arquitetural Vocabulário de tipos de componentes e conectores + Conjunto de restrições sobre como eles podem ser combinados Exemplos: Cliente-Servidor, Pipes and Filters, Model-View-Controller, Broker Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 26 Padrões de projeto Soluções de projeto de baixo nível Classes, objetos... Mais detalhada Visão interna dos componentes da arquitetura Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 27 Visão arquitetural Diferentes visões pedem diferentes representações Diagramas de pacotes de componentes de classes de sequência Visão estática Visão dinâmica Padrões Arquiteturais Um estilo/padrão arquitetural expressa: Uma organização estrutural Um conjunto pré-definido de subsistemas e suas responsabilidades Inclui regras e diretrizes para organizar o relacionamento entre os subsistemas São “templates” para arquiteturas concretas Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 31 O que vimos hoje? Arquitetura de software O que é? Para que serve? Como documentar? O que é padrão arquitetural Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 32 O que veremos na próxima aula? Padrão Layers (Camadas) Arquitetura de Software e Padrões Arquiteturais (Hyggo Oliveira de Almeida) 33