MAC 413/5715 - Tópicos de Programação Orientada
a Objetos
Aula 12 - 24/09/2003
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 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óciosa 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)
- 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.
- A arquitetura então se transformou então em uma arquitetura
de quadro-negro (blackboard):
(Figura 2.4 do [Mendes 2002])
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 Linux, 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
- usando objetos, pode-se implementar qualquer estilo arquitetural
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
- chamadas implícitas podem ser utilizadas com qualquer estilo
arquitetural
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
Referências
Próxima Aula
Aula Anterior
Página de MAC 5715
Página do Fabio
Página do DCC