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]