Arquitetura de Software
Universidade Federal de Pernambuco
Centro de Informática
Recife - Brazil
Introdução

Raízes da disciplina
 Dijkstra,
1968

particionamento

estruturação

não só a programação
 Parnas,
1970 - 1972

estruturação

famílias de programas
–
economia no desenvolvimento e na manutenção
Introdução

Raízes da disciplina
 DeRemmer,
1975

programming-in-the-large : programação da estrutura

comum em sistemas distribuídos

programming-in-the-small: programação das “funções” do
sistema

uso comum (C, Pascal)
Introdução

Idéias fundamentais da Arquitetura de Software
 Estrutura
é o ponto chave
 Reusabilidade
 A orientação
de elementos de “grande escala”
a objetos reusa elementos de
“pequena escala”
Introdução

Motivação
 problemas


aumento do tamanho dos softwares
aumento na complexidade dos softwares
A importância da Arquitetura de Software
para os projetistas de software nos anos 90
é comparável a importância das estruturas
de dados para os programadores nos anos 60
Introdução

Vantagens
 sistemas
podem ser construídos rapidamente
reusando-se ou gerando-se grandes componentes
desenvolvidos independentemente
 predizer
qualidades (desempenho,
mantenabilidadde) do sistema a partir de sua
arquitetura, sem um projeto ou um código detalhado
Introdução

Vantagens

comunicação

decisões de projeto nas fases iniciais


restrições sobre a implementação

predizer atributos de qualidade

base para treinos de iniciantes

visão do sistema e das mudanças
transferência de conhecimento

linhas de produtos
Princípios

Termo
Disciplina
 área emergente da ES
 aborda as questões ligadas à
estrutura do software
Estrutura do software
 várias definições
 nenhuma aceita como padrão
 semelhanças no núcleo das
definições e diferenças nas
características adicionais
Princípios

Definição 1
“Uma arquitetura de software deve
conter: a definição dos elementos de
projeto que compõe o software; a
descrição das interações entre estes
elementos; os padrões de composição
dos elementos; e um conjunto de
restrições sobre estes padrões.”
Princípios

Definição 2
“A descrição da arquitetura de software
é um passo intermediário entre a análise
de requisitos e o projeto. Esta
descrição consiste de elementos
arquiteturais, as interações entre estes
elementos, e as restrições sobre estes
elementos e sobre
as suas interações.”
Princípios

Definição 3
“Uma arquitetura de software é um
conjunto de componentes genéricos
junto com uma descrição de
propriedades, regras de como estes
componentes podem interagir, e
estilo de interação destes
componentes.”
Princípios

Definição 4
“Arquitetura de software é a
estrutura de
um programa ou um sistema, seus
relacionamentos e os princípios que
guiam o seu projeto e a sua evolução
no tempo.”
Princípios

Modelos
 Perry

elementos
–

processamento, armazenamento, interação
formas
–

& Wolf, 1992
propriedades dos elementos
rationale
–
restrições de composição dos elementos
Princípios

Modelos
 Shaw
& Garlan, 1996

Componentes

Conectores

Configuração
Princípios

Componentes

modela a computação e o armazenamento de informações

desenvolvido independentemente

exemplos de componentes

cliente

servidor

aplicação inteira
Princípios

Conectores
 modela
as interações entre os componentes
 desenvolvido
 exemplos

independentemente
de conectores
protocolos de comunicação
Princípios

Configuração
 topologia
 composição
 conjunto
de componentes combinados usando-se
os conectores
 grafo
de componentes e conectores ligados,
descrevendo uma estrutura arquitetural
Princípios

Visão de uma Arquitetura de Software
Componente
Java
C++
Conector
C
Configuração
Princípios

Componentes e formas de interação
Componentes
Tipos de interação
 Módulos
 Objetos
 Filtros
 Processos
 Arquivo de dados
 Base de dados
Chamada de procedimento
Dados compartilhados
Invocação de método
Fluxo de dados ( pipe )
Passagem de mensagem, RPC
Leitura e escrita
Consulta
Princípios

Módulos
Chamada de Procedimento
Módulo
Módulo
Módulo
Princípios

Objetos
Objeto
Invocação de método
Objeto
Objeto
Princípios

Programas e funções
Programa
Principal
Chamada de função
funções
funções
funções
funções
Princípios

