SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
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
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.
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criar Aplicação Java
• Com o NetBeans, siga os passos até finalizar:
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criar Pacotes
• Crie todos os pacotes mencionados na figura
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).
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criar form JFrame
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Adicionar Painéis e Tabela
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Adicionar Botões
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Adicionando Campos
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Renomeando Campos
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Editando propriedades do
JFrame
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando o Banco de Dados
• Com a camada view pronta, será criado o
banco de dados.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a Unidade de
Persistência
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
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe de domínio
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe de domínio
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
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando uma classe de
Conexão
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteDaoImpl
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteDaoImpl
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Adicionando bibliotecas do
JavaDB e Beans Binding
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteControl
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando a classe
ClienteControl
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Vinculando a classe view
com control
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Vinculando os campos com
BeansBinding
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Vinculando a tabela com
BeansBinding
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Editando conteúdo da tabela
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando eventos para os
botões
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Criando eventos para os
botões
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Executar a aplicação
• Ao executar a aplicação observa-se o erro
abaixo:
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
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
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Executar a aplicação
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Implementar validação dos
campos
• Crie uma classe chamada ValidacaoException no
pacote util
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()
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()
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.
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.
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.
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”.

Mais conteúdo relacionado

Destaque

Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaCarlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Carlos Eduardo
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgetsRenzo Petri
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Bianca Dantas
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalBianca Dantas
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseRegis Magalhães
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing ListenersDaniel Arndt Alves
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_javasamuelthiago
 

Destaque (20)

Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1
 
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4
 
Java Lista Exercicios 04
Java Lista Exercicios 04Java Lista Exercicios 04
Java Lista Exercicios 04
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2
 
Lista Exercicios C2
Lista Exercicios C2Lista Exercicios C2
Lista Exercicios C2
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgets
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222
 
Java 07 Entrada Dados
Java 07 Entrada DadosJava 07 Entrada Dados
Java 07 Entrada Dados
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Java Lista Exercicios 06
Java Lista Exercicios 06Java Lista Exercicios 06
Java Lista Exercicios 06
 
JTableView - Swing
JTableView - SwingJTableView - Swing
JTableView - Swing
 
Lista Exercicios C
Lista Exercicios CLista Exercicios C
Lista Exercicios C
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 
Merci 10 Completo
Merci 10 CompletoMerci 10 Completo
Merci 10 Completo
 
Exercicios - Java Swing Listeners
Exercicios - Java Swing ListenersExercicios - Java Swing Listeners
Exercicios - Java Swing Listeners
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 

Semelhante a Construindo Sistema MVC com POO

Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...HELENO FAVACHO
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Rafael Sales Pavarina
 
CURSOS DA ÁREA DE TI - Utilizando o banco de dados MySQL, crie um script cont...
CURSOS DA ÁREA DE TI - Utilizando o banco de dados MySQL, crie um script cont...CURSOS DA ÁREA DE TI - Utilizando o banco de dados MySQL, crie um script cont...
CURSOS DA ÁREA DE TI - Utilizando o banco de dados MySQL, crie um script cont...HELENO FAVACHO
 
Introdução ao framework CodeIgniter
Introdução ao framework CodeIgniterIntrodução ao framework CodeIgniter
Introdução ao framework CodeIgniterAnderson Gonçalves
 
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfProjeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfHELENO FAVACHO
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaCleber Dantas
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDDPHP Day Curitiba
 
plano_de_projeto_controlart_rascunho
plano_de_projeto_controlart_rascunhoplano_de_projeto_controlart_rascunho
plano_de_projeto_controlart_rascunhouserrx
 
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreGlobal tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreHELENO FAVACHO
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseOziel Moreira Neto
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHPRangel Javier
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Global tecnol s.a – tecnologias ads - backend - web - mobile - devops
Global tecnol s.a – tecnologias   ads - backend - web - mobile - devopsGlobal tecnol s.a – tecnologias   ads - backend - web - mobile - devops
Global tecnol s.a – tecnologias ads - backend - web - mobile - devopsHELENO FAVACHO
 

Semelhante a Construindo Sistema MVC com POO (20)

Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Mini curso de c#.net
Mini curso de c#.netMini curso de c#.net
Mini curso de c#.net
 
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...PROJETO INTEGRADO - CURSOS DA ÁREA DE TI -  Uma das tecnologias mais populare...
PROJETO INTEGRADO - CURSOS DA ÁREA DE TI - Uma das tecnologias mais populare...
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018
 
Aula1
Aula1Aula1
Aula1
 
CURSOS DA ÁREA DE TI - Utilizando o banco de dados MySQL, crie um script cont...
CURSOS DA ÁREA DE TI - Utilizando o banco de dados MySQL, crie um script cont...CURSOS DA ÁREA DE TI - Utilizando o banco de dados MySQL, crie um script cont...
CURSOS DA ÁREA DE TI - Utilizando o banco de dados MySQL, crie um script cont...
 
Introdução ao framework CodeIgniter
Introdução ao framework CodeIgniterIntrodução ao framework CodeIgniter
Introdução ao framework CodeIgniter
 
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdfProjeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
Projeto Integrado Áreas de TI - iniciar uma jornada empreendedora - 2.pdf
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
plano_de_projeto_controlart_rascunho
plano_de_projeto_controlart_rascunhoplano_de_projeto_controlart_rascunho
plano_de_projeto_controlart_rascunho
 
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreGlobal tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
 
Curso HTML 5 - Aula Inicial
Curso HTML 5 - Aula InicialCurso HTML 5 - Aula Inicial
Curso HTML 5 - Aula Inicial
 
portfolio unopar
portfolio unoparportfolio unopar
portfolio unopar
 
Boa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java EnterpriseBoa Práticas no Desenvolvimento Java Enterprise
Boa Práticas no Desenvolvimento Java Enterprise
 
Jj08 otimizacao
Jj08 otimizacaoJj08 otimizacao
Jj08 otimizacao
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Global tecnol s.a – tecnologias ads - backend - web - mobile - devops
Global tecnol s.a – tecnologias   ads - backend - web - mobile - devopsGlobal tecnol s.a – tecnologias   ads - backend - web - mobile - devops
Global tecnol s.a – tecnologias ads - backend - web - mobile - devops
 

Mais de Carlos Eduardo

When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadCarlos Eduardo
 
Experimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareExperimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareCarlos Eduardo
 
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...Carlos Eduardo
 
Socket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKSocket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKCarlos Eduardo
 
Máquinas de turing com memória limitada
Máquinas de turing com memória limitadaMáquinas de turing com memória limitada
Máquinas de turing com memória limitadaCarlos Eduardo
 
Detecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationDetecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationCarlos Eduardo
 
Recommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsRecommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsCarlos Eduardo
 

Mais de Carlos Eduardo (8)

When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell Bad
 
Experimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareExperimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de Software
 
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
 
Socket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKSocket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDK
 
Máquinas de turing com memória limitada
Máquinas de turing com memória limitadaMáquinas de turing com memória limitada
Máquinas de turing com memória limitada
 
Detecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationDetecting bad smells in source code using change history information
Detecting bad smells in source code using change history information
 
Recommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsRecommending refactoring operations in large software systems
Recommending refactoring operations in large software systems
 
NoSql
NoSqlNoSql
NoSql
 

Construindo Sistema MVC com POO

  • 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”.