SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Conhecendo os Padrões 
      De Projetos 
                Emanoel Tadeu
            emanoeltadeu@gmail.com 
            emanoeltadeu@gmail.com
Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               1 
Emanoel Tadeu
                                     Emanoel Tadeu 

•  Graduação  em  Telemática  pelo  CEFET. 
   Atualmente  é  Analista  de  Sistemas  Jr.  da 
   Checkrota. 
•  Aluno  do  curso  de  Especialização  em 
   Tecnologias  da  Informação  com  ênfase  em 
   Desenvolvimento  de  Software  para  a  Web  da 
   UFC. 
•  Experiência  em  desenvolvimento  de  software 
   para a web (Java e PHP) 
                      PHP). 

        Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                           Conhecendo os Padrões de Projeto               2 
Padrões de Projetos 

•  Soluções para problemas em aplicações baseadas em 
   experiências anteriores comprovadamente eficazes. 
                           comprovadamente

•  Modo  de  alterar  software  com  o  menor  impacto 
   possível no código existente 
                      existente. 

•  Padrões  são  documentações  de  boas  soluções,  ou 
   seja,  soluções  realmente  comprovadas  pela
   experiência prática. 


        Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                           Conhecendo os Padrões de Projeto               3 
Padrões de Projetos 

•  “Os padrões de projeto são descrições de objetos que se 
   comunicam e classes que são customizadas para resolver um 
   problema de projeto genérico em um contexto específico”, 
   [Gamma et. al. 1995]. 

•  “(...) entidade que descreve um problema que ocorre 
   repetidamente em um ambiente e então descreve a essência 
   de uma solução para este problema, de tal forma que você 
   possa usar essa solução milhões de vezes, sem nunca utilizá‐la 
   possa usar essa solução milhões de vezes, sem nunca utilizá 
   do mesmo modo”, Alexander et. al. 1977].
   do mesmo modo”, Alexander et. al. 1977]. 




          Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                             Conhecendo os Padrões de Projeto               4 
Padrões de Projetos 

•  Provêem soluções para refinar os subsistemas 
   ou componentes do software ao nível de 
   projeto, bem como o relacionamento entre 
   eles. Descrevem aspectos do projeto do 
   software, como objetos, classes, herança, 
   agregação, entre outros.
   agregação, entre outros. 




       Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                          Conhecendo os Padrões de Projeto               5 
Frameworks e Padrões de Projetos 


•  Padrões de projetos são mais abstratos do que 
   frameworks 

•  Um framework inclui código, um padrão de 
   projetos não 

•  Um framework pode conter vários padrões 
   mas o contrário nunca ocorre
   mas o contrário nunca ocorre 

       Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                          Conhecendo os Padrões de Projeto               6 
Vantagens na utilização de padrões 


•  Vocabulário 
•  Facilita a evolução do código. 
   Facilita a evolução do código.
•  Reuso das soluções 




        Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                           Conhecendo os Padrões de Projeto               7 
OBSERVER
                 OBSERVER 



Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               8 
Padrão Observer 

•  Quando ocorre mudança de estado em um 
   objeto (sujeito), seus dependentes são 
   avisados (observadores). 

•  Relação 1‐n 

•  Evita que vários objetos controlem os mesmos 
   Evita que vários objetos controlem os mesmos
   dados 


        Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                           Conhecendo os Padrões de Projeto               9 
Observer 

•  Implementação do padrão em: 
  – java.util.Observer (I) 
  – java.util.Observable (C) 


•  Exemplo simples do padrão no eclipse 
   Exemplo simples do padrão no eclipse




        Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                           Conhecendo os Padrões de Projeto               10 
“Observer” com o Spring 
•    import org.quartz.JobExecutionContext; 
•    import org.quartz.JobExecutionException; 
•    import org.springframework.scheduling.quartz.QuartzJobBean; 

•    /**<b>Propósito:</b> Classe que implementa um JOB.*/ 
•    public class ExemploJob extends QuartzJobBean { 

•           /**Principal método, é executado no momento que foi configurado no Quartz 
•            * @param jobExecutionContext 
•            *            Contexto que de execução do Quartz.*/ 
•           protected void executeInternal(JobExecutionContext jobExecutionContext) throws
            protected void executeInternal(JobExecutionContext jobExecutionContext) throws 
     JobExecutionException { 
     //implementação do que deve ser feito 
•          } 
•    } 




               Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                                  Conhecendo os Padrões de Projeto                            11 
