Arquitetura de Software
Parte 2/3-Estilos Arquiteturais
Jorge H. C. Fernandes
Junho de 1999
Estilos Arquiteturais mais
Comuns (Mary Shaw, 96)
? Data flow ? Batch ? Pipes e filtros ? Chamada e retorno ? Programa principal e subrotinas
? Remote Procedure Call ? Orientado a objetos/TAD ? Camadas ? Componentes Independentes ? Processos comunicantes ?Cliente/Servidor ? Sistemas de eventos ?Invocação Implícita ? Centrado em Dados ? Repositório ? Blackboard ? Máquina virtual
Arquiteturas Data-Flow
?
O sistema realiza uma série de
transformações sucessivas sobre uma
cadeia de dados
?
A meta é reuso e modificabilidade
?
Principais Estilos
?
Batch sequencial
?
Pipes e filtros
Arquiteturas Data-Flow
Batch Sequencial
? Componentes ou etapas do processamento são
programas independentes, e cada etapa ocorre após o término da outra
? Dados são transmitidos em um bloco entre as etapas
(ou componentes)
Data Entry Validação
Classificação Atualização
Fita
Fita Fita
Arquiteturas Data-Flow
Pipes e Filtros
? Transformação incremental de dados, efetuada por
vários componentes em sucessão
? Filtros são tradutores de dados (usam pouco contexto) ? Pipes conectam filtros (stateless)
? Composição de funções
Filtro #2
Filtro #1 Filtro #3 Dados
Dados Dados Dados Dados Pipe Pipe Dados Dados Dados Dados Dados Dados Dados Dados Dados Dados
Arquiteturas Data-Flow
Pipes e Filtros
?
Vantagens e Desvantagens
? Interatividade e cooperatividade entre filtros é difícil ? Baixa performance
?Abstração de dados é primitiva ?Gerencia de buffers
? Simplicidade
Arquiteturas de Chamada e
Retorno
?
Criam sistemas modificáveis e escaláveis
?
Dominada pela ordem da computação,
normalmente com um único thread de controle
?
Principais Estilos
? Programa principal e sub-rotinas ? Remote Procedure Call - RPC
? Orientada a Objetos/ADT ? Camadas
Arquiteturas de Chamada e Retorno
Programa Principal e Subrotinas
?
Decompor e hierarquizar
?
Controle e dados são passados em
Arquiteturas de Chamada e Retorno
Remote Procedure Call
? Subrotinas executam em outras máquinas conectadas
Arquiteturas de Chamada e Retorno
Orientada a Objetos/TAD
? Enfatiza o agrupamento de dados + conhecimento
acerca de como manipular os dados
Arquiteturas de Chamada e Retorno
Sistemas em Camadas
? Componentes são alocados a camadas que controlam
interação
? Cada componente se comunica (sempre que possível)
apenas com os das camadas vizinhas
Interface
Sistema
Utilitários
Arquiteturas de Componentes
Independentes
? Processos independentes que se comunicam através de
mensagens
? Alto grau de modificabilidade através do
desacoplamento de várias porções da computação
? Envio de dados entre processos, normalmente sem
controlar a execução de cada um deles.
? Principais Estilos
? Processos Comunicantes ? Sistemas de Eventos
Arquiteturas de Componentes Independentes
Processos Comunicantes
? Sistemas multiprocessados clássicos ? Várias especializações ? Lightweight Processes ? Distributed Objects ? Network of Filters ? Client-Server(Request-Reply) ? Heartbeat ? Probe/echo ? Broadcast ? Token Passing ? Decentralized servers ? Replicated Workers
Arquiteturas de Componentes Independentes
Sistemas de Eventos
?
Desacoplamento entre consumidores e
produtores de eventos
?
Escalabilidade
?
Adição de novos observadores para eventos
que já são produzidos
?
Invocação implícita
?
O produtor de eventos não controla quem
Arquiteturas de Componentes Independentes: Invocação Implícita
Publish/Subscribe Paradigm
Event Notification Structure
Publish Subscribe Advertise Unadvertise Unsubscribe Consumer Interface Event Consumer Notify Event Producer
Arquiteturas de Componentes Independentes: Invocação Implícita
Observable/Observer Paradigm
Event Dispatcher Structure Listen Notify Unlisten Consumer Interface Event Consumer Notify Event Producer
Arquiteturas Centrada em
Dados
? A meta é a integração de dados
? Descreve o acesso e atualização de repositórios de
dados amplamente acessíveis
? Dominada por um complexo depósito de dados
centralizado, manipulado por computações independentes
? Depósitos de dados podem ser passivos (arquivos,
bases de dados) ou ativos (ex: blackboard)
? Principais estilos ? Repositório ? Blackboard
Arquiteturas Centradas em Dados
Repositório
Cliente Cliente Cliente Cliente Dados CompartilhadosArquiteturas Centradas em Dados
Blackboard
Cliente Cliente Cliente Cliente BlackboardArquiteturas de Máquina
Virtual
? Simulam uma funcionalidade que não é nativa do
hardware ou do software onde ela não é implementada
? A meta é portabilidade
? Simuladores de Software (linguagens - Java VM) ou
Hardware (arquiteturas de sistema)
Inputs State Data Updates Data (Program State) Program Being Interpreted Program Instructions Data
Estilos Arquiteturais:
Indicações de Uso
Arquiteturas Data-Flow
?
As interfaces entre os componentes são
simples
?
O sistema produz resultados simples e
bem identificáveis que derivam
diretamente da transformação seqüencial
de uma entrada facilmente identificável
?
A relação entre entrada e saídas é
Arquiteturas Data-Flow
Batch-Seqüencial
?
Existe uma única saída, resultante de uma única
entrada de dados
Arquiteturas Data-Flow
Pipes e Filtros
?
A computação envolve transformações sobre
uma cadeia de dados contínua
?
As transformações são incrementais. Uma
transformação pode executar antes do término
do passo anterior
Arquiteturas de Chamada e
Retorno
?
A ordem da computação é fixa
?
Componentes não podem fazer progresso
enquanto aguardando o resultado das
chamadas
Arquiteturas de Chamada e Retorno
Orientada a Objetos
?
Modificabilidade e Integrabilidade são
requisitos de qualidade
?
Information-Hiding produz muitos
módulos similares, que no decorrer do
desenvolvimento e testes se beneficiam
do uso de herança
Arquiteturas de Chamada e Retorno
Sistemas em Camadas
?
As tarefas do sistema podem ser
particionadas entre
?
específicas da aplicação e;
?
genéricas a muitas aplicações, mas
específicas à plataforma subjacente
?
Portabilidade é importante
?
Você pode usar uma infra-estrutura de
Arquiteturas de Componentes
Independentes
? O sistema executa em uma plataforma multi-processada
(ou pode sê-lo no futuro)
? O sistema pode ser estruturado como um conjunto de
componentes fracamente acoplados, de modo que um componente pode fazer progressos de forma
independente dos outros.
? Ajuste de desempenho é importante
? seja através da re-alocação de tarefas a processos,
Arquiteturas de Componentes Independentes
Processos Comunicantes
? Lightweight Processes
? Acesso a dados compartilhados é crítico para manutenção de
desempenho
? Objetos Distribuídos
? OO + Componentes Independentes
? Redes de filtros
? Data-Flow + Componentes Independentes
? Cliente-Servidor
? As tarefas podem ser divididas enter geradores de pedidos
(ou consumidores de dados) executores de pedidos (ou produtores de dados)
Arquiteturas de Componentes Independentes