Slides - DIMAp
Transcrição
Slides - DIMAp
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 Engenharia de Software, Jair C Leite 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 Engenharia de Software, Jair C Leite O papel da arquitetura no desenvolvimento de software Requisitos Requisitos ? Arquitetura de Software Código Código Engenharia de Software, Jair C Leite O papel da arquitetura de software Sub-sistemas ou módulos Class a { int x; char v; Func(a,b } Produto final Class b... Compilação e Ligação Codificação Modelo Modeloabstrato abstratodo doprograma programa em termos de componentes em termos de componentes (sub-sistemas, (sub-sistemas,módulos, módulos,etc..) etc..) interconectados interconectadosentre entresi. si. --Modelo Modeloestático: estático:estrutura estrutura -Modelo dinâmico: -Modelo dinâmico: comportamento comportamento --Diferentes DiferentesVisões Visões Componentes Binários executáveis Modelo Modeloabstrato abstrato dos doscomponentes componentes físicos físicosque que formam formamooproduto produto final final Arquiteto de software Engenharia de Software, Jair C Leite 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). Engenharia de Software, Jair C Leite Exemplo: Arquitetura em camadas Variantes de um sistema aplicativo particular Application systems Domain specific component systems Non-domain specific component systems System software platform Sistemas aplicativos distintos 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 Engenharia de Software, Jair C Leite 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 Engenharia de Software, Jair C Leite 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 Engenharia de Software, Jair C Leite 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: Sub-rotinas – Chamada-de-função e passagem de parâmetros • Conceitos: módulos Fan-in Fan-out – 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 Baixa coesão Alto acoplamento Alta coesão Baixo acoplamento Engenharia de Software, Jair C Leite 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 Engenharia de Software, Jair C Leite Exemplo de arquitetura nos métodos OO, usando UML ... Panel java Applet applet awt HelloWorld Graphics lang paint() Diagrama de Classes Pacotes Engenharia de Software, Jair C Leite 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 Engenharia de Software, Jair C Leite 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. Engenharia de Software, Jair C Leite Estruturação do Sistema V i si o n s y s te m Sistema robô de controle de embalagem (Sommerville, 2000) O b j ec t i d e n t if i c a t io n s y s te m Ar m c o n tr o ll er G ri pp e r c o n tr o ll er P a c k a g in g s el e c ti o n s y s te m P a c ki ng s y s te m C o nve yo r c o n tr o ll er Engenharia de Software, Jair C Leite 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 Engenharia de Software, Jair C Leite Arquitetura em Camadas (máquina abstrata) V e rsi on m an ag em e n t O b je c t m ana ge m e n t D a t a b as e s ys te m O p e rat in g s ys tem Fonte: Sommerville, 2000 Engenharia de Software, Jair C Leite Sistema de controle em tempo-real Sensor processes Actuator processes System contr oller Computation processes User interface Fault handler Fonte: Sommerville, 2000 Engenharia de Software, Jair C Leite 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 Main program Routine 1 Routine 1.1 Routine 2 Routine 1.2 Routine 3 Routine 3.1 Routine 3.2 Interrup ts Interrup t vecto r Han dler 1 Han dler 2 Han dler 3 Han dler 4 Pro cess 1 Pro cess 2 Pro cess 3 Pro ces s 4 Engenharia de Software, Jair C Leite 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. Engenharia de Software, Jair C Leite Exemplos de decomposição modular Customer Receipt customer# name address credit period invoice# date amount customer# Invoice invoice# date amount customer Payment Decomposição em Objetos, modelado com UML issue () sendR eminder () acceptPayment () sendR eceipt () invoice# date amount customer# Read issued invoices Invoices Issue receipts Receipts Find payments due Issue payment reminder Identify payments Decomposíção em Fluxo de Dados, Modelado com DFD Reminders Payments Fonte: Sommerville, 2000 Engenharia de Software, Jair C Leite