Software X Hardware
Arquitetura de Hardware
Arquitetura de Software
 número pequeno de
elementos de projeto
 mudança de escala
com a replicação dos
elementos de projeto
 ênfase na organização e
configuração
 grande número de
elementos de projeto
 mudança de escala com
a adição de novos
elementos de projeto
 ênfase na organização e
configuração
Princípios

Software X Redes de Computadores
Arquitetura de Rede
Arquitetura de Software
 nós
 conexões
 poucas topologias
 componentes
 conectores
 muitas topologias
Princípios

Software X Arquitetura de Construção
Arquitetura de Construção
Arquitetura de Software
 visões enfatizando diferentes
aspectos da construção
 restrição sobre os elementos de
projeto e a composição
 estreita relação entre o estilo
arquitetural e os princípios de engenharia
 a relação entre o estilo e o
material utilizado para a
construção é fundamental
 visões para diferentes e
usuários
 estilos arquiteturais
 princípios de engenharia
e estilo arquitetural
 implementação ( algoritmos
e estrutura de dados que
satisfazem a arquitetura )
Princípios

Sobre Arquitetura de Software
 descrição
mais abstrata no ciclo de vida do
software
 suprime
detalhes da implementação
Arquitetura de Software sempre existiu,
mas era implícita
Princípios

Sobre Arquitetura de Software

separação de interesses


funcionalidade
interação
Arquitetura de Software separa claramente
a funcionalidade (componentes) da interação
(conectores)
Princípios

Sobre Arquitetura de Software
Funcionalidade+interação
Funcionalidade
interação
Princípios

Sobre Arquitetura de Software
 define
aspectos estruturais importantes
 fornece
uma base para as outras fases de
desenvolvimento do software
a
arquitetura é normalmente descrita usando-se
linhas e caixas de diagramas acompanhados por
uma descrição textual
Princípios

Desenvolvimento de software
 Desenvolvimento tradicional
Análise de requisitos
 Desenvolvimento baseado em arquitetura
Análise de requisitos
Análise do domínio
Desenvolver / escolher a arquitetura
Arquitetura
Representação da arquitetura
Análise e avaliação da arquitetura
Projeto
Projeto
Implementação
Implementação
Princípios

Arquitetura X Projeto
Arquitetura
Projeto
 componentes e conectores
 procedimentos e interfaces
 restrições sobre componentes  algoritmos e estruturas de
e conectores
 composição de componentes
dados
 composição procedural
Princípios

Por que definir uma Arquitetura?
 reuso
de elementos de projeto permitindo maior
rapidez na construção do software
 definindo-se
uma arquitetura é possível predizer
algumas características do software
Princípios

Por que definir uma Arquitetura?
 facilita
a comunicação entre os desenvolvedores do
software
 permite
um entendimento maior da evolução do
software
Princípios

Por que definir uma Arquitetura?
 possibilidade
de análise da descrição da arquitetura
nas fases iniciais do desenvolvimento

consistência da configuração, componentes e conectores

propriedades não funcionais

conformidade com um determinado estilo
Estilos Arquiteturais

Termo
 padrão
organizacional
 padrão
arquitetural
 padrão
idiomático
 padrão
de organização estrutural
 idioma
arquitetural
Estilos Arquiteturais

Termo
“Um estilo arquitetural consiste de um
vocabulário de elementos de projeto, um
conjunto de regras de configuração, uma
interpretação semântica da composição dos
elementos, e um conjunto de análises que
podem ser executadas sobre um sistema
construído em um determinado estilo.”
Estilos Arquiteturais

Termo
 Vocabulário
 idioma
de projeto
 restringe
os elementos arquiteturais que podem ser
utilizados em uma descrição de arquitetura
 elementos

arquiteturais:
componentes , conectores
Estilos Arquiteturais

Regras de Configuração
 restrições
topólogicas
 restrigem
as composições dos elementos
arquiteturais

proibição de ciclos no estilo Fipe-filter

relacionamento n-para-1 no estilo Cliente-servidor
Estilos Arquiteturais

Análise
 verificação

de propriedades
ausência de impasses em um estilo Cliente-servidor
Estilos Arquiteturais

Sobre estilo arquitetural
 uso

ad hoc
“Camelot é baseado no modelo Cliente-servidor e usa
RPC para comunicação remota e local dos clientes e
servidores”
Estilos Arquiteturais

Sobre estilo arquitetural
 define
