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

Programação Orientada a Objetos - Pós Graduação - Aula 2

  • 1.
    Programação Orientada aObjetos 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 EduardoDantas – 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 EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Criar Aplicação Java • Com o NetBeans, siga os passos até finalizar:
  • 5.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Criar Pacotes • Crie todos os pacotes mencionados na figura
  • 6.
    Prof Carlos EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Criar form JFrame
  • 8.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Adicionar Painéis e Tabela
  • 9.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Adicionar Botões
  • 10.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Adicionando Campos
  • 11.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Renomeando Campos
  • 12.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Editando propriedades do JFrame
  • 13.
    Prof Carlos EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Criando o Banco de Dados • Com a camada view pronta, será criado o banco de dados.
  • 15.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Criando a Unidade de Persistência
  • 16.
    Prof Carlos EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Criando a classe de domínio
  • 18.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Criando a classe de domínio
  • 19.
    Prof Carlos EduardoDantas – 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 EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Criando uma classe de Conexão
  • 22.
    Prof Carlos EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Criando a classe ClienteDaoImpl
  • 24.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Criando a classe ClienteDaoImpl
  • 25.
    Prof Carlos EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Adicionando bibliotecas do JavaDB e Beans Binding
  • 27.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Criando a classe ClienteControl
  • 28.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Criando a classe ClienteControl
  • 29.
    Prof Carlos EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Vinculando a classe view com control
  • 31.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Vinculando os campos com BeansBinding
  • 32.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Vinculando a tabela com BeansBinding
  • 33.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Editando conteúdo da tabela
  • 34.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Criando eventos para os botões
  • 35.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Criando eventos para os botões
  • 36.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Executar a aplicação • Ao executar a aplicação observa-se o erro abaixo:
  • 37.
    Prof Carlos EduardoDantas – 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 EduardoDantas – 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 EduardoDantas – carloseduardodantas@iftm.edu.br Executar a aplicação
  • 40.
    Prof Carlos EduardoDantas – carloseduardodantas@iftm.edu.br Implementar validação dos campos • Crie uma classe chamada ValidacaoException no pacote util
  • 41.
    Prof Carlos EduardoDantas – 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 EduardoDantas – 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 EduardoDantas – 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 EduardoDantas – 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 EduardoDantas – 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 EduardoDantas – 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”.