conhecendo os padrões de projetos
DESCRIPTION
Palestra Ministrada por Emanoel Tadeu no Cafe Com Tapioca do CEJUG com o Tema "Conhecendo os PadrõesDe Projetos"TRANSCRIPT
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]
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
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
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].
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.
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
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.
Café com Tapioca ‐ Conhecendo os Padrões de Projeto
OBSERVER
8 Conhecendo os Padrões de Projeto ‐ 15/09/07
OBSERVER
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
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
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
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" />
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>
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
Café com Tapioca ‐ Conhecendo os Padrões de Projeto
DECORATOR
15 Conhecendo os Padrões de Projeto ‐ 15/09/07
DECORATOR
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
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" />
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
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()));
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;
Café com Tapioca ‐ Conhecendo os Padrões de Projeto
MVC
21 Conhecendo os Padrões de Projeto ‐ 15/09/07
MVC
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
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
Café com Tapioca ‐ Conhecendo os Padrões de Projeto
FACTORY
24 Conhecendo os Padrões de Projeto ‐ 15/09/07
FACTORY
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...
Café com Tapioca ‐ Conhecendo os Padrões de Projeto 26 Conhecendo os Padrões de Projeto ‐ 15/09/07
Factory
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.
Café com Tapioca ‐ Conhecendo os Padrões de Projeto
ABSTRACT FACTORY
28 Conhecendo os Padrões de Projeto ‐ 15/09/07
ABSTRACT FACTORY
Café com Tapioca ‐ Conhecendo os Padrões de Projeto
Abstract Factory
29 Conhecendo os Padrões de Projeto ‐ 15/09/07
Abstract Factory
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.
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.