“Observer” com o Spring 

No spring‐config.xml: 

<bean name="Job" class="org.springframework.scheduling.quartz.JobDetailBean"> 
      <property name="jobClass"> 
           <value>ExemploJob</value> 
       </property> 
      <property name="jobDataAsMap"> 
          <map> 
             <entry key="areaService"> 
                 <ref bean="areaService" />
                 <ref bean="areaService" /> 
             </entry> 
           </map> 
      </property> 
</bean> 




              Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                                 Conhecendo os Padrões de Projeto                12 
“Observer” com o Spring 

No spring‐config.xml: 


<bean id=“JobCronTrigger" 
   class="org.springframework.scheduling.quartz.CronTriggerBean"> 
         <property name="jobDetail"> 
                   <ref bean=“ExemploJob" /> 
         </property> 
         <property name="cronExpression"> 
                   <value>0 0/1 * * * ?</value>
                   <value>0 0/1 * * * ?</value> 
         </property> 
</bean> 




              Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                                 Conhecendo os Padrões de Projeto               13 
Observer 

•  Pode‐se criar uma implementação Observable 
         se criar uma implementação Observable 
   se necessário. 

•  Sem ordem de notificação... 

•  Variações de estado de observadores 
   Variações de estado de observadores



       Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                          Conhecendo os Padrões de Projeto               14 
DECORATOR
            DECORATOR 



Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               15 
Decorator 

•  Princípio do aberto‐fechado 
                       fechado 

•  Fornece mais responsabilidades a um objeto 
   Fornece mais responsabilidades a um objeto

•  Sem herança 




       Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                          Conhecendo os Padrões de Projeto               16 
Decorator em JSP 



<display:table id="row" name="${tempos}" class="simple"> 
<display:column title="Tempo" property=“hora" style="white‐space: 
<display:column title="Tempo" property=“hora" style="white 
   nowrap;" decorator="br.com.util.HoraTableDecorator" />
   nowrap;" decorator="br.com.util.HoraTableDecorator" /> 
</display:table> 




         Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                            Conhecendo os Padrões de Projeto               17 
Decorator em JSP
                         Decorator em JSP 




Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               18 
Decorator em JSP 
package br.com.util; 

import javax.servlet.jsp.PageContext; 

import org.displaytag.decorator.DisplaytagColumnDecorator; 
import org.displaytag.exception.DecoratorException; 
import org.displaytag.properties.MediaTypeEnum; 

public class HoraTableDecorator implements DisplaytagColumnDecorator { 

     public Object decorate(Object columnValue, PageContext pageContext, MediaTypeEnum 
        media) throws DecoratorException { 
        try { 
           return HoraTableDecorator.parseHour 
                                     parseHour(Long.valueOf(columnValue.toString()));
        } catch (Exception e) { 
           return columnValue.toString(); 
        } 
     } 
} 

               Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                                  Conhecendo os Padrões de Projeto                        19 
public static String parseHour(Long millis) 
              String parseHour(Long millis) throws Exception { 
     if (millis == 0) { 
         return "00:00:00"; 
     } 
     Long resto = millis + 0; 
     Long horas = resto / 1000 / 60 / 60; 
     resto ‐= horas * 1000 * 60 * 60; 
     Long minutos = resto / 1000 / 60; 
     resto ‐= minutos * 1000 * 60; 
     Long segundos = resto / 1000; 
     resto ‐= segundos * 1000; 
     return ((horas < 10) ? "0" : "") + horas + ":" + ((minutos < 10) ? "0" : "") + minutos 
         + ":" + ((segundos < 10) ? "0" : "") + segundos;
         + ":" + ((segundos < 10) ? "0" : "") + segundos; 
} 




              Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                                 Conhecendo os Padrões de Projeto                              20 
MVC
                              MVC 



Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               21 
MVC 

