conhecendo os padrões de projetos

31
Café com Tapioca ‐ Conhecendo os Padrões d Conhecend Conhecend De P De P Emano Emano emanoeltade emanoeltade 1 de Projeto ‐ 15/09/07 do os Padrões do os Padrões Projetos Projetos oel oel Tadeu Tadeu [email protected] [email protected]

Upload: cejug

Post on 06-Jun-2015

997 views

Category:

Technology


4 download

DESCRIPTION

Palestra Ministrada por Emanoel Tadeu no Cafe Com Tapioca do CEJUG com o Tema "Conhecendo os PadrõesDe Projetos"

TRANSCRIPT

Page 1: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Conhecendo os Padrões Conhecendo os Padrões De Projetos De Projetos 

Emanoel Emanoel [email protected] [email protected] 

1 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Conhecendo os Padrões Conhecendo os Padrões De Projetos De Projetos 

Emanoel Emanoel Tadeu Tadeu [email protected] [email protected]

Page 2: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

•  Graduação  em  Telemática Atualmente  é  Analista Checkrota. 

•  Aluno  do  curso  de Tecnologias  da  Informação Desenvolvimento de Software UFC. 

•  Experiência  em desenvolvimento para a web (Java e PHP) 

Emanoel Tadeu 

2 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Telemática  pelo  CEFET. Analista  de  Sistemas  Jr.  da 

de  Especialização  em Informação  com  ênfase  em 

Software para  a Web da 

desenvolvimento de  software PHP). 

Emanoel Tadeu

Page 3: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Padrões de Projetos 

•  Soluções para problemas experiências anteriores comprovadamente 

•  Modo  de  alterar  software possível no código existente 

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

3 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Padrões de Projetos 

em aplicações baseadas em comprovadamente eficazes. 

software  com  o  menor  impacto existente. 

documentações  de  boas  soluções,  ou realmente  comprovadas  pela

Page 4: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

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á do mesmo modo”, Alexander et. al. 1977]. 

4 Conhecendo os Padrões de Projeto ‐ 15/09/07 

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”, 

“(...) 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 do mesmo modo”, Alexander et. al. 1977].

Page 5: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

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. 

5 Conhecendo os Padrões de Projeto ‐ 15/09/07 

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.

Page 6: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

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 

6 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Frameworks e Padrões de Projetos 

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

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

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

Page 7: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Vantagens na utilização de padrões 

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

7 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Vantagens na utilização de padrões 

Facilita a evolução do código.

Page 8: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

OBSERVER 

8 Conhecendo os Padrões de Projeto ‐ 15/09/07 

OBSERVER

Page 9: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

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 dados 

9 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Padrão Observer 

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

Evita que vários objetos controlem os mesmos

Page 10: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Observer 

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

– java.util.Observable (C) 

•  Exemplo simples do padrão no eclipse 

10 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Observer 

Implementação do padrão em: 

java.util.Observable (C) 

Exemplo simples do padrão no eclipse

Page 11: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

“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 

JobExecutionException { //implementação do que deve ser feito 

•  } •  } 

11 Conhecendo os Padrões de Projeto ‐ 15/09/07 

“Observer” com o Spring 

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 

*            Contexto que de execução do Quartz.*/ protected void executeInternal(JobExecutionContext jobExecutionContext) throws

Page 12: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

“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" /> </entry> 

</map> </property> 

</bean> 

12 Conhecendo os Padrões de Projeto ‐ 15/09/07 

“Observer” com o Spring 

<bean name="Job" class="org.springframework.scheduling.quartz.JobDetailBean"> 

<ref bean="areaService" />

Page 13: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

“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> </property> 

</bean> 

13 Conhecendo os Padrões de Projeto ‐ 15/09/07 

“Observer” com o Spring 

class="org.springframework.scheduling.quartz.CronTriggerBean"> 

<ref bean=“ExemploJob" /> 

<property name="cronExpression"> <value>0 0/1 * * * ?</value>

Page 14: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Observer 

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

•  Sem ordem de notificação... 

•  Variações de estado de observadores 

14 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Observer 

se criar uma implementação Observable 

Sem ordem de notificação... 

Variações de estado de observadores

Page 15: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

DECORATOR 

15 Conhecendo os Padrões de Projeto ‐ 15/09/07 

DECORATOR

Page 16: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Decorator 

•  Princípio do aberto‐fechado 

•  Fornece mais responsabilidades a um objeto 

•  Sem herança 

16 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Decorator 

fechado 

Fornece mais responsabilidades a um objeto

Page 17: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Decorator em JSP 

<display:table id="row" name="${tempos}" class="simple"> 

<display:column title="Tempo" property=“hora" style="white nowrap;" decorator="br.com.util.HoraTableDecorator" /> 

</display:table> 

17 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Decorator em JSP 

<display:table id="row" name="${tempos}" class="simple"> 

<display:column title="Tempo" property=“hora" style="white‐space: nowrap;" decorator="br.com.util.HoraTableDecorator" />

Page 18: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Decorator em JSP 

18 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Decorator em JSP

Page 19: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

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 implementsDisplaytagColumnDecorator { 

public Object decorate(Object columnValue, PageContext pageContext, MediaTypeEnum media) throws DecoratorException { try { return HoraTableDecorator.parseHour 

} catch (Exception e) { return columnValue.toString(); 

} } 

19 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Decorator em JSP 

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

DisplaytagColumnDecorator { 

Object decorate(Object columnValue, PageContext pageContext, MediaTypeEnum 

parseHour(Long.valueOf(columnValue.toString()));

Page 20: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

public static String parseHour(Long millis) 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; } 

20 Conhecendo os Padrões de Projeto ‐ 15/09/07 

String parseHour(Long millis) throws Exception { 

((horas < 10) ? "0" : "") + horas + ":" + ((minutos < 10) ? "0" : "") + minutos + ":" + ((segundos < 10) ? "0" : "") + segundos;

Page 21: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

MVC 

21 Conhecendo os Padrões de Projeto ‐ 15/09/07 

MVC

Page 22: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

•  Model‐View‐Controller (Modelo 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 visualização 

22 Conhecendo os Padrões de Projeto ‐ 15/09/07 

MVC 

Controller (Modelo‐Visualização‐ 

A visualização informa uma ação que é tratada 

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

Page 23: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

•  Modelo pode atuar como Observable e a visualização como Observer 

23 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Modelo pode atuar como Observable e a visualização como Observer

Page 24: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

FACTORY 

24 Conhecendo os Padrões de Projeto ‐ 15/09/07 

FACTORY

Page 25: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

•  Fabrica de objetos 

•  Interface para criar os objetos 

•  Decisão de instanciar uma classe... 

25 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Factory 

Interface para criar os objetos 

Decisão de instanciar uma classe...

Page 26: Conhecendo os Padrões De Projetos

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

Factory

Page 27: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

•  Chamada ao método comum desta classe 

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

27 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Factory 

Chamada ao método comum desta classe 

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

Page 28: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

ABSTRACT FACTORY 

28 Conhecendo os Padrões de Projeto ‐ 15/09/07 

ABSTRACT FACTORY

Page 29: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Abstract Factory 

29 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Abstract Factory

Page 30: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Conclusões 

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

30 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Conclusões 

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

Page 31: Conhecendo os Padrões De Projetos

Café com Tapioca ‐ Conhecendo os Padrões de Projeto 

Bibliografia 

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

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

•  Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl “A Pattern Language: Towns, Buildings, Construction”, Oxford University Press, New York, NY. 

31 Conhecendo os Padrões de Projeto ‐ 15/09/07 

Bibliografia 

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

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