Arquitetura de Software A arquitetura de um software é uma estrutura de componentes interconectados através de interfaces Componentes são compostos de componentes menores e interfaces A interação entre componentes ocorre através de suas interfaces O que é Arquitetura de Software? O que é arquitetura de software? É uma descrição em alto nível de abstração que permite uma visão completa do sistema. A arquitetura deve dar suporte à funcionalidade do sistema. Desta forma, o comportamento dinâmico do sistema deve ser levado em conta. A arquitetura deve está em conformidade com a qualidade (requisitos não-funcionais). No nível arquitetural, todos os detalhes de implementação devem ser escondidos. O que não é arquitetura de software? Design detalhado (baixo-nível) design de componentes internos, modelos de dados e implementação Arquitetura do sistema físico elementos processadores, topologia de rede, arquitetura de elementos de hardware, etc. Arquitetura de software está relacionada com estes últimos no que se chama de Arquitetura do Sistema. Fonte: Bredemeyer Consulting
O papel da arquitetura no desenvolvimento de software Requisitos Requisitos? Arquitetura de Software Código Código O papel da arquitetura de software Sub-sistemas ou módulos Class a { int x; char v; Func(a,b } Class b... Codificação Compilação e Ligação Produto final Componentes Binários executáveis Modelo abstrato do do programa em em termos de de componentes (sub-sistemas, módulos, etc..) etc..) interconectados entre entre si. si. Modelo Modelo abstrato abstrato --Modelo estático: estrutura dos dos componentes componentes -Modelo dinâmico: físicos físicos que que comportamento formam formam o produto produto --Diferentes Visões final Visões final Arquiteto de software
Definições Software architecture is the structure of the components of a program/system, their interrelationships, and principles and guidelines governing their design and evolution over time. (Garlan and Perry, IEEE TSE, April 1995). The software architecture of a program or computing system is the structure or structures of the system, which comprise software components, the externally visible properties of those components, and the relationships among them (Bass et al. Software Architecture in Practice, Addison-Wesley 1997). Architecture is the organizational structure of a system. An architecture can be recursively decomposed into parts that interact through interfaces, relationships that connect parts, and constraints for assembling parts. Parts that interact through interfaces include classes, components and subsystems (UML 1.3). Exemplo: Arquitetura em camadas Variantes de um sistema aplicativo particular Application systems Sistemas aplicativos distintos Domain specific component systems Non-domain specific component systems System software platform Componentes específicos para a construção do sistema Componentes genéricos como GUI-builders, SGBD, ORB s, COM etc. Sistema operacional, Classes fundamentais, Servidores
Histórico Visão tradicional Conceito de Sub-sistema e Módulos Arquitetura nos Métodos Estruturados Arquitetura nos Métodos Orientados-a-Objetos Visão atual Disciplina emergente [Shaw e Garlan] Estilo arquiteturais Padrões de Design e Frameworks Visões Arquiteturais Linguagens de Descrição Arquitetural (ADL) Desenvolvimento Baseado em Componentes Arquitetura de Software nos Métodos Estruturados Objetivos: Visão abstrata em termos de módulos e funções/procedimentos Diminuir complexidade e facilitar manutenção Princípios: Dividir-e-conquistar Informação escondida Independência Funcional Alta coesão e baixo acoplamento Técnicas Decomposição Funcional Refinamento sucessivo (passo-a-passo) Representação Diagramas de caixas e linhas Linguagens de descrição de módulos
Estilo de arquitetura A arquitetura básica é hierárquica: um programa principal decomposto em várias subrotinas ou funções Sub-rotinas podem ser agrupadas em módulos Forma de Interação: Chamada-de-função e passagem de parâmetros Conceitos: Sub-rotinas módulos Fan-in e Fan-out: mede o grau de dependência entre as sub-rotinas. Coesão e Acoplamento: uma boa arquitetura deve ter alta coesão e baixo acoplamento Fan-in Fan-out Baixa coesão Alto acoplamento Alta coesão Baixo acoplamento Arquitetura de Software nos Métodos Orientados-a-Objetos Objetivos Agrupamento de dados e funções num único componente Visão abstrata em termos de classes/objetos e troca de mensagens Princípios: Independência Conceitual Encapsulamento Técnicas Identificação de objetos Especialização de objetos (Herança) Padrões de Projetos (Design Patterns) Representação UML: diagramas de classes, de seqüência, de colaboração e de estados
Exemplo de arquitetura nos métodos OO, usando UML... Panel Applet java applet HelloWorld paint() Graphics awt lang Diagrama de Classes Pacotes Conceitos (Sommerville, 2000) Design Arquitetural O processo de design para identificar os subsistemas que formam o sistema e o framework para o controle e comunicação do sub-sistema. Envolve a identificação dos principais componentes de sistema e suas comunicações. Representa a ligação entre a especificação e o design detalhado Realizado em paralelo com as atividades de especificação nos estágio iniciais do processo. Arquitetura de Software A saída do processo de design é a descrição da arquitetura de software
Design Arquitetural (Sommerville, 2000) O processo de design arquitetural Estruturação do sistema O sistema é decomposto em vários sub-sistemas e a comunicação entre eles é identificada. Modelagem do controle Um modelo dos relacionamentos de controle entre as diferentes partes do sistema é estabelecido. Decomposição modular Os sub-sistemas identificados são decompostos em módulos. Sub-sistemas e módulos Um sub-sistema é também um sistema e é independente dos serviços prestados por outros sub-sistemas. Um módulo é um componentes do sistema que provê serviços para outros componentes, mas não é considerado um sistema separado. Estruturação do Sistema Vision system Sistema robô de controle de embalagem (Sommerville, 2000) Object identification system Arm controller Gripper controller Packaging selection system Packing system Conveyor controller
Arquitetura Cliente-Servidor Client 1 Client 2 Client 3 Client 4 Wide-bandwidth network Catalogue server Video server Picture server Hypertext server Catalogue Film clip files Digitiz ed photographs Hypertext web Fonte: Sommerville, 2000 Arquitetura em Camadas (máquina abstrata) Version management Object management Database system Operating system Fonte: Sommerville, 2000
Sistema de controle em tempo-real Sensor processes Actuator processes System controller Computation processes User interface Fault handler Fonte: Sommerville, 2000 Modelagem de controle Determina o fluxo de controle entre os subsistemas. Controle centralizado Um sub-sistema tem a responsabilidade de controlar (iniciar, parar,..) os outros sub-sistemas. Controle baseado-emeventos Cada sub-sistema pode responder a eventos gerados pelo ambiente externo ou outros subsistemas. Fonte: Sommerville, 2000 Handler 1 Process 1 Interrupt vector Routine 1 Handler 2 Process 2 Main program Routine 2 Routine 3 Routine 1.1 Routine 1.2 Routine 3.1 Routine 3.2 Interrupts Handler 3 Process 3 Handler 4 Process 4
Decomposição modular Decomposição do sub-sistema em módulos Modelo de Objetos Módulos são objetos que podem interagem entre si. Objetos são instâncias de classes, com atributos e métodos. Modelo de Fluxo de Dados Cada sub-sistema é decomposto em módulos funcionais que transformam entradas em saídas. Conhecido como pipeline (estilo tubos-e-filtros). Modelo Repositório de Dados Existe um repositório (banco) de dados. Os módulos operam realizando transações no repositório. Diferentes modelos de controle podem ser utilizados em cada um dos modelos de decomposição. Exemplos de decomposição modular Customer customer# name address credit period Payment invoice# date amount customer# Invoice invoice# date amount customer issue () sendreminder () acceptpayment () sendreceipt () Receipt invoice# date amount customer# Decomposição em Objetos, modelado com UML Read issued invoices Identify payments Issue receipts Receipts Decomposíção em Fluxo de Dados, Modelado com DFD Invoices Payments Find payments due Issue payment reminder Reminders Fonte: Sommerville, 2000