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