Upload
internet
View
107
Download
0
Embed Size (px)
Citation preview
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
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
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.
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(); }
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.
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
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
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
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.
1010
PADRÃO DAO
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
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
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)
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).
1515
DIAGRAMA DE CLASSES
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
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.