O documento descreve as etapas para construir um sistema MVC (Model View Controller) utilizando programação orientada a objetos em Java. Inicialmente, é criada a interface gráfica do usuário e em seguida são implementadas as classes de domínio, DAO e controlador para realizar o mapeamento objeto-relacional com Hibernate e permitir a comunicação entre a camada de visão e modelo. Por fim, são implementadas validações dos campos e removida a geração automática de tabelas no banco de dados.
1. Programação Orientada a Objetos
Construindo um
Sistema MVC com
POO
Pós Graduação em Análise e Desenvolvimento de Sistemas
Aplicados à Gestão Empresarial
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
TRIÂNGULO MINEIRO – Campus Uberlândia Centro
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
2. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Introdução
• Objetivo de nivelar os alunos, para todos
entenderem como os objetos se colaboram
para criar um Software Comercial;
• Criar Softwares usando o paradigma RAD
(datasets, events) é consideravelmente
diferente de projetar soluções com o
padrão MVC.
3. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
MVC
• Padrão arquitetural MVC (Model View
Control);
• Divisão das aplicações em três camadas
lógicas.
4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criar Aplicação Java
• Com o NetBeans, siga os passos até finalizar:
5. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criar Pacotes
• Crie todos os pacotes mencionados na figura
6. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Definições
• DAO – Data Access Object – padrão que isola
todo o acesso a dados em uma única camada,
fornecendo interfaces e objetos como meios de
transição;
• DOMAIN – classes de domínio que representam
entidades a serem persistidas em disco
(provavelmente banco de dados).
7. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criar form JFrame
8. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Adicionar Painéis e Tabela
9. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Adicionar Botões
10. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Adicionando Campos
11. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Renomeando Campos
12. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Editando propriedades do
JFrame
13. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Teste
• Ao apertar F6, o NetBeans irá perguntar
qual é a classe principal, e uma tela se
abrirá;
• Em poucos minutos, é possível fazer um
protótipo completo para o Cliente testar.
14. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando o Banco de Dados
• Com a camada view pronta, será criado o
banco de dados.
15. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a Unidade de
Persistência
16. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a Unidade de
Persistência
• Foram adicionados no projeto o arquivo
persistence.xml e as bibliotecas do
Hibernate/Jpa, para efetuar o
Mapeamento Objeto Relacional de forma
transparente
17. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe de domínio
18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe de domínio
19. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe de domínio
• Entity – Classe que representa uma
entidade no Banco de Dados;
• Table – nome da tabela no banco;
• Id – Campo que é chave primária;
• GeneratedValue – mostrar que é um
campo auto incremento
• Column – nome da coluna no banco de
dados
20. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe de domínio
• A classe de domínio faz referência com
uma tabela do banco de dados;
• Obviamente esta também pode ter lógica
de negócio embutida;
• Tabelas podem ser geradas
automaticamente pelo Hibernate.
21. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando uma classe de
Conexão
22. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando uma classe de
Conexão
• Esta classe cria uma fábrica de sessões
com o Hibernate, e a cada chamada do
método, retornará uma sessão.
23. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteDaoImpl
24. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteDaoImpl
25. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando uma classe de
ClienteDaoImpl
• Observa-se na classe ClienteDaoImpl que
o Hibernate abstrai todos os scripts sql
com o banco de dados;
• No método salvarAtualizar(), se o código
do cliente for null, será feito um insert,
caso contrário será feito um update;
• No método pesquisar(), é realizada uma
consulta via HQL, que o Hibernate
traduzirá os objetos para tabelas.
26. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Adicionando bibliotecas do
JavaDB e Beans Binding
27. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteControl
28. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteControl
29. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteControl
• O control possui os objetos clienteDigitado,
clienteSelecionado e clientesTabela que
mapeiam campos da tela;
• O framework Beans Binding faz com que o
preenchimento dos campos com a tela seja
automático;
• O control também executa efetivamente os
eventos que serão disparados na classe
ClienteView.
30. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Vinculando a classe view
com control
31. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Vinculando os campos com
BeansBinding
32. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Vinculando a tabela com
BeansBinding
33. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Editando conteúdo da tabela
34. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando eventos para os
botões
35. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando eventos para os
botões
36. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Executar a aplicação
• Ao executar a aplicação observa-se o erro
abaixo:
37. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Executar a aplicação
• Infelizmente, a versão 8.02 no NetBeans
não adicionou uma dependência do
Hibernate
38. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Executar a aplicação
• Copie o arquivo jandex-1.1.0.final.jar para
a pasta lib do projeto
39. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Executar a aplicação
40. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Implementar validação dos
campos
• Crie uma classe chamada ValidacaoException no
pacote util
41. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Implementar validação dos
campos
• Na classe Cliente, crie o método validar() e na
classe ClienteControl, altere o método salvar()
42. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Implementar validação dos
campos
• Na classe Cliente, crie o método validar() e na
classe ClienteControl, altere o método salvar()
43. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Implementar validação dos
campos
• Em clienteView(), capture a exceção para
mostrar o erro de validação na tela.
44. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Retirar a criação de tabelas
• No arquivo persistence.xml, desmarque a opção
de criação de tabelas, para que o sistema não
destrua e construa as tabelas novamente.
45. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Conclusões
• Várias melhorias poderiam ser
implementadas para a aplicação desktop,
como: internacionalização, controle dos
botões e campos, layout personalizado,
menus, etc... Contudo o foco desta aula é
apenas entender como os objetos se
cooperam como peças de lego, para chegar
em um sistema completo.
46. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Referências
• ANICHE, Maurício. Orientação a objetos e
SOLID para Ninjas. Casa do Código, 2015;
• GUERRA, Eduardo. Design Patterns com Java.
Casa do Código, 2014;
• “LARMAN, Craig – Utilizando UML e Padrões
3ª Edição. Bookman, 2007”.