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 

Conhecendo os Padrões De Projetos

  • 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 paraproblemas 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;  importorg.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 
  • 26.
  • 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 
  • 28.
  • 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