curso de especializaÇÃo em tecnologia java design patterns parte 4: padrÕes factory e dao prof....
TRANSCRIPT
![Page 1: CURSO DE ESPECIALIZAÇÃO EM TECNOLOGIA JAVA DESIGN PATTERNS PARTE 4: PADRÕES FACTORY E DAO Prof. Cesar Augusto Tacla tacla](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.net/reader036/viewer/2022062404/552fc12a497959413d8cee58/html5/thumbnails/17.jpg)
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.