17
1 CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla http://www.dainf.ct.utfpr.edu.br/~ tacla UTFPR/Campus Curitiba U NIVERS ID AD E TECNO G IC A FED ERA L DO PARANÁ PR

CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

Embed Size (px)

Citation preview

Page 1: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

CURSO DE ESPECIALIZAÇÃOEM TECNOLOGIA JAVA

DESIGN PATTERNSPARTE 4: PADRÕES FACTORY E DAO

Prof. Cesar Augusto Taclahttp://www.dainf.ct.utfpr.edu.br/~tacla

UTFPR/Campus Curitiba

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁPR

Page 2: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

22

◊ Antes de apresentar o DAO, veremos o padrão FACTORY frequentemente utilizado em conjunto com DAO.

◊ Para entender o modelo DAO, faremos um breve introdução ao padrão.

◊ Em seguida, implementaremos o modelo num programa simples de cadastro de clientes.

◊ Tópicos relacionados: Camada do modelo do padrão MVC, bando de dados relacional

Page 3: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

33

SIMPLE FACTORY

◊ Exemplo motivador Baixar o código Factory/ExemploFactory Compilar e rodar Observar os comentários na classe Pizzaria aqui

reproduzidos:

/** * exemplo extraido do livro Head First: Design Patterns * * Este exemplo eh para mostrar a motivacao de uso do padrao Factory. * O que acontece se quisermos suprimir uma pizza do cardapio ou adicionar * novas? Temos que mudar o codigo do metodo comandar. Se forem muitas * pizzas pode ficar desorganizado. O que acontece se houver varios pontos de instanciação* destas pizzas? Os ifs de criação devem ser replicados.

Page 4: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

44

SIMPLE FACTORY 2

◊ Solução: encapsular a criação das Pizzas em um objeto SimpleFactory (ou fábrica simples) que sabe como criar objetos da classe Pizza e de suas derivadas.

◊ Baixar código Factory/ExemploFactory2 e observar onde foi parar o código abaixo!

◊ Rascunhe um diagrama de classes para o código em questão. Observe que somente a Fábrica conhece as Pizzas concretas

if (tipo.equalsIgnoreCase("MARGUERITA")) { p = new PizzaMarguerita(); } else if (tipo.equalsIgnoreCase("PORTUGUESA")) { p = new PizzaPortuguesa(); }

Page 5: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

55Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla

ABSTRACT FACTORY

◊ Imagine a seguinte situação: Você tem duas pizzarias, uma no Juvevê e outra no Centro

Os cardápios diferem nas pizzas oferecidas e no modo de preparação. Por exemplo: No Juvevê, tem pizza Calabresa No centro, Portuguesa é assada por menos tempo e não

leva azeitonas.

O sistema de pedido de pizzas é centralizado, então estes diferentes cardápios e modos de preparação devem ser levados em conta.

Page 6: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

66

ABSTRACT FACTORY

◊ O simple factory resolve o problema apenas para uma pizzaria, se fossemos utilizá-lo nas duas pizzarias teriamos que fazer duas fábricas:

new FabricaJuveve new FabricaCentro E novas Pizzas, PortuguesaJuveve e PortuguesaCentro

◊ Mas ainda assim, não poderiamos criar pizzas com receitas diferentes para as duas pizzarias, dado que o método criarPizza das Fábricas está atrelado às mesmas pizzas.

Sistemas Distribuídos/UTFPR Prof. Cesr Augusto Tacla

Page 7: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

77Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla

ABSTRACT FACTORY

◊ Baixar o código Factory/ExemploFactory3 para ver com resolver os problemas com o padrão AbstractFactory

◊ Acrescentar uma nova Pizzaria que faz uma Pizza exclusiva de Presunto

◊ Rascunhar o diagrama de classes e comparar com o do SimpleFactory Observar o método criarPizza

Page 8: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

88Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla

ABSTRACT FACTORY: resumo

◊ Intenção Prover uma interface para criar famílias de objetos sem

especificar suas classes concretas

◊ Aplicação Quando o sistema deve ser independente de como os

produtos são criados, compostos e representados O sistema deve ser configurado para trabalhar com diversas

famílias de produtos

Vale a pena utilizá-lo mesmo quando há apenas uma fábrica concreta? Sim, por causa do desacoplamento entre a família de produtos e o seu uso

Page 9: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

99Sistemas Distribuídos/UTFPR Prof. Cesar Augusto Tacla

ABSTRACT FACTORY: resumo

◊ Participantes AbstractFactory (Pizzaria) declara uma interface para criar

produtos; os produtos são abstratos

ConcreteFactory (PizzariaCentro, PizzariaJuveve): implementa as operações para criar os produtos

AbstractProduct (Pizza): declara uma interface para os produtos

ConcreteProduct (Portuguesa, Marguerita): implementa a interface AbstractProduct e define produtos a serem criados pela fábrica concreta.

Page 10: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

1010

PADRÃO DAO

Page 11: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

1111

PADRÃO DAO

◊ DATA ACCESS OBJECT construir uma camada de acesso aos dados de forma a isolar a camada do modelo da camada de persistência. Baixo acoplamento.

◊ A idéia é poder mudar o mecanismo de persistência a qualquer momento sem ter que modificar a camada do modelo. Interessante para fazer nova distribuição de um sistema.

Dois clientes diferentes de um sistema podem querer utilizar BDs diferentes

◊ Outro benefício, é poder utilizar vários mecanismos de persistência (ex. LDAP, BD, XML, arquivos, sistemas legados) de forma organizada, i.e. sem “poluir” a camada do modelo

Page 12: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

1212

PADRÃO DAO

◊ DAO abstrai e encapsula o acesso as fontes de dados.

◊ DAO gerencia a conexão com a fonte e sabe como obter os dados.

◊ Por exemplo, encapsular conexões com o(s) BD(s) e os statements SQL

Page 13: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

1313

PARTICIPANTES DAO

◊ Uma classe DAO factory (fábrica simples)◊ Interface DAO (produto abstrato)◊ Classe que implementa a interface DAO

(produto concreto)◊ Data transfer objects (também chamados de

value objects)

Page 14: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

1414

EXEMPLO INICIAL

◊ DAO/ExemploDAO (no Repositório Java) A aplicação permite cadastrar e excluir registros da tabela

CLIENTE. Não há consistência dos campos.

A aplicação está preparada para gravar clientes no banco de dados JavaDB ou em arquivos texto (na verdade, esta última opção não está implementada).

Page 15: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

1515

DIAGRAMA DE CLASSES

Page 16: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

1616

EXEMPLO INICIAL

◊ DAO/ExemploDAO (no Repositório Java)◊ Para executar:

CRIAR BASE DE DADOS======================1. Clique na tab serviços2. Clique direita em JavaDB > inicializar3. Clique direita em JavaDB > criar BD

4. Nome do banco de dados: exemplodao_db Nome do usuario: APP Senha: APP Localização: deixar o local default

5. clicar direita na base recém criada > conectar

6. Para criar as tabelas, clicar direita na base recém criada > Executar comando...

7. Na tab Comando SQL i, copiar e colar o conteúdo do arquivo sqlcriacaotabela.txt

8. Clicar no ícone RODAR SQL

9. Para visualizar o conteúdo da tabela CLIENTE, clicar na BD para que mostre as TABELAS

10. Na tabela CLIENTE, clique direita > visualizar dados

Page 17: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla

1717

EXERCÍCIOS

1. Implementar as operações consultar e alterar na aplicação (sol. DAO/ExemploDAO-ConsAlt)

2. Implemente a operação inserir(Cliente) na classe TextDAO

3. Modifique a GUI de forma que ela mostre uma lista com os nomes dos clientes cadastrados numa lista rolante.