Processos e Arquitecturas de Software
Este módulo constitui uma introdução ao estudo da
arquitectura dos sistemas
na dupla perspectiva da
estrutura das suas interações e do
comportamento emergente.
Como os restantes módulos nesta UCE, também este adopta um
ponto de vista científico-pedagógico que procura aliar o rigor e poder de cálculo matematicamente
fundamentado
a uma componente laboratorial que, na forma de projecto horizontal de módulo,
integra aspectos metodológicos e de realização tecnológica (sobre, por exemplo,
plataformas orientadas a componentes, serviços-web, linguagens de coordenação e plataformas
específicas sobre e.g.
Java
ou
C#
).
A primeira parte do curso é uma introdução à especificação e cálculo do
comportamento dos sistemas a partir de uma caracterização matemática das noções de
interacção, como elemento base da computação, e de
processo, como
padrão de interações. Será colocada uma enfâse particular no estudo de processos
capazes de auto-reconfigurarem dinamicamente as suas interligações e possibilidades de
interação. Esta abordagem será situada no contexo da
programação reactiva, onde
surgiu, e do fenónomo da
computação global na análise do qual é um instrumento
fundamental. De um ponto de vista técnico esta primeira componente é baseada no
cálculo-Pi e nos métodos coindutivos, traçando-se através deles
uma ponte com o cálculo de
funcionalidade e
estruturas de informação
discutidos noutros módulos desta UCE.
A segunda parte do curso, capitalizando nos fundamentos estudados, incide sobre a sua
aplicação à especificação, análise e transformação de
arquitecturas de software.
Esta segunda componente, inicia-se com uma caracterização da
disciplina de arquitectura de software,
referindo os standards aplicáveis e traçando a história do conceito
em Engenharia de Software. Em particular será enfatizada a diferença entre arquitecturas
baseadas na interconecção estática (
compile-time) de módulos, orientada à
macro-estrutura da aplicação e ao controlo do fluxo de recursos entre módulos,
e arquitecturas baseadas na orquestração dinâmica (
run-time)
de componentes e serviços autónomos, distribuídos
ao longo de redes de computação global e altamente heterogéneos.
A ênfase é, neste último caso, colocada no controlo do fluxo de interacções (não raro baseadas em
comunicação anónima e de localização variável) e na integração de entidades heterogéneas
cujas ligações são estabelecidas e revistas dinamicamente, sem interrupção de serviço.
Procura-se motivar os alunos para os desafios colocados pela passagem, paralela à
registada na prática económica, de uma visão que
enfatizava o
software como
produto para uma outra que o encara essencialmente como
um
serviço.
É nesse contexto que o curso vai caracterizar diversos
estilos arquitecturais, sublinhado o modo como tanto conceitos base (e.g., objecto, contrato,
interface, componente, serviço, connector,
glue code, padrão, configuração, etc.)
como opções metodológicas emergem dos desafios e complexidade dos
problemas reais emergentes quer na concepção quer na re-engenharia de software.
Discutem-se, em particular,
- arquitecturas orientadas ao objecto
- arquitecturas orientadas à componente
- arquitecturas orientadas ao serviço Em cada caso discute-se o vocabulário associado, estilos de interação, composicionalidade,
modelos formais, e tecnologias associadas. São especificamente abordados
abordando especificamente os
problemas
- da orquestração e interacção de componentes (objectos, serviços, recursos),
- da mobilidade e reconfiguração dinâmica dessas conecções,
- da planificação, documentação, análise e evolução arquitectural.
Programa
- Componentes, Serviços e Processos
- Motivação: estrutura vs. comportamento; prescrição vs. observação; indução vs. coindução.
- Interacção e cálculo de processos.
- Componentes e Serviços como processos interactivos.
- Mobilidade e reconfiguração dinâmica de software. Introdução ao Pi-calculus.
- Estudo de caso e sua análise laboratorial (com recurso ao
mwb
).
- Projecto e Cálculo de Arquitecturas de Software
- Motivação e história do conceito em Engenharia de Software.
- Modelação de arquitecturas; ADL (Architecture Description Languages); Estilos e padrões arquitecturais; metodologias.
- Arquitecturas Orientadas ao Objecto. Composição de objectos.
- Arquitecturas Orientadas à Componente. Coordenação de componentes.
- Arquitecturas Orientadas ao Serviço. Orquestração de serviços.
- Documentação, projecto e análise de arquitecturas de software.
- Estudos de caso.