Padr˜es de Projeto                             o                         Humberto C Marchezi                          22 d...
Conte´do                                   u1   Conte´do         u2   Apresenta¸˜o             ca3   Padr˜es de Projeto Es...
Apresenta¸˜o                                    caPadr˜es de Projeto    o  Humberto C Marchezi ()        Padr˜es de Projet...
Apresenta¸˜o                                                      caPadr˜es de Projeto    o    Solu¸˜o reutiliz´vel para u...
Apresenta¸˜o                                                      caPadr˜es de Projeto    o    Solu¸˜o reutiliz´vel para u...
Apresenta¸˜o                                                      caPadr˜es de Projeto    o    Solu¸˜o reutiliz´vel para u...
Apresenta¸˜o                                                      caPadr˜es de Projeto    o    Solu¸˜o reutiliz´vel para u...
Apresenta¸˜o                                      caPadr˜es de projeto desta apresenta¸˜o est˜o agrupados em:    o        ...
Padr˜es de Projeto Estruturais                            o1   Conte´do         u2   Apresenta¸˜o             ca3   Padr˜e...
Padr˜es de Projeto Estruturais                          oAdaptador    Prop´sito: Adequa as opera¸˜es da classe adaptada pa...
Padr˜es de Projeto Estruturais                                     oAdaptador// Exemplo de Usop u b l i c c l a s s Sistem...
Padr˜es de Projeto Comportamentais                      o1   Conte´do         u2   Apresenta¸˜o             ca3   Padr˜es ...
Padr˜es de Projeto Comportamentais                    oEstrat´gia      e    Prop´sito: O objetivo ´ encapsular um conjunto...
Padr˜es de Projeto Comportamentais                            oEstrat´gia      e// O a l g o r i t m o de c r i p t o g r ...
Padr˜es de Projeto Comportamentais                           oEstrat´gia      ep u b l i c c l a s s HMACSHA1EstrategiaCri...
Padr˜es de Projeto Criacionais                            o1   Conte´do         u2   Apresenta¸˜o             ca3   Padr˜e...
Padr˜es de Projeto Criacionais                          oSingleton    Prop´sito: Uma classe que segue esse padr˜o, s´ cons...
Padr˜es de Projeto Criacionais                                      oSingletonp u b l i c SistemaX{   p u b l i c void Che...
Padr˜es de Projeto Criacionais                          oM´todo de F´brica e         a    Prop´sito: Controlar a cria¸˜o d...
Padr˜es de Projeto Criacionais                                          oM´todo de F´brica e         aC o n e x a o B a n ...
Padr˜es de Projeto Criacionais                          oF´brica Abstrata a    Prop´sito: Controlar a cria¸˜o de objetos d...
Padr˜es de Projeto Criacionais                                           oF´brica Abstrata - Exemplo de Uso a// No i n i c...
Padr˜es de Projeto Criacionais                                     op u b l i c c l a s s GerenciadorMapa{   p r i v a t e...
Padr˜es de Projeto Criacionais                                      op u b l i c c l a s s E s r i M a p a F a c t o r y :...
Padr˜es de Projeto Criacionais                                      op u b l i c c l a s s MapaQuadraEsri : U s e r C o n ...
Padr˜es de Projeto de Sistemas Empresariais                o1   Conte´do         u2   Apresenta¸˜o             ca3   Padr˜...
Padr˜es de Projeto de Sistemas Empresariais              oCamada de Servi¸o               c    Prop´sito: Define um limite ...
Padr˜es de Projeto de Sistemas Empresariais              oCamada de Servi¸o               c    Caracter´ısticas de um Serv...
Padr˜es de Projeto de Sistemas Empresariais                  oCamada de Servi¸o               cpublic class ServicoCadastr...
Padr˜es de Projeto de Sistemas Empresariais              oPortal para Dados Tabulados (Table Data Gateway)    Prop´sito: O...
Padr˜es de Projeto de Sistemas Empresariais              oPortal para Dados Tabulados (Table Data Gateway)    Vantagens:  ...
Padr˜es de Projeto de Sistemas Empresariais                       oPortal para Dados Tabulados (Table Data Gateway)public ...
Padr˜es de Projeto de Sistemas Empresariais              oModelo de Dom´ (Domain Model)             ınio    Prop´sito: Con...
Padr˜es de Projeto de Sistemas Empresariais            o  Vantagens:         Especialmente vantajoso para regras de neg´ci...
Padr˜es de Projeto de Sistemas Empresariais               oObjeto Valor (Value Object)    Classe Dinheiro    public c l a ...
Padr˜es de Projeto de Sistemas Empresariais              o  Solu¸˜o: Criar classes com o padr˜o objeto-valor      ca      ...
Padr˜es de Projeto de Sistemas Empresariais                    oD i n h e i r o p r e c o 1 = new D i n h e i r o ( ”R” , ...
Padr˜es de Projeto de Sistemas Empresariais              oModelo Vis˜o Controlador (Model View Controller)          a    P...
Padr˜es de Projeto de Sistemas Empresariais              oModelo Vis˜o Controlador (Model View Controller)          a    V...
Padr˜es de Projeto de Sistemas Empresariais                  oModelo Vis˜o Controlador (Model View Controller)          aM...
Padr˜es de Projeto de Sistemas Empresariais                  oModelo Vis˜o Controlador - Controlador          a  public c ...
Padr˜es de Projeto de Sistemas Empresariais                     oModelo Vis˜o Controlador (Model View Controller)         ...
Padr˜es de Projeto de Sistemas Empresariais                     oModelo Vis˜o Controlador (Model View Controller)         ...
Padr˜es de Projeto de Sistemas Empresariais              oExerc´ Data Table Gateway     ıcioCriar um Data Table Gateway pa...
Padr˜es de Projeto de Sistemas Empresariais             oExerc´ MVC     ıcio   Aplica¸˜o Winforms e Webforms         ca Hu...
Referˆncias                                eReferˆncias     e    data & object factory:    http://www.dofactory.com/Patter...
Upcoming SlideShare
Loading in …5
×

Padroes de desenho

437 views

Published on

Essa apresentação explica alguns tipos de padrões de desenho ( padrões de projeto ) relacionando com exemplos mais concretos.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
437
On SlideShare
0
From Embeds
0
Number of Embeds
44
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Padroes de desenho

  1. 1. Padr˜es de Projeto o Humberto C Marchezi 22 de junho de 2012Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 1 / 42
  2. 2. Conte´do u1 Conte´do u2 Apresenta¸˜o ca3 Padr˜es de Projeto Estruturais o4 Padr˜es de Projeto Comportamentais o5 Padr˜es de Projeto Criacionais o6 Padr˜es de Projeto de Sistemas Empresariais o7 Referˆncias e Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 2 / 42
  3. 3. Apresenta¸˜o caPadr˜es de Projeto o Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 3 / 42
  4. 4. Apresenta¸˜o caPadr˜es de Projeto o Solu¸˜o reutiliz´vel para um problema que ocorre de tempos em ca a tempos // Como eu f a ¸ o p a r a i s o l a r a t e c n o l o g i a X P T O do meu s i s t e m a ?? c MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ; ... t h i s . mapa . S e l e c i o n a r L o t e ( c o d L o t e ) ; ... t h i s . t x t I n s c r i c a o L o t e . Text = . . . ; ... Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 3 / 42
  5. 5. Apresenta¸˜o caPadr˜es de Projeto o Solu¸˜o reutiliz´vel para um problema que ocorre de tempos em ca a tempos // Como eu f a ¸ o p a r a i s o l a r a t e c n o l o g i a X P T O do meu s i s t e m a ?? c MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ; ... t h i s . mapa . S e l e c i o n a r L o t e ( c o d L o t e ) ; ... t h i s . t x t I n s c r i c a o L o t e . Text = . . . ; ... Os padr˜es de projeto s˜o id´ias provadas e testadas, prevenindo a o a e reinven¸˜o da roda ca Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 3 / 42
  6. 6. Apresenta¸˜o caPadr˜es de Projeto o Solu¸˜o reutiliz´vel para um problema que ocorre de tempos em ca a tempos // Como eu f a ¸ o p a r a i s o l a r a t e c n o l o g i a X P T O do meu s i s t e m a ?? c MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ; ... t h i s . mapa . S e l e c i o n a r L o t e ( c o d L o t e ) ; ... t h i s . t x t I n s c r i c a o L o t e . Text = . . . ; ... Os padr˜es de projeto s˜o id´ias provadas e testadas, prevenindo a o a e reinven¸˜o da roda ca Promovem a melhoria da comunica¸˜o entre desenvolvedores ca Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 3 / 42
  7. 7. Apresenta¸˜o caPadr˜es de Projeto o Solu¸˜o reutiliz´vel para um problema que ocorre de tempos em ca a tempos // Como eu f a ¸ o p a r a i s o l a r a t e c n o l o g i a X P T O do meu s i s t e m a ?? c MapaLoteTecnologiaXPTO mapa = new MapaLoteTecnologiaXPTO ( . . . ) ; ... t h i s . mapa . S e l e c i o n a r L o t e ( c o d L o t e ) ; ... t h i s . t x t I n s c r i c a o L o t e . Text = . . . ; ... Os padr˜es de projeto s˜o id´ias provadas e testadas, prevenindo a o a e reinven¸˜o da roda ca Promovem a melhoria da comunica¸˜o entre desenvolvedores ca Muitos deles definem diferentes estrat´gias para se abstrair detalhes e de implementa¸˜o ca Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 3 / 42
  8. 8. Apresenta¸˜o caPadr˜es de projeto desta apresenta¸˜o est˜o agrupados em: o ca a Parte I - Padr˜es de Projeto Cl´ssicos o a Padr˜es de Projeto Estruturais o Padr˜es de Projeto Comportamentais o Padr˜es de Projeto Criacionais o Parte II - Padr˜es de Projeto de Sistemas Empresariais o Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 4 / 42
  9. 9. Padr˜es de Projeto Estruturais o1 Conte´do u2 Apresenta¸˜o ca3 Padr˜es de Projeto Estruturais o4 Padr˜es de Projeto Comportamentais o5 Padr˜es de Projeto Criacionais o6 Padr˜es de Projeto de Sistemas Empresariais o7 Referˆncias e Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 5 / 42
  10. 10. Padr˜es de Projeto Estruturais oAdaptador Prop´sito: Adequa as opera¸˜es da classe adaptada para a classe o co adaptadora Figura: Adaptador Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 6 / 42
  11. 11. Padr˜es de Projeto Estruturais oAdaptador// Exemplo de Usop u b l i c c l a s s SistemaX{ p u b l i c v o i d EnviarSMS ( s t r i n g mensagem ) { AdaptadorEnvioSMS envioSMS = new AdaptadorEnvioSMS ( ) ; envioSMS . E n v i a r ( ”9999−9999 ” , mensagem ) ; }}// Exemplo de A d a p t a d o ru s i n g M i c r o s o f t . WindowsMobile . P o c k e t O u t l o o k ;p u b l i c c l a s s AdaptadorEnvioSMS{ p u b l i c v o i d E n v i a r ( s t r i n g numero , s t r i n g mensagem ) { SmsMessage sms = new SmsMessage ( ) ; sms . From = new R e c i p i e n t ( t h i s . NumeroOrigem ) ; sms . Body = mensagem ; sms . To . Add ( numero ) ; sms . Send ( ) ; }} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 7 / 42
  12. 12. Padr˜es de Projeto Comportamentais o1 Conte´do u2 Apresenta¸˜o ca3 Padr˜es de Projeto Estruturais o4 Padr˜es de Projeto Comportamentais o5 Padr˜es de Projeto Criacionais o6 Padr˜es de Projeto de Sistemas Empresariais o7 Referˆncias e Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 8 / 42
  13. 13. Padr˜es de Projeto Comportamentais oEstrat´gia e Prop´sito: O objetivo ´ encapsular um conjunto de algoritmos que o e resolvem o mesmo problema em classes separadas permitindo que um algoritmo espec´ıfico possa ser selecionado facilmente atrav´s de uma e classe contexto. O padr˜o estrat´gia permite que os algoritmos a e possam variar independentemente dos sistemas que os utilizam. Figura: Estrat´gia e Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 9 / 42
  14. 14. Padr˜es de Projeto Comportamentais oEstrat´gia e// O a l g o r i t m o de c r i p t o g r a f i a v a r i a com o c o n t e x t oContextoEstrategiaCriptografia contextoEstrategiaCriptografiaFraca = new C o n t e x t o E s t r a t e g i a C r i p t o g r a f i a ( new H M A C S H A 1 E s t r a t e g i a C r i p t o g r a f i a ( ) ) ;ContextoEstrategiaCriptografia contextoEstrategiaCriptografiaForte = new C o n t e x t o E s t r a t e g i a C r i p t o g r a f i a ( new M D 5 E s t r a t e g i a C r i p t o g r a f i a ( ) ) ;...b y t e [ ] senhaEmBytes = C o n v e r t e P a r a B y t e s ( t h i s . t x t S e n h a . Text ) ;EstrategiaCriptogradia criptografia1 = contextoEstrategiaCriptografiaForte . ObterEstrategia ();b y t e [ ] s e n h a C r i p t o g r a d a 1 = c r i p t o g r a f i a 1 . C r i p t o g r a f a r ( senhaEmBytes ) ;...EstrategiaCriptografia criptografia2 = contextoEstrategiaCriptografiaFraca . ObterEstrategia ();b y t e [ ] s e n h a C r i p t o g r a d a 2 = c r i p t o g r a f i a 2 . C r i p t o g r a f a r ( senhaEmBytes ) ;...public class ContextoEstrategiaCriptografia{ private EstrategiaCriptografia estrategia ; public ContextoEstrategiaCriptografia ( EstrategiaCriptografia estrategia ) { this . estrategia = estrategia ; } public EstrategiaCriptografia ObterEstrategia () { return estrategia ; }}public interface EstrategiaCriptografia{ byte [ ] C r i p t o g r a f a r ( byte [ ] dados ) ;} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 10 / 42
  15. 15. Padr˜es de Projeto Comportamentais oEstrat´gia ep u b l i c c l a s s HMACSHA1EstrategiaCriptografia : E s t r a t e g i a C r i p t o g r a f i a{ p u b l i c byte [ ] C r i p t o g r a f a r ( byte [ ] dados ) { // I m p l e m e n t a c ˜ o e s p e c´ f i c a p a r a HMCA ¸a ı }}public c l a s s MD5EstrategiaCriptografia : EstrategiaCriptografia{ p u b l i c byte [ ] C r i p t o g r a f a r ( byte [ ] dados ) { // I m p l e m e n t a c ˜ o e s p e c´ f i c a p a r a MD5 ¸a ı }} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 11 / 42
  16. 16. Padr˜es de Projeto Criacionais o1 Conte´do u2 Apresenta¸˜o ca3 Padr˜es de Projeto Estruturais o4 Padr˜es de Projeto Comportamentais o5 Padr˜es de Projeto Criacionais o6 Padr˜es de Projeto de Sistemas Empresariais o7 Referˆncias e Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 12 / 42
  17. 17. Padr˜es de Projeto Criacionais oSingleton Prop´sito: Uma classe que segue esse padr˜o, s´ consegue instanciar o a o um objeto para toda a classe e tamb´m disponibiliza um acesso global e para esse unico objeto atrav´s de um m´todo ou propriedade. ´ e e Figura: Singleton Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 13 / 42
  18. 18. Padr˜es de Projeto Criacionais oSingletonp u b l i c SistemaX{ p u b l i c void ChecarVersaoDoSistema () { SingletonSistema sistema = SingletonSistema . I n s t a n c i a ; t h i s . t x t V e r s a o . Text = s i s t e m a . V e r s a o ; }}public c l a s s SingletonSistema{ // ///// Metodos S i n g l e t o n / / / / / / / / / / / / / / / / / / / / / / / / // P r o p r i e d a d e que g u a r d a a i n s t a n c i a de S i s t e m a p r i v a t e s t a t i c Sistema instancia ; p u b l i c s t a t i c Sistema I n s t a n c i a { get { i f ( i n s t a n c i a == n u l l ) { i n s t a n c i a = new S i s t e m a ( ) ; } return instancia ; } } // P r e v i n e que o c o n s t r u t o r s e j a chamado d i r e t a m e n t e p r i v a t e SingletonSistema () { } // / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / p u b l i c s t r i n g D e s c r i c a o {get ;} p u b l i c s t r i n g Versao {get ;} ...} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 14 / 42
  19. 19. Padr˜es de Projeto Criacionais oM´todo de F´brica e a Prop´sito: Controlar a cria¸˜o de objetos de v´rias subclasses o ca a Figura: M´todo de F´brica e a Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 15 / 42
  20. 20. Padr˜es de Projeto Criacionais oM´todo de F´brica e aC o n e x a o B a n c o F a c t o r y c o n e x a o B a n c o F a c t o r y = new C o n e x a o B a n c o F a c t o r y ( ) ;...IDbConnection conexao = n u l l ;c o n e x a o = c o n e x a o B a n c o F a c t o r y . C r i a r ( TipoBanco . S Q L S e r v e r ) ;ExecutarProcessamentoDeDados ( conexao ) ;c o n e x a o = c o n e x a o B a n c o F a c t o r y . C r i a r ( TipoBanco . O r a c l e ) ;ExecutarProcessamentoDeDados ( conexao ) ;...p u b l i c c l a s s ConexaoBancoFactory{ p u b l i c I D b C o n n e c t i o n C r i a r ( TipoBanco t i p o B a n c o ) { switch ( tipoBanco ) { c a s e SQLServer : r e t u r n new S q l C o n n e c t i o n ( ) ; case Oracle : r e t u r n new OdbcConnection ( . . . . . ) ; c a s e SQLServerCE : r e t u r n new S q l C e C o n n e c t i o n ( ) ; case Access : r e t u r n OleConnection ( . . . . ) ; default : t h r o w new S y s t e m E x c e p t i o n ( . . . ) ; } }}p u b l i c enum TipoBanco{ SQLServer ,C Marchezi () Humberto Padr˜es de Projeto o 22 de junho de 2012 16 / 42
  21. 21. Padr˜es de Projeto Criacionais oF´brica Abstrata a Prop´sito: Controlar a cria¸˜o de objetos de uma fam´ de classes o ca ılia Figura: F´brica Abstrata a Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 17 / 42
  22. 22. Padr˜es de Projeto Criacionais oF´brica Abstrata - Exemplo de Uso a// No i n i c i o da e x e c u c a o da a p l i c a c a oGerenciadorMapa . MapaFactory = new E s r i M a p a F a c t o r y ( . . . ) ;// R e s t o da a p l i c a ¸ ˜ o a p e n a s r e f e r e n c i a a s i n t e r f a c e s e p o r i s s o , ca// n˜ o c o n h e c e a t e c n o l o g i a e s p e c´ f i c a a ıp u b l i c v o i d J a n C a d a s t r o Q u a l q u e r C o i s a : . . . // ( Webform ou Winform ){ p r i v a t e IMapaLote mapaLote ; p u b l i c J a n C a d a s t r o Q u a l q u e r C o i s a ( ) // J a n C a d a s t r o Q u a l q u e r C o i s a L o a d { IMapaLote mapaLote = GerenciadorMapa . MapaFactory . C r i a r M a p a L o t e ( ) ; S e r v i c o C a d a s t r o Q u a l q u e r C o i s a s e r v i c o = new S e r v i c o C a d a s t r o Q u a l q u e r C o i s a ( ) ; . . . // L ´ g i c a da a p l i c a c ˜ o o ¸a } public void btAlgumaCoisa Click ( . . . ) { long idLote = t h i s . idLoteSelecionado ; mapaLote . S e l e c i o n a r L o t e ( i d L o t e ) ; t h i s . s e r v i c o . S e l e c i o n a r L o t e ( t h i s . i d L o t e S e l e c i o n a d o , t h i s . mapaLote ) ; }}// A l ´ g i c a do s e r v i c o pode s e r t e s t a d a sem u s a r o mapa r e a l opublic c l a s s ServicoCadastroQualquerCoisa{ p u b l i c S e l e c i o n a r L o t e ( l o n g i d L o t e , IMapaLote mapa ) { . . . // L ´ g i c a da a p l i c a c ˜ o o ¸a mapa . S e l e c i o n a r L o t e ( i d L o t e ) ; }} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 18 / 42
  23. 23. Padr˜es de Projeto Criacionais op u b l i c c l a s s GerenciadorMapa{ p r i v a t e IMapaFactory m a p a F a c t o r y ; p u b l i c s t a t i c MapaFactory O b t e r F a c t o r y ( ) { r e t u r n mapaFactory ; }}p u b l i c i n t e r f a c e IMapaFactory{ C r i a r M a p a L o t e ( ) : IMapaLote ; C r i a r M a p a Q u a d r a ( ) : IMapaQuadra ; C r i a r M a p a C o n s u l t a ( ) : IMapaConsulta ;}p u b l i c i n t e r f a c e IMapaLote{ void SelecionarLote ( long idLote ) ; LoteEventHandler event LoteSelecionado}p u b l i c i n t e r f a c e IMapaQuadra{ void SelecionarQuadra ( long idQuadra ) ; event QuadraEventHandler QuadraSelecionada ;}p u b l i c i n t e r f a c e IMapaConsulta{ void SelecionarLote ( long idLote ) ; event LoteEventHandler LoteSelecionado ;} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 19 / 42
  24. 24. Padr˜es de Projeto Criacionais op u b l i c c l a s s E s r i M a p a F a c t o r y : IMapaFactory{ p u b l i c IMapaLote C r i a r M a p a L o t e ( ) { r e t u r n new M a p a L o t e E s r i ( ) ; } p u b l i c IMapaQuadra C r i a r M a p a Q u a d r a ( ) { r e t u r n new MapaQuadraEsri ( ) ; } p u b l i c IMapaConsulta C r i a r M a p a C o n s u l t a ( ) { r e t u r n new M a p a C o n s u l t a E s r i ( ) ; }}p u b l i c c l a s s M a p a L o t e E s r i : U s e r C o n t r o l , IMapaLote{ . . . // I m p l e m e n t a ¸ ˜ o e s p e c´ f i c a do E s r i ca ı public void SelecionarLote ( long idLote ) { . . . // I m p l e m e n t a c ˜ o e s p e c´ f i c a do E s r i ¸a ı } public void LoteSelecionado () { . . . // I m p l e m e n t a c ˜ o e s p e c´ f i c a do E s r i ¸a ı } . . . // I m p l e m e n t a ¸ ˜ o e s p e c´ f i c a do E s r i ca ı} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 20 / 42
  25. 25. Padr˜es de Projeto Criacionais op u b l i c c l a s s MapaQuadraEsri : U s e r C o n t r o l , IMapaQuadra{ . . . // I m p l e m e n t a ¸ ˜ o e s p e c´ f i c a do E s r i ca ı p u b l i c void SelecionarQuadra ( long idQuadra ) { . . . // I m p l e m e n t a c ˜ o e s p e c´ f i c a do E s r i ¸a ı } public void QuadraSelecionada () { . . . // I m p l e m e n t a c ˜ o e s p e c´ f i c a do E s r i ¸a ı } . . . // I m p l e m e n t a ¸ ˜ o e s p e c´ f i c a do E s r i ca ı}p u b l i c c l a s s M a p a C o n s u l t a E s r i : U s e r C o n t r o l , IMapaConsulta{ . . . // I m p l e m e n t a ¸ ˜ o e s p e c´ f i c a do E s r i ca ı public void SelecionarLote ( long idLote ) { . . . // I m p l e m e n t a c ˜ o e s p e c´ f i c a do E s r i ¸a ı } public void LoteSelecionado () { . . . // I m p l e m e n t a c ˜ o e s p e c´ f i c a do E s r i ¸a ı } . . . // I m p l e m e n t a ¸ ˜ o e s p e c´ f i c a do E s r i ca ı} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 21 / 42
  26. 26. Padr˜es de Projeto de Sistemas Empresariais o1 Conte´do u2 Apresenta¸˜o ca3 Padr˜es de Projeto Estruturais o4 Padr˜es de Projeto Comportamentais o5 Padr˜es de Projeto Criacionais o6 Padr˜es de Projeto de Sistemas Empresariais o7 Referˆncias e Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 22 / 42
  27. 27. Padr˜es de Projeto de Sistemas Empresariais oCamada de Servi¸o c Prop´sito: Define um limite de aplica¸˜o com uma camada de o ca servi¸os que estabelece um conjunto de opera¸˜es e coordena a c co resposta da aplica¸˜o em cada opera¸˜o. ca ca Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 23 / 42
  28. 28. Padr˜es de Projeto de Sistemas Empresariais oCamada de Servi¸o c Caracter´ısticas de um Servi¸o: c N˜o cont´m (n˜o deveria) regras de neg´cio a e a o Coordena as tarefas pela colabora¸˜o dos objetos do dom´ e a ca ınio persistˆncia e N˜o mant´m o estado da aplica¸˜o (n˜o contem campos) a e ca a Pode mostrar o progresso da realiza¸˜o da tarefa ca Figura: Exemplo de Implementa¸˜o Camada de Servi¸o ca c Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 24 / 42
  29. 29. Padr˜es de Projeto de Sistemas Empresariais oCamada de Servi¸o cpublic class ServicoCadastroCliente{ p u b l i c void RegistrarVendaProduto ( s t r i n g c p f C l i e n t e , long idProduto , long idEmpresa ) { Cliente c l i e n t e = RecuperarClientePeloCPF ( c p f C l i e n t e ) ; Produto produto = RecuperarProdutoPeloId ( idProduto ) ; Empresa e m p r e s a = R e c u p e r a r E m p r e s a P e l o I d ( i d E m p r e s a ) ; empresa . V e r i f i c a r S e P r o d u t o E s t a D i s p o n i v e l ( produto ) ; empresa . VenderProduto ( produto , c l i e n t e ) ; DAO. F a c t o r y . S a l v a r ( e m p r e s a ) ; }} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 25 / 42
  30. 30. Padr˜es de Projeto de Sistemas Empresariais oPortal para Dados Tabulados (Table Data Gateway) Prop´sito: Oferece uma instˆncia de uma classe que funciona como o a um portal para acessar e modificar dados de uma tabela no banco-de-dados. Figura: Classes s˜o Portal para Acessar a Tabela a Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 26 / 42
  31. 31. Padr˜es de Projeto de Sistemas Empresariais oPortal para Dados Tabulados (Table Data Gateway) Vantagens: Evita que comandos SQL repetidos se espalhem pela aplica¸˜o. (O mal ca do copy-paste). Isola comantos espec´ ıficos de um banco nessas classes. Permite a execu¸˜o de testes na l´gica da aplica¸˜o sem ter que usar ca o ca acesso ao banco-de-dados. Abordagem mais simples e de f´cil entendimento a Observa¸˜es: co Esse tipo de padr˜o ´ recomendado quando a camada de persistˆncia a e e n˜o puder executar um determinado acesso a dados. Ex: execu¸˜o de a ca stored procedures e SQL muito complexos e espec´ ıficos Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 27 / 42
  32. 32. Padr˜es de Projeto de Sistemas Empresariais oPortal para Dados Tabulados (Table Data Gateway)public class ServicoCadastroCliente{ p u b l i c l o n g I n c l u i r C l i e n t e ( s t r i n g nome , s t r i n g c p f , s t r i n g c e p E n d e r e c o , s t r i n g n u m e r o E n d e r e c o ) { s t r i n g s q l = S t r i n g . Format ( ” i n s e r t i n t o C l i e n t e ( nome , c p f , cep , numero ) v a l u e s ( ’ { 0 } ’ , ’ { 1 } ’ , ’ { nome , c p f , c e p E n d e r e c o , n u m e r o E n d e r e c o ) ; I D b C o n n e c t i o n c nx = O b t e r C o n e x a o ( ) ; IDbCommand cmd = cn x . CreateCommand ( ) ; cmd . ExecuteCommand ( s q l ) ; } p u b l i c v o i d A l t e r a r N o m e ( i d C l i e n t e , nome ) { ... } p u b l i c DataTable O b t e r P e l o I d ( l o n g i d ) { s t r i n g s q l = S t r i n g . Format ( ” s e l e c t c o d C l i e n t e , nome , c p f , cep , numero w h e r e c o d C l i e n t e = {0}” I D b C o n n e c t i o n c nx = O b t e r C o n e x a o ( ) ; DataAdapter d a t a A d a p t e r = O b t e r D a t a A d a p t e r P r e e n c h i d o ( s q l , c nx ) ; return dataAdapter . Tables [ 0 ] ; } p u b l i c D a t a T a b l e ObterPeloNome ( s t r i n g nome ) { ... }} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 28 / 42
  33. 33. Padr˜es de Projeto de Sistemas Empresariais oModelo de Dom´ (Domain Model) ınio Prop´sito: Consiste num modelo de classes que incorpora tanto o comportamento (l´gica) quanto os dados (campos). o Figura: Um Modelo de Dom´ ınio Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 29 / 42
  34. 34. Padr˜es de Projeto de Sistemas Empresariais o Vantagens: Especialmente vantajoso para regras de neg´cio complicadas e o dinˆmicas normalmente envolvendo v´rios tipos de c´lculos, valida¸˜es a a a co e deriva¸˜es co Isola a l´gica de neg´cio das opera¸˜es de leitura/modifica¸˜es de o o co co dados, logo ´ independente de esquema de persistˆncia e e e bancos-de-dados Permite a execu¸˜o de testes unit´rios automatizados na l´gica de ca a o neg´cio contida nessas classes oHumberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 30 / 42
  35. 35. Padr˜es de Projeto de Sistemas Empresariais oObjeto Valor (Value Object) Classe Dinheiro public c l a s s Dinheiro { p u b l i c D i n h e i r o ( Moeda moeda , d e c i m a l v a l o r ) { Moeda = moeda ; V a l o r = v a l o r ; } p u b l i c Moeda { g e t ; s e t ; } p u b l i c Valor {get ; s e t ;} } Primeiro problema: Considere a situa¸˜o ca D i n h e i r o p r e c o = new D i n h e i r o ( ”R” , 4 5 ) ; // 45 r e a i s produto1 . Preco = preco ; // p r o d u t o 1 c u s t a 45 preco . Valor = 80; // V a l o r do p r e ¸ o ´ 80 c e produto2 . Preco = preco ; // p r o d u t o 2 c u s t a 80 e p r o d u t o 1 c u s t a 80 ! ! TODA instˆncia de uma classe no .NET ´ tratada como referˆncia e a e e isso pode ter efetios colaterais Segundo problema: Considere a situa¸˜o ca D i n h e i r o p r e c o 1 = new D i n h e i r o ( ”R” , 8 0 ) ; // 80 r e a i s D i n h e i r o p r e c o 2 = new D i n h e i r o ( ”R” , 8 0 ) ; // 80 r e a i s b o o l e h I g u a l = ( p r e c o 1 == p r e c o 2 ) ; // FALSE : A r e f e r ˆ n c i a em mem´ ria ´ comparada e o e Mesmo sendo instˆncias distintas o resultado deveria ser TRUE a Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 31 / 42
  36. 36. Padr˜es de Projeto de Sistemas Empresariais o Solu¸˜o: Criar classes com o padr˜o objeto-valor ca a public c l a s s Dinheiro { p u b l i c D i n h e i r o ( Moeda moeda , d e c i m a l v a l o r ) { Moeda = moeda ; Valor = valor ; } p u b l i c Moeda Moeda { g e t ; p r o t e c t e d s e t ; } p u b l i c decimal Valor { get ; protected set ; } p u b l i c o v e r r i d e bool Equals ( object obj ) { r e t u r n Dinheiro . EhIgual ( t h i s , obj as Dinheiro ) ; } p u b l i c o v e r r i d e i n t GetHashCode ( ) { s t r i n g i d e n t i f i c a c a o = t h i s . Moeda . GetHashCode ( ) . T o S t r i n g ( ) + t h i s . V a l o r . T o S t r i n g ( ) ; r e t u r n i d e n t i f i c a c a o . GetHashCode ( ) ; } p u b l i c s t a t i c b o o l o p e r a t o r ==(D i n h e i r o l h s , D i n h e i r o r h s ) { return Dinheiro . EhIgual ( lhs , rhs ) ; } p u b l i c s t a t i c b o o l o p e r a t o r !=( D i n h e i r o l h s , D i n h e i r o r h s ) { return ! Dinheiro . EhIgual ( lhs , rhs ) ; } p r i v a t e s t a t i c b o o l E h I g u a l ( D i n h e i r o d1 , D i n h e i r o d2 ) { r e t u r n ( ( d1 . Moeda == d2 . Moeda ) && ( d1 . V a l o r == d2 . V a l o r ) ) ; } }Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 32 / 42
  37. 37. Padr˜es de Projeto de Sistemas Empresariais oD i n h e i r o p r e c o 1 = new D i n h e i r o ( ”R” , 4 5 ) ; // 45 r e a i sproduto1 . Preco = preco1 ; // p r o d u t o 1 c u s t a 45D i n h e i r o p r e c o 2 = new D i n h e i r o ( ”R” , 8 0 ) ; // 80 r e a i sproduto2 . Preco = preco2 ; // p r o d u t o 2 c u s t a 80 e p r o d u t o 1 c u s t a 45 ! ! // ERRO : O b j e t o−v a l o r ´ i m u t ´ v e l , n˜ o s e pode a l t e r ´ −l o a p o s a c r i a ¸ ˜ o e a a a ´ ca preco1 . Valor = 70; // ERRO : Gera e x c e c ˜ o , n˜ o s e pode a l t e r a r o v a l o r ¸a a p r e c o 1 . Moeda = d o l a r ; // ERRO : Gera e x c e ¸ ˜ o , n˜ o s e pode a l t e r a r a moeda ca a Prop´sito: S˜o classes que representam valores imut´veis (n˜o o a a a mudam) e cujo crit´rio de igualdade n˜o ´ baseado em uma e a e propriedade Id. Logo, essas classes n˜o possuem Id. a Figura: Dinheiro ´ um Objeto-Valor, Moeda ´ uma Entidade e e Vantagens: Permite simplificar conceitos mais complexos Evita que as referˆncias tenham que ser gerenciadas. e Observa¸˜o: Em .NET, um objeto tamb´m pode ser definido como ca e objeto-valor se o seu tipo ´ um Struct e Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 33 / 42
  38. 38. Padr˜es de Projeto de Sistemas Empresariais oModelo Vis˜o Controlador (Model View Controller) a Prop´sito: Surgiu junto com a plataforma Smalltalk e a sua id´ia ´ a o e e separa¸˜o das classes de um sistema em trˆs pap´is distintos: ca e e Modelo: Classe n˜o visual com dados e comportamento. Uma a informa¸˜o no sistema. ca Vis˜o: Classe que representa o modelo visualmente na interface gr´fica. a a Controlador: Recebe a entrada de dados, manipula o modelo e atualiza a vis˜o apropriadamente. a Figura: Pacotes MVC Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 34 / 42
  39. 39. Padr˜es de Projeto de Sistemas Empresariais oModelo Vis˜o Controlador (Model View Controller) a Vantagens: Guia a separa¸˜o de classes com pap´is diferentes ca e Modelo pode ser representado visualmente de v´rias formas a Facilita o teste de objetos n˜o visuais como o modelo a Figura: Exemplo de Implementa¸˜o MVC ca Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 35 / 42
  40. 40. Padr˜es de Projeto de Sistemas Empresariais oModelo Vis˜o Controlador (Model View Controller) aModelo p u b l i c c l a s s Contato { p u b l i c C o n t a t o ( s t r i n g nome , s t r i n g e m a i l ) { Nome = nome ; Email = email ; } p u b l i c long Id { get ; protected set ; } p u b l i c s t r i n g Nome { g e t ; s e t ; } p u b l i c s t r i n g Email { get ; s e t ; } }Vis˜o a public i n t e r f a c e ICadastroContatoView { long IdContato { get ; set ; } s t r i n g NomeContato { g e t ; s e t ; } s t r i n g EmailContato { get ; s e t ; } bool HabilitarIdContato { set ; } bool HabilitarNomeContato { set ; } bool HabilitarEmailContato { set ; } event EventHandler I n s e r i r C l i e n t e ; event EventHandler NovoCliente ; } Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 36 / 42
  41. 41. Padr˜es de Projeto de Sistemas Empresariais oModelo Vis˜o Controlador - Controlador a public c l a s s CadastroContatoControlador { p r i v a t e ICadastroContatoView visao ; public CadastroContatoControlador ( ICadastroContatoView visao ) { visao = visao ; v i s a o . I n s e r i r C l i e n t e += new E v e n t H a n d l e r ( C l i e n t e I n s e r i d o ) ; v i s a o . N o v o C l i e n t e += new E v e n t H a n d l e r ( N o v o C l i e n t e ) ; } void NovoCliente ( o b j e c t sender , EventArgs e ) { this . visao . HabilitarIdContato = true ; t h i s . v i s a o . HabilitarNomeContato = true ; this . visao . HabilitarEmailContato = true ; t h i s . v i s a o . IdContato = 0; t h i s . v i s a o . NomeContato = s t r i n g . Empty ; t h i s . v i s a o . E m a i l C o n t a t o = s t r i n g . Empty ; } void C l i e n t e I n s e r i d o ( o b j e c t sender , EventArgs e ) { C o n t a t o c o n t a t o = new C o n t a t o ( t h i s . v i s a o . NomeContato , t h i s . v i s a o . E m a i l C o n t a t o ) ; P e r s i s t e n c i a . Salvar ( contato ) ; this . visao . HabilitarIdContato = false ; t h i s . v i s a o . HabilitarNomeContato = f a l s e ; this . visao . HabilitarEmailContato = false ; } } Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 37 / 42
  42. 42. Padr˜es de Projeto de Sistemas Empresariais oModelo Vis˜o Controlador (Model View Controller) ap u b l i c p a r t i a l c l a s s J a n C a d a s t r o C o n t a t o : Form , I C a d a s t r o C o n t a t o V i e w{ private CadastroContatoControlador controlador ; p u b l i c JanCadastroContato () { InitializeComponent (); c o n t r o l a d o r = new C a d a s t r o C o n t a t o C o n t r o l a d o r ( t h i s ) ; } p u b l i c b o o l H a b i l i t a r N o m e C o n t a t o { s e t { t h i s . txtNome . E n a b l e d = v a l u e ; } } p u b l i c bool H a b i l i t a r E m a i l C o n t a t o { s e t { t h i s . txtContato . Enabled = value ; } } p u b l i c b o o l H a b i l i t a r I d C o n t a t o { s e t { t h i s . numIdContato . E n a b l e d = v a l u e ; } } p ubl ic long IdContato { g e t { r e t u r n ( l o n g ) t h i s . numIdContato . V a l u e ; } s e t { t h i s . numIdContato . V a l u e = v a l u e ; } } p u b l i c s t r i n g NomeContato { g e t { r e t u r n t h i s . txtNome . Text ; } s e t { t h i s . txtNome . Text = v a l u e ; } } p u b l i c s t r i n g EmailContato { g e t { r e t u r n t h i s . t x t C o n t a t o . Text ; } s e t { t h i s . t x t C o n t a t o . Text = v a l u e ; } } p u b l i c event EventHandler I n s e r i r C l i e n t e ; p r i v a t e void b t I n c l u i r C l i c k ( o b j e c t sender , EventArgs e ) { t h i s . I n s e r i r C l i e n t e ( sender , e ) ; p u b l i c event EventHandler NovoCliente ; p r i v a t e void btNovo Click ( o b j e c t sender , EventArgs e ) { t h i s . NovoCliente ( sender , e ) ; }} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 38 / 42
  43. 43. Padr˜es de Projeto de Sistemas Empresariais oModelo Vis˜o Controlador (Model View Controller) ap u b l i c p a r t i a l c l a s s W e b C a d a s t r o C o n t a t o : System . Web . UI . Page , I C a d a s t r o C o n t a t o V i e w{ private CadastroContatoControlador controlador ; p r o t e c t e d v o i d Page Load ( o b j e c t s e n d e r , E v e n t A r g s e ) { c o n t r o l a d o r = new C a d a s t r o C o n t a t o C o n t r o l a d o r ( t h i s ) ; } p u b l i c bool H a b i l i t a r I d C o n t a t o { s e t { t h i s . txtIdContato . Enabled = value ; } } p u b l i c b o o l H a b i l i t a r N o m e C o n t a t o { s e t { t h i s . tx tNome Conta to . E n a b l e d = v a l u e ; } } p u b l i c bool H a b i l i t a r E m a i l C o n t a t o { s e t { t h i s . txtEmailContato . Enabled = value ; } } p ubl ic long IdContato { g e t { r e t u r n I n t 6 4 . P a r s e ( t h i s . t x t I d C o n t a t o . Text ) ; } s e t { t h i s . t x t I d C o n t a t o . Text = v a l u e . T o S t r i n g ( ) ; } } p u b l i c s t r i n g NomeContato { g e t { r e t u r n t h i s . txtNo meCon tato . Text ; } s e t { t h i s . tx tNome Conta to . Text = v a l u e ; } } p u b l i c s t r i n g EmailContato { g e t { r e t u r n t h i s . t x t E m a i l C o n t a t o . Text ; } s e t { t h i s . t x t E m a i l C o n t a t o . Text = v a l u e ; } } p u b l i c event EventHandler NovoCliente ; p r o t e c t e d void btNovoContato Click ( o b j e c t sender , EventArgs e ) { t h i s . NovoCliente ( sender , e p u b l i c event EventHandler I n s e r i r C l i e n t e ; p r o t e c t e d void b t I n c l u i r C o n t a t o C l i c k ( o b j e c t sender , EventArgs e ) { t h i s . I n s e r i r C l i e n t e ( sen} Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 39 / 42
  44. 44. Padr˜es de Projeto de Sistemas Empresariais oExerc´ Data Table Gateway ıcioCriar um Data Table Gateway para o sistema do exerc´ anterior ıcio Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 40 / 42
  45. 45. Padr˜es de Projeto de Sistemas Empresariais oExerc´ MVC ıcio Aplica¸˜o Winforms e Webforms ca Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 41 / 42
  46. 46. Referˆncias eReferˆncias e data & object factory: http://www.dofactory.com/Patterns/Patterns.aspx Patterns of Enterprise Application Architecture - Martin Fowler: http://martinfowler.com/eaaCatalog/ Humberto C Marchezi () Padr˜es de Projeto o 22 de junho de 2012 42 / 42

×