utilizando padrões de design no desenvolvimento rápido de aplicações de software zalkind lincoln...
TRANSCRIPT
Utilizando Padrões De Design No Desenvolvimento Rápido De Aplicações De Software
Zalkind Lincoln Dantas RochaJair 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
ComandoExecute()
Chamador
ComandoConcretoEstado
Execute()
Cliente
RecebedorAção()
recebedor->Ação()
recebedor
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)
TCommand
Execute()UnExecute()Reversible()
TNotebook(from Unresolved References)
TfmPrincipal(from Main)
+nbAreaDeTrabalho
TIrParaCommand_ToPage : String_FromPage : String
Create()CreateNew()Execute()UnExecute()Reversible()<<Property>> FromPage()
-_NoteBook
+cmIrParaConteudo+cmIrParaRequisicao
+cmIrParaMacroscopia+cmIrParaMicroscopia
+cmIrParaConclusao+cmIrParaEntrega
Padrão Command (Aplicado)
TIrParaHistory_Index : Integer
Create()Present()Add()Next()Prior()Clear()
TList(from Classes)
-_HistoryList
Padrão Observer
Alterar um objeto requer mudanças em outros e não se sabe quantos objetos precisam ser mudados.
Padrão Observer
AssuntoVincular(Observador)Desvincular(Observador)Notificar()
ObservadorAtualizar()
*
for all o in observadores{ o->Atualizar() }
ObservadorConcretoEstado
Atualizar()
AssuntoConcretoEstado
GetEstado()SetEstado()
Assunto
Observadores
Retorna o Estado
Estado = assunto->GetEstado()
*
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)
TList(from Classes)
TSubject
Attach()Detach()Notify()
THistoryIrParaAtFirstSubject_AtFirst : boolean
SetState()Notify()<<Property>> AtFirst()
THistoryIrParaAtLastSubject_AtLast : boolean
SetState()Notify()<<Property>> AtLast()
T IrParaSubject_Page : String
FinalizarPosts()SetState()Notify()<<Property>> Page()
-_SubjectList
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