MAC 413/5715 - Tópicos de Programação Orientada a Objetos
Aula 2 - 11/8/4
Publisher-Subscriber (continuação)
Variações
- Gatekeeper
- Versão distribuída do padrão
- um publisher em um processo notifica subscribers remotos
- o publisher pode ser dividido em dois processos
- um processo gera os eventos
- outro processo faz a demultiplexação definindo
quais subscribers o receberão e enviando as mensagens (usando o Parão
Reactor do POSA II)
- Event channel
- Proposto pela OMG no CORBA Event Service e depois melhorado no
Notification Service
- desacopla ainda mais os produtores dos consumidores incluindo
um canal (channel) ligando os
dois
- neste caso, os consumidores não precisam saber a origem
dos eventos, não interessa quem é o publisher, o que
interessa é o que foi publicado
- um ou mais canais são introduzidos no meio de um ou mais
publishers e um ou mais subscribers
- para os publishers, o event channel se parece com um subscriber
- para os subscribers, o event channel se parece com um publisher
- publishers, channels e subscribers podem residir em
máquinas distintas
- channels podem oferecer serviços adicionais:
bufferização, filtragem, priorização
- Producer-consumer
- dois threads em um processo ou dois processos em uma
máquina que compartilham um buffer
- um deles produz dados e coloca no buffer e o outro os retira do
buffer e os consome
- não há comunicação direta entre
eles, mas há controle do acesso concorrente ao buffer
compartilhado
- há uma relação de 1:1 que não
existe nas outras variantes do padrão
Padrão Arquitetural para Sistemas Adaptáveis: Microkernel
- O uso de micronúcleos se aplica a sistemas que precisam
ser adaptados
para mudanças nos requisitos.
- Premissa básica do bom programador OO: Design for
Change.
- Exemplo:
- Sistema operacional hipotético Hydra no qual podemos executar
aplicações Windows, UNIX System V ou NeXTSTEP
simultaneamente em diferentes janelas.
- Contexto:
- Desenvolvimento de várias aplicações que
utilizam interfaces programáticas similares baseadas numa mesma
funcionalidade.
- Problema:
- Software básico é utilizado ao longo de muitos
anos, às vezes décadas. Ao longo da sua vida, acontecem
muitas mudanças no hardware, nos modelos de
programação, nos tipos de bibliotecas utilizadas, e nos
requisitos das aplicações.
- O núcleo da funcionalidade do software básico
deve ser
encapsulado em uma componente que seja o menor possível e que
consuma
o mínimo possível de recursos computacionais para
não prejudicar as aplicações para as quais ele
oferece suporte.
- Solução:
- Encapsule os serviços fundamentais da sua plataforma em
uma
componente chamada "micronúcleo".
- O micronúcleo oferece os seus serviços
básicos através de sua interface bem definida.
- Funcionalidade que não é essencial e que
não pode ser implementada sem aumentar a complexidade do
micronúcleo deve ser implementada em "servidores internos" que
estendem a funcionalidade do micronúcleo.
- Outras componentes chamdas de "servidores externos" utilizam a
interface
do micronúcleo para prover outros tipos de interfaces baseadas
na
funcionalidade exportada pelo micronúcleo.
- Os clientes (aplicações) interagem com o sistema
através
dos servidores externos.
- Estrutura:
- Usos conhecidos:
- Sistemas operacionais baseados em micronúcleos:
- Mach (CMU, 1986), hoje base do MacOS X
- Amoeba (Tanenbaum, 92), OS orientado a objetos
- Windows NT (Microsoft, 93), oferecia 3 servidores externos:
OS/2, POSIX e Win32.
- Banco de Dados basedo em micronúcleo:
- MKDE (Microkernel DatenBank Engine) de 1996. Diferentes tipos
de
bancos de dados com interfaces diferentes são implementados em
cima
de um microkernel básico.
- Middleware de Comunicação:
- UIC - Universally Interoperable Core (Román, 2000). O
micronúcleo
contém apenas
- um arcabouço abstrato para construção
de
middleware para objetos distribuídos
- um mecanismo para carga dinâmica de componentes para
integrar
o arcabouço
- Isso é suficiente para carregar incrementalmente em
tempo de execução um middleware para
comunicação em
sistemas distribuídos, por exemplo, um subconjunto de CORBA.
- Servidor de Aplicações:
- Plataforma para criação de aplicações locais
Referência
- F. Buschmann, R. Meunier, H. Rohnert, P.Sommerlad, M. Stal Pattern-Oriented
Software Architecture - A System of Patterns. John Wiley and Sons
Ltd, Chichester, UK, 1996
- A página do POSA
na teia (mais focado no POSA II).
- Resumo
do POSA I na teia
- www.posa3.org
Próxima Aula
Página de MAC 413/5715
Página do Fabio
Página do DCC