•  Model‐View‐Controller (Modelo 
               Controller (Modelo‐Visualização‐ 
   Controlador) 

•  A visualização informa uma ação que é tratada 
   pelo controlador 

•  Após o tratamento, o controlador determina 
   ação do modelo e possível alteração na
   ação do modelo e possível alteração na 
   visualização 

       Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                          Conhecendo os Padrões de Projeto               22 
•  Modelo pode atuar como Observable e a 
   visualização como Observer
   visualização como Observer 




       Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                          Conhecendo os Padrões de Projeto               23 
FACTORY
                    FACTORY 



Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               24 
Factory 

•  Fabrica de objetos 

•  Interface para criar os objetos 

•  Decisão de instanciar uma classe... 
   Decisão de instanciar uma classe...




        Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                           Conhecendo os Padrões de Projeto               25 
Factory




Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               26 
Factory 

•  Chamada ao método comum desta classe 

•  Sem conhecimento/preocupação qual classe 
   você está realmente lhe dando.
   você está realmente lhe dando. 




       Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                          Conhecendo os Padrões de Projeto               27 
ABSTRACT FACTORY
ABSTRACT FACTORY 



Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               28 
Abstract Factory
                           Abstract Factory 




Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                   Conhecendo os Padrões de Projeto               29 
Conclusões 

•  Não basta aprender uma tecnologia, é 
   necessário também conseguir projetar 
   soluções com esta tecnologia.
   soluções com esta tecnologia. 




       Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                          Conhecendo os Padrões de Projeto               30 
Bibliografia 

•    Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1995) “Design Patterns
     Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1995) “Design Patterns ‐ Elements of 
     Reusable Object‐Oriented Software”, Addison 
                     Oriented Software”, Addison‐Wesley. 

•    http://c2.com/cgi/wiki?ObserverPattern 

•    Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl‐King, I. and Angel, S. (1977) 
     Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl 
     “A Pattern Language: Towns, Buildings, Construction”, Oxford University Press, New York, NY.
     “A Pattern Language: Towns, Buildings, Construction”, Oxford University Press, New York, NY. 




                 Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07 
                                    Conhecendo os Padrões de Projeto                                       31 

Mais conteúdo relacionado

Mais procurados

Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoIvan Rosolen
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseOziel Moreira Neto
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaAna Albert
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsEmerson Soares
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0Paulo Neto
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpRodrigo Aramburu
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAYelken Heckman Ferreira Gonzales
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasjesuinoPower
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesRodrigo Cândido da Silva
 
Desenvolvimento Ágil com Play! Framework
Desenvolvimento Ágil com Play! FrameworkDesenvolvimento Ágil com Play! Framework
Desenvolvimento Ágil com Play! FrameworkKeuller Magalhães
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaAndrei Tognolo
 

Mais procurados (20)

Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
CakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápidoCakePHP e o desenvolvimento rápido
CakePHP e o desenvolvimento rápido
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java Enterprise
 
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E JpaDominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
Dominando Jsf E Facelets Utilizando Spring 2.5, Hibernate E Jpa
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no Windows
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 
JavaFX 8, Collections e Lambdas
JavaFX 8, Collections e LambdasJavaFX 8, Collections e Lambdas
JavaFX 8, Collections e Lambdas
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
 
Desenvolvimento Ágil com Play! Framework
Desenvolvimento Ágil com Play! FrameworkDesenvolvimento Ágil com Play! Framework
Desenvolvimento Ágil com Play! Framework
 
Navegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo javaNavegando em um mar de siglas do mundo java
Navegando em um mar de siglas do mundo java
 

Semelhante a Conhecendo os Padrões de Projeto

Pattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptPattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptGustavo Corrêa Alves
 
aula1introducaoarquitetura.pdf
aula1introducaoarquitetura.pdfaula1introducaoarquitetura.pdf
aula1introducaoarquitetura.pdfAntonio Lobato
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDaniel Carvalhinho
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareUFPA
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesedgarddavidson.com
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Renato Groff
 
Slides exemplodeprocessoscrum
Slides exemplodeprocessoscrumSlides exemplodeprocessoscrum
Slides exemplodeprocessoscrumSilas Dias
 
Practice 4 :: Gestão de Projetos de SW OO :: Métricas, Estimação e Planificações
Practice 4 :: Gestão de Projetos de SW OO :: Métricas, Estimação e PlanificaçõesPractice 4 :: Gestão de Projetos de SW OO :: Métricas, Estimação e Planificações
Practice 4 :: Gestão de Projetos de SW OO :: Métricas, Estimação e PlanificaçõesRogerio P C do Nascimento
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorMarcos Pereira
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Renato Groff
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Renato Groff
 