uma família e não apenas um sistema
 explora
os pontos comuns entre famílias de
sistemas e ignora detalhes específicos
a
construção de compiladores é o primeiro exemplo
do uso de estilos
Estilos Arquiteturais

Sobre estilo arquitetural

a descrição da arquitetura é uma instância de um
estilo
 exemplos

Cliente-servidor

Pipe-filter

Objetos

Invocação implícita

Camadas, repositórios
Estilos Arquiteturais
Arquitetura de software
Request-reply
Cliente
Servidor
Cliente
Cliente
Estilo Cliente-servidor
Estilos Arquiteturais
Arquitetura de software
Filtro
Pipe
Filtro
Filtro
Estilo Pipe-Filter
Estilos Arquiteturais
Arquitetura de software
Filtro
Pipe
Filtro
Filtro
Estilo Pipe-Filter
Estilos Arquiteturais

Por que definir estilos
 reuso
de projetos
 reuso
de código
o
uso de estruturas convencionais facilita o
entendimento da arquitetura

“cliente-servidor”
Estilos Arquiteturais

Por que definir estilos
a
restrição do espaço de projeto permite análises
mais especializadas para os estilos
 “menos
é mais”
Linguagem de Descrição de
Arquitetura

ADL - Architecture Description Language

O que podemos esperar de uma linguagem para
descrição de arquitetura de software?
 ênfase
em estruturas de alto nível em oposição a
detalhes de implementação
Linguagem de Descrição de
Arquitetura
 Composição

divisão hierárquica de um sistema complexo em partes
menores
 Abstração

explicitar a estrutura de mais alto nível
 Reusabilidade

componentes, conectores e padrões de arquitetura
Linguagem de Descrição de
Arquitetura

Configuração

separação da descrição de estruturas compostas da
descrição dos elementos dessas composições
 Análise

permite verificar propriedades dos sistemas,
especialmente referentes a Arquiteturas Dinâmicas
Linguagem de Descrição de
Arquitetura

Heterogeneidade

habilidade para combinar diferentes padrões arquiteturais
em um mesmo sistema

possibilidade de combinar componentes escritos em
linguagens diferentes
Linguagem de Descrição de
Arquitetura
 habilidade
para representar componentes
(primitivos ou compostos)
 habilidade
para representar conectores
 abstração
e encapsulamento
 tipos
e checagem de tipos
 permitir
a construção de ferramentas de análise
Linguagem de Descrição de
Arquitetura
 abstração
de componentes
 abstração
de comunicação
 integridade

de comunicação
a comunicação é limitada a componentes conectados
arquiteturalmente a outros
 habilidade
de modelar arquiteturas
Linguagem de Descrição de
Arquitetura

Modelagem de componentes
 conceitos

MetaH
–

um programa
C2
–

diferentes em cada ADL
uma aplicação inteira (componentes hierárquicos)
Wright
–
componente
Linguagem de Descrição de
Arquitetura

Modelagem de componentes
 interfaces
de componentes

pontos de interação com o ambiente externo

permitem a percepção da semântica dos componentes
–
serviços oferecidos
–
portas de comunicação
Linguagem de Descrição de
Arquitetura

Modelagem de componentes
 componentes
 uso

como tipos para serem reusados
explícito de parametrização
ACME, Darwin e Rapide
Linguagem de Descrição de
Arquitetura

Modelagem de componentes
 restrições
podem ser definidas por uma linguagem
específica
 componentes
podem evoluir

subtipagem de componentes

refinamento
Linguagem de Descrição de
Arquitetura

Modelagem de componentes
 especificação

de propriedades não-funcionais
permite simulação do comportamento em tempo de
execução

análise dos componentes

verificação de restrições

auxilia no gerenciamento do projeto
Linguagem de Descrição de
Arquitetura

Modelagem de conectores
 não
necessariamente corresponde a uma unidade
de compilação em uma implementação
 podem

ser modelados explicitamente
possuem interface própria
Linguagem de Descrição de
Arquitetura

Modelagem de conectores

podem ser modelados como entidades de primeira
classe

tipos ou instâncias

estabelecer restrições de uso via interface

suportar evolução
Linguagem de Descrição de
Arquitetura

Modelagem de configurações
a
estrutura de um sistema deve, idealmente,
permitir que a especificação da configuração seja
compreendida sem se conhecer detalhes internos
dos componentes e os conectores
Linguagem de Descrição de
Arquitetura

