O documento discute os padrões de projeto Observer, Decorator e MVC. O documento apresenta o palestrante Emanoel Tadeu e sua experiência, e então fornece detalhes sobre os padrões Observer, Decorator e MVC, incluindo exemplos de implementação.
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
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
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
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
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