Semelhante a Conhecendo os Padrões de Projeto (20)

BDD com SpecFlow
BDD com SpecFlowBDD com SpecFlow
BDD com SpecFlow
 
Bdd com spec flow
Bdd com spec flowBdd com spec flow
Bdd com spec flow
 
Pattners Everywhere, Even in Javascript
Pattners Everywhere, Even in JavascriptPattners Everywhere, Even in Javascript
Pattners Everywhere, Even in Javascript
 
aula1introducaoarquitetura.pdf
aula1introducaoarquitetura.pdfaula1introducaoarquitetura.pdf
aula1introducaoarquitetura.pdf
 
Drupal e a Qualidade de Software
Drupal e a Qualidade de SoftwareDrupal e a Qualidade de Software
Drupal e a Qualidade de Software
 
Xamarin UI Test + BDD Specflow
Xamarin UI Test + BDD SpecflowXamarin UI Test + BDD Specflow
Xamarin UI Test + BDD Specflow
 
Introdução ao RUP
Introdução ao RUPIntrodução ao RUP
Introdução ao RUP
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
Scrum na sua Empresa
Scrum na sua EmpresaScrum na sua Empresa
Scrum na sua Empresa
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrões
 
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017Mocks, Stubs e Fakes - Developers-SP - Julho-2017
Mocks, Stubs e Fakes - Developers-SP - Julho-2017
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Slides exemplodeprocessoscrum
Slides exemplodeprocessoscrumSlides exemplodeprocessoscrum
Slides exemplodeprocessoscrum
 
Practice 4 :: Gestão de Projetos de SW OO :: Métricas, Estimação e Planificações
Practice 4 :: Gestão de Projetos de SW OO :: Métricas, Estimação e PlanificaçõesPractice 4 :: Gestão de Projetos de SW OO :: Métricas, Estimação e Planificações
Practice 4 :: Gestão de Projetos de SW OO :: Métricas, Estimação e Planificações
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao Sênior
 
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
Docker: primeiros passos - Semana FCI - Mackenzie - Outubro-2019
 
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
Docker: Conceitos e Primeiros Passos na utilização de Containers - Programand...
 
Introdução ao RUP
Introdução ao RUPIntrodução ao RUP
Introdução ao RUP
 
Apresentacao artigo final
Apresentacao artigo finalApresentacao artigo final
Apresentacao artigo final
 

Mais de cejug

PUG 2009
PUG 2009PUG 2009
PUG 2009cejug
 
Pug2009 documento final
Pug2009 documento finalPug2009 documento final
Pug2009 documento finalcejug
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 
Apresentando o CEJUG
Apresentando o CEJUGApresentando o CEJUG
Apresentando o CEJUGcejug
 
A Iniciativa JEDI, O ensino de Java livre e gratuito
A Iniciativa JEDI, O ensino de Java livre e gratuitoA Iniciativa JEDI, O ensino de Java livre e gratuito
A Iniciativa JEDI, O ensino de Java livre e gratuitocejug
 
Implementando MVC com AJAX
Implementando MVC com AJAXImplementando MVC com AJAX
Implementando MVC com AJAXcejug
 

Mais de cejug (6)

PUG 2009
PUG 2009PUG 2009
PUG 2009
 
Pug2009 documento final
Pug2009 documento finalPug2009 documento final
Pug2009 documento final
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Apresentando o CEJUG
Apresentando o CEJUGApresentando o CEJUG
Apresentando o CEJUG
 
A Iniciativa JEDI, O ensino de Java livre e gratuito
A Iniciativa JEDI, O ensino de Java livre e gratuitoA Iniciativa JEDI, O ensino de Java livre e gratuito
A Iniciativa JEDI, O ensino de Java livre e gratuito
 
Implementando MVC com AJAX
Implementando MVC com AJAXImplementando MVC com AJAX
Implementando MVC com AJAX
 

