Conceito: Arquitetura de Software |  |
A arquitetura de software representa a estrutura ou as estruturas do sistema, o que consiste em componentes de software, propriedades externamente visíveis dos componentes e os relacionamentos entre eles.
Relacionamentos
Elementos Relacionados | Arquiteto Arquitetura Arquitetura Executável Caderno de Arquitetura Descrever a Arquitetura Design Focar na arquitetura, o mais cedo possível, para reduzir o risco e organizar o desenvolvimento. Refinar a Arquitetura
Descrição Principal
# Introdução A arquitetura de software é um conceito fácil de compreender e que a maioria dos engenheiros conhece intuitivamente, especialmente os que têm pouca experiência, mas é difícil de definir com precisão. Em particular, é difícil traçar uma linha reta entre o design e a arquitetura - a arquitetura é um aspecto do design que se concentra em algumas características específicas. Em Uma Introdução à Arquitetura de Software, David Garlan e Mary Shaw sugerem que a arquitetura de software é um nível de design preocupado com a seguinte questão: "Além dos algoritmos e das estruturas de dados de computação; o design e a especificação da estrutura total do sistema emergem como um novo tipo de problema". As questões estruturais incluem a organização básica e a estrutura global de controle; os protocolos para comunicação, a sincronização e o acesso aos dados; a atribuição das funcionalidades aos elementos de design; a distribuição física; a composição de elementos de design; a característica escalar e o desempenho; e a seleção entre as alternativas de design." [GAR93] Mas existe mais na arquitetura do que apenas a estrutura; o "IEEE Working Group on Architecture" define-a como "o conceito de mais alto nível de um sistema em seu ambiente" [IEP1471]. Abrange também o "adaptar-se" à integridade do sistema, com restrições econômicas, com interesses estéticos, e com estilo. Não é limitada a um foco interno, mas leva em consideração o sistema como um todo em seu ambiente de usuário e em seu ambiente de desenvolvimento - como um foco externo. Neste processo, a arquitetura de um sistema de software (em um dado ponto) é a organização ou a estrutura dos componentes significativos do sistema que interagem através das interfaces, com os componentes compostos de componentes sucessivamente menores e de interfaces. # Descrição da Arquitetura Para falar e raciocinar sobre a arquitetura de software, você deve primeiramente definir uma representação arquitetural, uma forma de descrever aspectos importantes de uma arquitetura. Esta descrição é capturada no Artifact: Caderno de Arquitetura. # Visões Arquiteturais A arquitetura de software pode ser representada em visões arquiteturais múltiplas. Cada visão arquitetural representa um determinado conjunto de interesses específico aos Stakeholders no processo de desenvolvimento: usuários, designers, gerentes, engenheiros de sistema, mantedores, etc. As visões capturam as principais decisões estruturais de design pela demonstração de como a arquitetura de software está estruturada em componentes, e como os componentes são conectados para produzir formas úteis [DEW92]. Estas escolhas de design devem estar relacionadas aos Requisitos funcionais e suplementares e a outras restrições. Mas estas escolhas, por sua vez, adicionam mais restrições aos requisitos e as futuras decisões de design em um menor nível. # Foco Arquitetural Embora as visões acima possam representar todo o design de um sistema, a arquitetura só se preocupa com alguns aspectos específicos: A estrutura do modelo: os padrões organizacionais, por exemplo, a Divisão em Camadas Os elementos essenciais: casos de uso críticos, principais classes, mecanismos comuns, etc, ao contrário de todos os elementos presentes no modelo. Alguns cenários principais que mostram os principais fluxos de controle de todo o sistema. Os serviços para capturar a capacidade de divisão em módulos, características opcionais e aspectos de produtos de linha. Essencialmente, as visões arquiteturais são abstrações (ou simplificações) de todo o design, nas quais as características importantes estão mais visíveis deixando os detalhes de lado. Estas características são importantes quando se raciocina sobre: Evolução do sistema: indo para o ciclo de desenvolvimento seguinte. Reuso da arquitetura, ou partes dela, no contexto de uma linha de produto. Avaliação da qualidade suplementar tal como desempenho, disponibilidade, portabilidade e segurança. Atribuição do trabalho de desenvolvimento às equipes ou aos sub-contratados. Decisões a respeito da inclusão de componentes prontos. Inserção em um sistema maior. # Padrões Arquiteturais Os padrões Arquiteturais são formas pré-prontas para resolver problemas Arquiteturais conhecidos. Uma estrutura arquitetural ou uma infra-estrutura Arquitetural (middleware) é um conjunto de componentes com os quais você pode construir um determinado tipo de arquitetura. Muitas das principais dificuldades arquiteturais devem ser resolvidas na estrutura ou na infra-estrutura, geralmente direcionada a um domínio específico: comando e controle, MIS, sistema de controle, etc. ## Exemplos de padrões Arquiteturais [BUS96] agrupa os padrões arquiteturais de acordo com as características dos sistemas nos quais eles são mais aplicáveis, com uma categoria que trata das questões estruturais mais gerais. A tabela a seguir mostra as categorias apresentadas em [BUS96] e os padrões que elas contêm.
Categoria | Padrão
--- | ---
Estrutura | Camadas
Pipes e Filtros
Quadro-negro
Sistemas Distribuídos | Agente
Sistemas Interativos | Modelo-Visão-Controle
Apresentação-Abstração-Controle
Sistemas Adaptáveis | Reflexão
Microkernel
Consulte [BUS96] para uma descrição completa destes padrões. # Estilo Arquitetural Uma arquitetura de software, ou simplesmente uma visão arquitetural, pode ter um atributo chamado Estilo Arquitetural, que reduz o conjunto de possíveis formas de escolha, e impõem um determinado grau de uniformidade à arquitetura. O estilo pode ser definido por um conjunto de padrões, ou pela escolha de componentes específicos ou de conectores como os blocos de construção básicos.
Este programa e o material que o acompanha são disponibilizados sob a Eclipse Public License v1.0 que acompanha esta distribuição. Direitos Autorais do OpenUP.