Modelagem de configurações
 descrição
de configurações permite estimar
aspectos concorrentes e distribuídos de uma
arquitetura
 ADLs
podem modelar evolução e dinamismo das
configurações
Linguagem de Descrição de
Arquitetura

Modelagem de configurações
 suporte
à composição hierárquica é fundamental
em uma ADL
 em
algumas ADLs uma configuração é modelada
simplesmente como um componente composto

Darwin, UniCon, CL
Linguagem de Descrição de
Arquitetura

Modelagem de configurações
 heterogeneidade

uma configuração deve idealmente lidar com componentes
e conectores programados em diversas linguagens
Linguagem de Descrição de
Arquitetura

Modelagem de configurações
a
especificação de restrições é fundamental para
descrever dependências entre componentes e
conectores
 Uma ADL
deve permitir refinamento da arquitetura
Linguagem de Descrição de
Arquitetura

Modelagem de configurações
 devem
suportar especificação e desenvolvimento
de sistemas que possam sofrer alterações durante
sua execução.

C2

Darwin

Rapide

ZCL

Wright
Linguagem de Descrição de
Arquitetura

Exemplo - Sistema de Monitoramento de Pacientes
O sistema de monitoramento de pacientes
consiste
de medições periódicas ou por solicitação de
pulso, temperatura e pressão através de
sensores colocados no paciente. Tais sensores
disparam um alarme sempre que qualquer das
medições atingirem valores não adequados.
Linguagem de Descrição de
Arquitetura

Exemplo
Hospital
alarme
Enfermeira
estado
alarme
Paciente
estado
Linguagem de Descrição de
Arquitetura

Exemplo - CL
system hospital
begin
use task enfermeira, paciente;
create cama from paciente;
create cuidado from enfermeira ;
link cama.alarme to cuidado.alarme;
link cuidado.estado to cama.estado;
activate cuidado, cama;
end.
Linguagem de Descrição de
Arquitetura

Wright
 Componentes

interface (portas)

computação (comportamento)
 Conectores

Role (comportamento de um único participante)

Glue (comportamento completo)
 Configuração

componentes + conectores
Linguagem de Descrição de
Arquitetura

Exemplo - pipe-filter
Este sistema lê um conjunto caracteres e
transforma-os em caracteres maiúsculos
Linguagem de Descrição de
Arquitetura

Exemplo - pipe-filter
input
UpperCase
output
right
left
right
Split
left
Merge
Linguagem de Descrição de
Arquitetura

Exemplo - pipe-filter
Component SplitFilter
port input [entrada de dados]
port left [porta de saída para o UpperCase]
port right [porta de saída para o Merge]
computation [lê dados e envia-os para as
portas de saída]
left
right
Split
Linguagem de Descrição de
Arquitetura

Exemplo - pipe-filter
Connector Pipe
role Source [envia dados repetidamente]
role Sink [recebe dados repetidamente]
glue right [Sink recebe dados na mesma ordem
que foram enviados por Source]
input
UpperCase
output
Linguagem de Descrição de
Arquitetura
Configuration Capitalise
Componentes Component UpperCase ...
Component MergeFilter ...
Component SplitFilter ...
Conector
Connector Pipe ...
Instanciação Instances
Split : SplitFilter
Upper: UpperCase
Marge: MergeFilter
P1, P2, P3 : Pipe
Attachments
Configuração
Split.left as P1.Source
Upper.input as P1.Sink
Split.right as P2.Source
Merge.right as P2.Sink
Upper.output as P3.Source
Merge.left as P3.Sink
End Capitalise.
Linguagem de Descrição de
Arquitetura

Exemplo - incluindo comportamento
out
A
{a}
in
C {a,c}
A||C||B
B
{b,c}
Linguagem de Descrição de
Arquitetura
Configuration ABC
Component A-Type
Port Out =a Out •
Computation = Out.a  Computation •
Component B-Type
Port In = c  In •
Computation = In.c  b  Computation •
Connector C-Type
Role Origin = a  Origin •
Role Target = c  Target •
Glue Origin = Origin.a  Target.c  Glue •
Instances
A : A-Type
B : B-Type
C : C-Type
Attachments
A.Out as C.Origin
B.In as C.Target
End ABC.
Download

Linguagem de Descrição de Arquitetura