Conhecendo os Padrões de Projeto

  • 1. Conhecendo os Padrões  De Projetos  Emanoel Tadeu emanoeltadeu@gmail.com  emanoeltadeu@gmail.com Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 1 
  • 2. Emanoel Tadeu Emanoel Tadeu  •  Graduação  em  Telemática  pelo  CEFET.  Atualmente  é  Analista  de  Sistemas  Jr.  da  Checkrota.  •  Aluno  do  curso  de  Especialização  em  Tecnologias  da  Informação  com  ênfase  em  Desenvolvimento  de  Software  para  a  Web  da  UFC.  •  Experiência  em  desenvolvimento  de  software  para a web (Java e PHP)  PHP).  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 2 
  • 3. Padrões de Projetos  •  Soluções para problemas em aplicações baseadas em  experiências anteriores comprovadamente eficazes.  comprovadamente •  Modo  de  alterar  software  com  o  menor  impacto  possível no código existente  existente.  •  Padrões  são  documentações  de  boas  soluções,  ou  seja,  soluções  realmente  comprovadas  pela experiência prática.  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 3 
  • 4. Padrões de Projetos  •  “Os padrões de projeto são descrições de objetos que se  comunicam e classes que são customizadas para resolver um  problema de projeto genérico em um contexto específico”,  [Gamma et. al. 1995].  •  “(...) entidade que descreve um problema que ocorre  repetidamente em um ambiente e então descreve a essência  de uma solução para este problema, de tal forma que você  possa usar essa solução milhões de vezes, sem nunca utilizá‐la  possa usar essa solução milhões de vezes, sem nunca utilizá  do mesmo modo”, Alexander et. al. 1977]. do mesmo modo”, Alexander et. al. 1977].  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 4 
  • 5. Padrões de Projetos  •  Provêem soluções para refinar os subsistemas  ou componentes do software ao nível de  projeto, bem como o relacionamento entre  eles. Descrevem aspectos do projeto do  software, como objetos, classes, herança,  agregação, entre outros. agregação, entre outros.  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 5 
  • 6. Frameworks e Padrões de Projetos  •  Padrões de projetos são mais abstratos do que  frameworks  •  Um framework inclui código, um padrão de  projetos não  •  Um framework pode conter vários padrões  mas o contrário nunca ocorre mas o contrário nunca ocorre  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 6 
  • 7. Vantagens na utilização de padrões  •  Vocabulário  •  Facilita a evolução do código.  Facilita a evolução do código. •  Reuso das soluções  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 7 
  • 8. OBSERVER OBSERVER  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 8 
  • 9. Padrão Observer  •  Quando ocorre mudança de estado em um  objeto (sujeito), seus dependentes são  avisados (observadores).  •  Relação 1‐n  •  Evita que vários objetos controlem os mesmos  Evita que vários objetos controlem os mesmos dados  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 9 
  • 10. Observer  •  Implementação do padrão em:  – java.util.Observer (I)  – java.util.Observable (C)  •  Exemplo simples do padrão no eclipse  Exemplo simples do padrão no eclipse Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 10 
  • 11. “Observer” com o Spring  •  import org.quartz.JobExecutionContext;  •  import org.quartz.JobExecutionException;  •  import org.springframework.scheduling.quartz.QuartzJobBean;  •  /**<b>Propósito:</b> Classe que implementa um JOB.*/  •  public class ExemploJob extends QuartzJobBean {  •  /**Principal método, é executado no momento que foi configurado no Quartz  •  * @param jobExecutionContext  •  *            Contexto que de execução do Quartz.*/  •  protected void executeInternal(JobExecutionContext jobExecutionContext) throws protected void executeInternal(JobExecutionContext jobExecutionContext) throws  JobExecutionException {  //implementação do que deve ser feito  •  }  •  }  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 11 
  • 12. “Observer” com o Spring  No spring‐config.xml:  <bean name="Job" class="org.springframework.scheduling.quartz.JobDetailBean">  <property name="jobClass">  <value>ExemploJob</value>  </property>  <property name="jobDataAsMap">  <map>  <entry key="areaService">  <ref bean="areaService" /> <ref bean="areaService" />  </entry>  </map>  </property>  </bean>  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 12 
  • 13. “Observer” com o Spring  No spring‐config.xml:  <bean id=“JobCronTrigger"  class="org.springframework.scheduling.quartz.CronTriggerBean">  <property name="jobDetail">  <ref bean=“ExemploJob" />  </property>  <property name="cronExpression">  <value>0 0/1 * * * ?</value> <value>0 0/1 * * * ?</value>  </property>  </bean>  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 13 
  • 14. Observer  •  Pode‐se criar uma implementação Observable  se criar uma implementação Observable  se necessário.  •  Sem ordem de notificação...  •  Variações de estado de observadores  Variações de estado de observadores Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 14 
  • 15. DECORATOR DECORATOR  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 15 
  • 16. Decorator  •  Princípio do aberto‐fechado  fechado  •  Fornece mais responsabilidades a um objeto  Fornece mais responsabilidades a um objeto •  Sem herança  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 16 
  • 17. Decorator em JSP  <display:table id="row" name="${tempos}" class="simple">  <display:column title="Tempo" property=“hora" style="white‐space:  <display:column title="Tempo" property=“hora" style="white  nowrap;" decorator="br.com.util.HoraTableDecorator" /> nowrap;" decorator="br.com.util.HoraTableDecorator" />  </display:table>  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 17 
  • 18. Decorator em JSP Decorator em JSP  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 18 
  • 19. Decorator em JSP  package br.com.util;  import javax.servlet.jsp.PageContext;  import org.displaytag.decorator.DisplaytagColumnDecorator;  import org.displaytag.exception.DecoratorException;  import org.displaytag.properties.MediaTypeEnum;  public class HoraTableDecorator implements DisplaytagColumnDecorator {  public Object decorate(Object columnValue, PageContext pageContext, MediaTypeEnum  media) throws DecoratorException {  try {  return HoraTableDecorator.parseHour  parseHour(Long.valueOf(columnValue.toString())); } catch (Exception e) {  return columnValue.toString();  }  }  }  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 19 
  • 20. public static String parseHour(Long millis)  String parseHour(Long millis) throws Exception {  if (millis == 0) {  return "00:00:00";  }  Long resto = millis + 0;  Long horas = resto / 1000 / 60 / 60;  resto ‐= horas * 1000 * 60 * 60;  Long minutos = resto / 1000 / 60;  resto ‐= minutos * 1000 * 60;  Long segundos = resto / 1000;  resto ‐= segundos * 1000;  return ((horas < 10) ? "0" : "") + horas + ":" + ((minutos < 10) ? "0" : "") + minutos  + ":" + ((segundos < 10) ? "0" : "") + segundos; + ":" + ((segundos < 10) ? "0" : "") + segundos;  }  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 20 
  • 21. MVC MVC  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 21 
  • 22. MVC  •  Model‐View‐Controller (Modelo  Controller (Modelo‐Visualização‐  Controlador)  •  A visualização informa uma ação que é tratada  pelo controlador  •  Após o tratamento, o controlador determina  ação do modelo e possível alteração na ação do modelo e possível alteração na  visualização  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 22 
  • 23. •  Modelo pode atuar como Observable e a  visualização como Observer visualização como Observer  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 23 
  • 24. FACTORY FACTORY  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 24 
  • 25. Factory  •  Fabrica de objetos  •  Interface para criar os objetos  •  Decisão de instanciar uma classe...  Decisão de instanciar uma classe... Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 25 
  • 27. Factory  •  Chamada ao método comum desta classe  •  Sem conhecimento/preocupação qual classe  você está realmente lhe dando. você está realmente lhe dando.  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 27 
  • 29. Abstract Factory Abstract Factory  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 29 
  • 30. Conclusões  •  Não basta aprender uma tecnologia, é  necessário também conseguir projetar  soluções com esta tecnologia. soluções com esta tecnologia.  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 30 
  • 31. Bibliografia  •  Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1995) “Design Patterns Gamma, E., Helm, R., Johnson, R. and Vlissides, J. (1995) “Design Patterns ‐ Elements of  Reusable Object‐Oriented Software”, Addison  Oriented Software”, Addison‐Wesley.  •  http://c2.com/cgi/wiki?ObserverPattern  •  Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl‐King, I. and Angel, S. (1977)  Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl  “A Pattern Language: Towns, Buildings, Construction”, Oxford University Press, New York, NY. “A Pattern Language: Towns, Buildings, Construction”, Oxford University Press, New York, NY.  Café com Tapioca ‐ Conhecendo os Padrões de Projeto ‐ 15/09/07  Conhecendo os Padrões de Projeto 31