MAC 413/5715 - Tópicos de Programação
Orientada a
Objetos
Aula 11 - 21/09/2005
Arquitetura de Sofware
- A área de arquitetura de software (AS) se tornou popular a
partir de 1996 com o livro
- Software Architecture - Perspectives on an Emerging
Discipline
- de Mary Shaw e David Garlan (professores da CMU)
- O livro de Antonio Mendes de 2002, Arquitetura de Software -
Desenvolvimento orientado para arquitetura, contém boa parte
do material contido
em [Shaw e Garlan, 96] e mais outras coisas.
- No início da década de 90, Shaw e Garlan mostraram
a
necessidade dos desenvolvedores de software de começar a falar
em termos
de Arquiteturas de Software.
- Programming in the small vs. programming in the large
- Modelo em Cascata de Engenharia de Software:
- Até esta aula, vimos muitos trabalhos que surgiram da comunidade
de
POO (implementação) e que tenderam a AS.
- O trabalho de Shaw e Garlan parece ter surgido mais na comunidade
de Engenharia de Software e focado em AS.
- Questões estruturais abordadas pelo desenvolvimento de
software no nível arquitetural:
- seleção de alternativas de projeto
- escalabilidae e desempenho
- organização e estrutura geral de controle
- protocolos de comunicação,
sincronização
- atribuição de funcionalidade a componentes de
projeto
- Características necessárias em um arquiteto de
software:
- ser capaz de reconhecer estruturas comuns em sistemas já
desenvolvidos
- usar o conhecimento sobre arquiteturas existentes para tomar
decisões de projeto em novos sistemas
- ser capaz de realizar uma descrição formal da
arquitetura de um sistema a fim de
- analisar as propriedades do sistema
- apresentar a arquitetura para outras pessoas
- Minha definição predileta de AS (de Garlan e Shaw,
96):
- Arquitetura de Software se refere à
descrição dos elementos com os quais um sistema é
construído, as interações entre estes elementos,
os padrões que guiam a sua composição e as
restrições nesses padrões.
- Uma arquitetura pode:
- atuar como uma estrutura a fim de atender os requisitos de um
sistema
- auxiliar na estimativa de custos e no gerenciamento do processo
de desenvolvimento
- servir de base para a análise de consistência e de
dependências
- prover suporte ao reuso
- Habilidades desejadas de um arquiteto de software
- compreesão profunda do domínio e das tecnologias
pertinentes
- técnicas de modelagem e metodologias de desenvolvimento
- entendimento das estratégias de negócios da
instituição
onde atua
- conhecimento de produtos, processos e estratégias de
concorrentes
- Tarefas atribuídas a um arquiteto de software
- modelagem
- análise de trade-offs e viabilidade
- prototipação, simulação e
realização
de experimentos
- análise de tendências tecnológicas
- atuação como mentor de arquitetos novatos
Estilos Arquiteturais
- A arquitetura de um sistema é composta de
- componentes (responsáveis pelo comportamento do sistema)
- conectores (interligando os componentes)
- padrões de conexão (possibilitando vários
tipos de interação entre os componentes)
- Linguagens de Descrição de Arquiteturas (ADLs): Conic (1989), Darwin
(1994), UniCon (Mary Shaw 1996), Olan (1998).
- No início da década de 90 começaram a ser
identificados
classes de arquiteturas semelhantes, famílias de arquiteturas.
- Estas classes ou famílias chamam-se Estilos
Aquiteturais
Pipes and Filters (Canos e Filtros)
- organização linear de canos e filtros dispostos
alternadamente
- uma variação permite bifurcações e
junções
de canos
- pipes simplesmente transportam os dados de uma ponta a
outra
como um cano transporta água
- filtros processam os dados efetuando
transformações;
lêem dados da entrada, processam, escrevem na saída
- O exemplo mais comum são os comandos usados nos
interpretadores
de comandos do UNIX.
- O UNIX é capaz de canalizar a saída de um programa
à entrada do outro através de pipes
- Exemplo: ls -l /home |grep posgrad | sort
- Aula
sobre
encanamento
- esta arquitetura oferece várias vantagens:
- facilita o entendimento do sistema completo a partir do
entendimento
de cada filtro isoladamente
- facilita a reutilização de código dos
filtros
- facilita manutenção: filtros podem ser
adicionados
e substituídos a qualquer instante
- permitem a análise do sistema no que diz respeito a
impasses
(deadlock) e vazão (throughput)
- promove concorrência pois os filtros podem ser facilmente
executados em paralelo ou concorrentemente
- e algumas desvantagens
- não funcionam bem com aplicações
interativas,
só funcionam para usos do tipo batch
- forçam a interface dos filtros a usarem o mínimo
denominador comum o que pode prejudicar o desempenho
- Outro uso tradicional são os compiladores
- análise_léxica ->
análise_sintática
-> análise_semântica -> otimização
->
geração_de_código
- Com o avanço tecnológico, na década de 80
começaram
a surgir ambientes integrados de programação onde a
arquitetura
do sistema foi alterada para incuir um editor, depurador e outras
ferramentas.
- Figura 2.4 (Mendes) - arquitetura de quadro-negro (blackboard)
Quadro Negro
- Originou-se na área de inteligência artificial
- Vários agentes colaboram para resolver um problema.
- O quadro negro é uma entidade ativa capaz de notificar aos
agentes periféricos quando há algum trabalho novo que
poderia
ser realizado por um agente específico
- Isoladamente, nenhum agente sabe resolver o problema sozinho mas
trabalhando em conjunto, cada um avança um aspecto distinto e o
problema
é resolvido.
- Exemplo bem recente de infra-estrutura para quadro negro
distribuído: Java
Spaces
Repositórios
- Variação de quadro negro onde o repositório
central é totalmente passivo.
- Exemplos: repositório de componentes, repositórios
de pacotes debian, Web.
Camadas
- O bom e velho estilo arquitetual cujo exemplo mais famoso
é
o modelo OSI da ISO para comunicação em redes de
computadores
- O x-kernel da
U. Arizona é um arcabouço super-flexível para
implementação de protocolos de rede em camadas.
- Aspectos positivos:
- uma camada N só precisa conhecer a interface e interagir
com a camada N-1
- que mais?
- Aspectos negativos:
Objetos
- descrito por Shaw e Garlan como um estilo arquitetural
- para mim parece estranho
- eu vejo orientação a objetos como uma
técnica
de modelagem e programação
- assim, estaria em um nível superior, ortogonal aos
diferentes
estilos arquiteturais
Chamadas Implícitas baseadas em eventos
- descrito por Shaw e Garlan como um estilo arquitetural
- para mim parece estranho
- eu vejo chamadas implícitas como um estilo de
comunicação
em sistemas
- assim, estaria em um nível ortogonal aos diferentes
estilos
arquiteturais
Arquiteturas Heterogêneas
- No mundo real, as arquiteturas dos sistemas não são
tão puras quanto as descritas acima
- Em geral, sistemas reais utilizam diferentes estilos
arquiteturais
nas suas diversas partes
Estilos Arquiteturais versus Padrões Arquiteturais
Requisitos Arquiteturais
Referências
Próxima Aula
Aula Anterior com página HTML
Página de MAC 5715
Página do Fabio
Página do DCC