1 / 18

POSA

POSA. Padrões Arquiteturais (POSA I, II e III) Pattern-Oriented Software Architecture POSA I: A System of Patterns POSA II: Patterns for Networked and Concurrent Objects POSA III: Patterns for Resource Management.

morna
Download Presentation

POSA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. POSA Padrões Arquiteturais (POSA I, II e III) Pattern-Oriented Software Architecture POSA I: A System of Patterns POSA II: Patterns for Networked and Concurrent Objects POSA III: Patterns for Resource Management

  2. Ao escrever um padrão, veja se você tem bem claro 3 coisas que devem estar contidas na descrição do padrão: • Contexto: uma situação que leva a um problema • Problema: um problema recorrente que acontece em determinada situação • Solução: uma solução comprovada para problema

  3. Architectural Patterns (alto nível) • Da lama à estrutura • Layers • Pipes and Filters • Blackboard • Sistemas Distribuídos • Broker

  4. Architectural Patterns (alto nível) • Sistemas Interativos • Model-View-Controller • Presentation-Abstraction-Control • Sistemas Adaptáveis • Microkernel • Reflection

  5. Design Patterns (nível médio) • Decomposição Estrutural • Whole-Part • Organização de Trabalho • Master-Slave • Controle de Acesso • Proxy

  6. Design Patterns (nível médio) • Gerenciamento • Command Processor • View Handler • Comunicação • Forward-Receiver • Client-Dispatch-Server • Publisher-Subscriber

  7. Idioms (baixo nível) • Counted Pointer

  8. Padrão de Projeto: Publisher-Subscriber • É na verdade o Observer (293) do GoF. • O POSA o inclui para descrever variantes interessantes do padrão • Problema: • em alguns sistemas, os dados mudam em um certo lugar e vários objetos em outras partes do sistema dependem daqueles dados; é necessário então, utilizar algum mecanismo para informar os dependentes das mudanças. • poder-se-ia introduzir chamadas explícitas do objeto cujo estado mudou para os seus dependentes, mas esta solução não é flexível nem reutilizável. • precisamos de um mecanismo de propagação de mudanças que possa ser aplicado em vários contextos

  9. Padrão de Projeto: Publisher-Subscriber • A solução tem que equilibrar as seguintes forças: • um ou mais objetos tem que ser notificados sobre mudanças em um objeto • o número de dependentes não é conhecido a priori e pode até mudar dinamicamente • fazer com que os dependentes peguem o estado de tempos em tempos (polling) é muito caro • o objeto que provê o dado e aqueles que o consomem não devem ser fortemente acoplados

  10. Padrão de Projeto: Publisher-Subscriber • Solução: • O objeto que contém o dado que interessa é chamado de Publisher (subject no GoF) • Os objetos dependentes são chamados de Subscribers (observers no GoF) • O publisher mantém uma lista dos objetos registrados que são aqueles interessados em receber notificações sobre as mudanças. • O publisher oferece uma interface para manifestação de interesse (subscribe interface) • Quando o estado do publisher muda, ele envia uma notificação para todos os objetos que manifestaram interesse. • Ao receber uma notificação, o subscriber decide se solicita a informação ao publisher ou não.

  11. 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.

  12. Padrão Arquitetural para Sistemas Adaptáveis: Microkernel • 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.

  13. Padrão Arquitetural para Sistemas Adaptáveis: Microkernel • 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 chamadas 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.

  14. Padrão Arquitetural para Sistemas Adaptáveis: Microkernel 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: • 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: • JBoss • Plataforma para criação de aplicações locais • Eclipse

  15. Idioms (baixo nível) • São padrões de bem baixo nível específicos para um determinada linguagem de programação • Explica como implementar um determinado conceito utilizando os mecanismos de uma linguagem • Às vezes ao olharmos para um padrão de projeto em uma determinada linguagem, podemos ser levados a uma expressão idiomática. Por exemplo, o padrão Singleton em C++ e Smalltalk podem ser vistos como idioms • Os livros Effective C++ and More Effective C++ de Meyers e o livro Effective Java são bons exemplos de livros de expressões idiomáticas. • O POSA apresenta apenas um exemplo de expressão idiomática mais elaborada

  16. Idioms (baixo nível) Counted Pointer • Problema: • alocação dinâmica de objetos em C++ causa muitos problemas de vazamento de memória • objetos tem que ser destruídos explicitamente e muitas vezes não sabemos o lugar apropriado para destruí-lo (e liberar sua memória • em C++ usamos muito passagem de objetos como parâmetro, mas quando fazemos isso, quem deve ser responsável por destruir o objeto? O “chamador” ou o chamado? • Forças: • passar objetos sempre por valor não é apropriado • vários clientes precisam compartilhar um mesmo objeto • não podemos permitir referências para objetos que já foram destruídos (dangling references) • se um objeto não é mais utilizado, ele deve ser destruído para liberar os recursos • a solução não deve exigir muito código adicional e deve ser leve computacionalmente

  17. Idioms (baixo nível) • Solução • introduza contagem de referências utilizando um "apontador contador" ao invés de apontadores simples • adicione um contador de referências na classe original • crie uma classe Handle que servirá de "apontador inteligente" para o objeto original • ver diagrama UML no POSA • ver código fonte da implementação no POSA

  18. CRC (Class, Responsibility, Collaborator) • Exemplo: padrão Layers • Class • Camada J • Responsibility • Provê serviços usados pela camada J+1 • Delega subtarefas para a camada J-1 • Collaborator • Camada J-1 • Exemplo concreto de uso do padrão: • FTP em cima de TCP em cima de IP em cima de Ethernet em cima de cabo de par trançado.

More Related