Utilizando Padrões De Design No Desenvolvimento Rápido De Aplicações De Software Zalkind Lincoln Dantas Rocha Jair Cavalcanti Leite Objetivo Mostrar o impacto do uso de padrão de design na arquitetura deste software bem como as dificuldades de implementá-lo utilizando uma linguagem em ambiente de desenvolvimento rápido de aplicações (RAD - Rapid Application Development) Conteúdo Patho Control - Descrição Problemas enfrentados Padrões de design Soluções encontradas Etapas do Laudo Modelo de navegação Ir diretamente para as etapas de recepção, macroscopia, conclusão e entrega; Navegar por estas etapas voltando ou avançando pelas telas que já percorreu; Movimentar-se através de botões, opções de menu ou teclas de atalho. Configuração de Ambiente Adequar comandos de acordo com a etapa. Exemplo: Enviar um exame para entrega somente após ter sido concluído; Excluir exame apenas na recepção e na entrega; Comandos de voltar e avançar desabilitados quando na primeira e última etapa visitada. Problema: Construir uma arquitetura que: i) suporte o modelo de navegação projetado; ii) permita implementar o recurso de avançar e voltar; iii) facilite a configuração de ambiente de acordo com a etapa. Padrões de design Um padrão de design é uma solução para um problema num determinado contexto. Surgiu originalmente na arquitetura através dos trabalhos de Christopher Alexander. Padrões de design O objetivo é capturar a experiência acumulada de projetistas que perceberam padrões de solução para determinados problemas, catalogando e nomeando estas soluções testadas para serem reutilizadas mais facilmente. Padrões de design Alguns autores, como o grupo dos quatro, adaptaram este conceito, originalmente aplicado à arquitetura, para descrever soluções simples e elegantes para problemas específicos no design de softwares orientados a objetos. Padrão Command Parametrizar objetos por uma ação executa de modo a ser implementada em outro local; Suportar a funcionalidade de desfazer comandos. Padrão Command C lie n t e Cham ador Com ando E x e c u t e () R e c e b e d or A ç ã o () re c e b e d o r C o m a n d o C o n c re t o E s tado E x e c u t e () re c e b e d o r-> A ç ã o () Padrão Command (Aplicado) Mudanças de etapas podem ser comandos; Avançar e voltar podem ser desfazer e refazer; Portanto o padrão COMMAND resolveria os problemas i e ii. Padrão Command (Aplicado) Padrão Command (Aplicado) Padrão Observer Alterar um objeto requer mudanças em outros e não se sabe quantos objetos precisam ser mudados. Padrão Observer A s s u n to O b s e rva d o re s * V in c u la r(O b s e rva d o r) D e s vin c u la r(O b s e rva d o r) N o t ific a r() O b s e rva d or A t u a liz a r() fo r a ll o in o b s e rva d o re s { o -> A tu a li z ar() } E s t a d o = as s u n t o- > G e t E s ta d o () A s s unto O b s e rva d o rC o n c re t o A s s u n t o C o n c r e to E s tado E s tado G e t E s t a d o () S e t E s t a d o () R e t o rn a o E s t a d o A t u a liz a r() Padrão Observer (Aplicado) Os controles podem ser observadores e é possível criar assuntos cujos estados indiquem quando estes controles devem ser habilitados ou desabilitados. O padrão OBSERVER seria adequado para resolver o problema iii. Padrão Observer (Aplicado) Considerações Finais Os padrões realmente apresentaram soluções para problemas de design. Adequações precisaram ser efetuadas: O padrão Subject perdeu o acoplamento abstrato. Acoplar as modificações nos observadores concretos dentro do método Notify gerou altíssimo acoplamento. Considerações Finais Outras nem tanto: O padrão Command foi implementado quase sem modificações em relação ao padrão proposto. Novos assuntos e novos comandos foram acrescentados, inclusive fora do contexto de interface, sem implicação às classes já existentes. Considerações Finais Essas adaptações aos padrões originais para a solução dos problemas na linguagem utilizada podem contribuir na descrição de padrões mais específicos, chamados idiomas, podendo ser reutilizados em novos projetos Contatos: Zalkind Lincoln [email protected] Jair Cavalcanti Leite [email protected]