Classe Aluno e Disciplina, Validação JUnit, gravação no MySql

Documentos relacionados



O JUnit permite a realização de testes de unidades, conhecidos como "caixa branca", facilitando assim a correção de métodos e objetos.


Classe Produto e Calculo de Produto

Projeto webservicejax

public class Funcionario implements Comparable<Funcionario>{

Java - Conexão ao Banco de Dados usando JDBC

Classe Funcionario tem Endereco

DATA ACCESS OBJECT (DAO)

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

JAVA COM BANCO DE DADOS PROFESSORA DANIELA PIRES

Exercícios de fixação: Listas

De forma simples, para a execução de comandos SQL com JDBC, precisa-se da instancia de três classes Java. São elas: Nome da classe Função

Web Services. EclipseSDK/DB2 Construindo/Consumindo Serviços

Lista de Exercícios da disciplina Aplicações de Linguagem de Programação Orientada a objetos

Conexão do Banco de Dados localhost

Persistência de Classes em Tabelas de Banco de Dados

Funcionamento da Aplicação. Simulações do funcionamento. Simulação SAC

API JDBC. Paulo Ricardo Lisboa de Almeida. 1 Universidade Positivo

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Departamento de Computação Curso de Análise e Desenvolvimento de Sistemas Modelagem Conceitual de Dados


Código-Fonte da Prática 02

Banco de Dados. Banco de Dados. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

Agenda. Instalação e configuração. Processamento de comandos SQL com JDBC. Driver JDBC Criação da classe de conexão

Lista de exercícios I - RESPOSTAS Servlets e banco de dados

Linguagem de Programação II Implementação

POO Programação Orientada a Objetos

Como criar um banco de dados usando o mysql

Banco de Dados. Banco de Dados

ALGORITMOS. Professor: Diego Oliveira. Aula 06 - Tipos Primitivos de Dados

Tratamento de Exceções

SISTEMA EXPERIMENTALL 15/11/2009. Olá! A partir de agora vamos conhecer a IDE NetBeans efetuando um micro projeto swing.

Programação Orientada a Objetos JDBC Java Database Connectivity

Programação Orientada a Objectos - P. Prata, P. Fazendeiro


Faça Fácil Proficy Historian e SQL Linked Server

PERSISTÊNCIA EM JAVA. Introdução. Conexão a banco de dados através do driver JDBC UNIDADEE

Testes Unitários com JUnit

Unidade 12: Programação de Banco de Dados com Java Prof. Daniel Caetano

PROFICY HISTORIAN E SQL LINKED SERVER

Faça Fácil. Proficy Historian e SQL Linked Server

Programação Orientada a Objetos

Notas de Aula 09: Tratamento de exceções

show databases Programação Comercial Walderson Shimokawa 1

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

CONEXÃO JAVA - BANCO DE DADOS

Módulo 5. Programação Orientada a Objetos. Programação Orientada a Objetos I Java (Rone Ilídio)

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

PROJETO ECLIPSE: Estrutura do projeto: (Dynamic Web Project) LIBS: Java WebDeveloper. Prof. Edson Belém

JavaServer Faces JSF

if( opcao.equals("1") ) { ElaborarContratoUI uiec = new ElaborarContratoUI(m_empresa); uiec.run();

Exceções. Criando suas exceções

Drive MySql de conexão para Eclipse

############################## Grupo 1 OCAML #########################################################

Modulo 8 - Padrão DAO (Dta Access Object) Prof. Sheila Cáceres

Integrando Java com Banco de Dados

Controlando Erros com Exceções

Estrutura do Projeto - Trabalhando com Banco de Dados

Aula Prática JBCD - Introdução

Programação Orientada a Objetos II

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Java JDBC - I. Ex. 2: para o SQLServer da Microsoft, o driver JDBC pode ser obtido em

Banco de dados POO Márcio Delamaro. Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP

JDBC - Java Data Base Connectivity

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Programação de Computadores II TCC /Turma A 1

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 9- Introdução ao JDBC

Aula 08 Encapsulamento. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Linguagem de Programação II Implementação

Conexão com Banco de Dados

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

Programação Orientada a Objetos

Análise e Projeto Orientados a Objetos

Implementar um exemplo de relacionamento entre classes um para muitos (1:N) e um para um (1:1). Sistema para uma Promotora de Evento Agenda Anual

PCS Laboratório de Engenharia de Software I Tutorial de Modelagem de Dados no RSA v9.5 (por Michelet dal Carpio Chávez)

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

HABILITANDO A IDE DO ECLIPSE

Linguagem Java - Introdução

Mecanismo de Persistência

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

Persistência de Objetos no SGBD PostgreSQL, Utilizando as APIs: JDBC, JDK, Swing e Design Patteners DAO.

Driver Mysql para Banco de Dados. Conexão com um Banco de Dados

Criar uma aplicação JPA2 com EclipseLink e H2

JUnit. Alexandre Menezes Silva Eduardo Manuel de Freitas Jorge

Introdução ao Hibernate. Hibernate Mapeamento com Anotação. Projeto Desktop Uma Classe. Objetivo. Programas Utilizados

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Exceções. Profa. Patrícia A. Jaques Slides alterados por Leandro Tonietto Mar-12. quarta-feira, 21 de março de 12

Módulo 5 - JDBC java.sql - Conexão com Banco de Dados

JDBC JDBC. JDBC - Arquitetura. JDBC Arquitetura Pacote Java.sql. Java Database Connectivity JDBC PostgreSQL

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Programação Estruturada e Orientada a Objetos

Tratamento de Exceções. Julio Cesar Nardi

Tratamento de Exceções. Grupo de Linguagens de Programação Departamento de Informática PUC-Rio

Java na WEB Banco de Dados

Programação Java. Tratamento de Exceções

Transcrição:

Classe Aluno e Disciplina, Validação JUnit, gravação no MySql Criar um projeto -> Criar um pacote chamado entity. Criar uma classe Aluno contendo os atributos (idaluno, nome, email, listadisciplina, cr, ativo), o relacionamento do Aluno com a classe Disciplina, o contrutor vazio, construtor cheio (sem os atributos: cr e ativo, pois serão calculados), construtor cheio(sem cr, ativo e relacionamento com a classe Disciplina), tostring, e getters e setters. package entity; import java.util.list; public class Aluno { private Integer idaluno; private String nome; private String email; private Double cr = 0.; private Boolean ativo; private List<Disciplina> listadisciplina; public Aluno() { public Aluno(Integer idaluno, String nome, String email) { super(); this.idaluno = idaluno; this.nome = nome; this.email = email; public Aluno(Integer idaluno, String nome, String email, List<Disciplina> listadisciplina) { super(); this.idaluno = idaluno; this.nome = nome; 1

this.email = email; this.listadisciplina = listadisciplina; @Override public String tostring() { return "Aluno [idaluno=" + idaluno + ", nome=" + nome + ", email=" + email + ", listadisciplina=" + listadisciplina + ", cr=" + cr + "]"; public Integer getidaluno() { return idaluno; public void setidaluno(integer idaluno) { this.idaluno = idaluno; public String getnome() { return nome; public void setnome(string nome) { this.nome = nome; public String getemail() { return email; public void setemail(string email) { this.email = email; public List<Disciplina> getlistadisciplina() { return listadisciplina; public void setlistadisciplina(list<disciplina> listadisciplina) { this.listadisciplina = listadisciplina; public Double getcr() { return cr; public void setcr(double cr) { this.cr = cr; public Boolean getativo() { return ativo; public void setativo(boolean ativo) { 2

this.ativo = ativo; Criar a classe de Disciplina com os atributos (código, disciplina, nota1, nota2, media, situacao) que se relacionará com a classe Aluno, colocar o relacionamento com o Aluno, construtor vazio, construtor cheio (sem os satributos a serem calculados), construtor cheio (sem os satributos a serem calculados e sem o relacionamento com a classe Aluno), tostring e getters e setters. package entity; public class Disciplina { private Integer codigo; private String disciplina; private Double nota1; private Double nota2; private transient Double media = 0.; private String situacao = ""; private Aluno aluno; public Disciplina() { public Disciplina(Integer codigo, String disciplina, Double nota1, Double nota2, Aluno aluno) { super(); this.codigo = codigo; this.disciplina = disciplina; this.nota1 = nota1; this.nota2 = nota2; this.aluno = aluno; public Disciplina(Integer codigo, String disciplina, Double nota1, Double nota2) { super(); this.codigo = codigo; 3

this.disciplina = disciplina; this.nota1 = nota1; this.nota2 = nota2; @Override public String tostring() { return "Disciplina [codigo=" + codigo + ", disciplina=" + disciplina + ", nota1=" + nota1 + ", nota2=" + nota2 + ", media=" + media + ", situacao=" + situacao + "]"; public Integer getcodigo() { return codigo; public void setcodigo(integer codigo) { this.codigo = codigo; public String getdisciplina() { return disciplina; public void setdisciplina(string disciplina) { this.disciplina = disciplina; public Double getnota1() { return nota1; public void setnota1(double nota1) { this.nota1 = nota1; public Double getnota2() { return nota2; public void setnota2(double nota2) { this.nota2 = nota2; public Double getmedia() { return media; public void setmedia(double media) { this.media = media; public String getsituacao() { return situacao; public void setsituacao(string situacao) { 4

this.situacao = situacao; public Aluno getaluno() { return aluno; public void setaluno(aluno aluno) { this.aluno = aluno; Criar um pacote chamado control e criar uma classe ValidaAluno dentro desse pacote para a validação dos dados de Aluno. Serão criado métodos booleanos para validação campo a campo de cada atributo. package control; import java.util.regex.matcher; import java.util.regex.pattern; import entity.aluno; public class ValidaAluno { No método Booleano validacodigo passamos o parâmetro do Aluno e o objeto a, onde iremos verificar se o Id do Aluno é válido, passamos também o throws que se houver algum erro, o programa lançará uma exceção, um tipo de erro. Se o Id for menor ou igual a 0 (zero) gera um erro de exceção e imprime uma mensagem referente a esse erro, se não, se for válido, retorna verdadeiro. public Boolean validacodigo(aluno a) throws Exception { if (a.getidaluno() <= 0) { throw new IllegalArgumentException( "Codigo Invalido...Nao pode ser Nulo ou Negativo"); return true; 5

No método Booleano validanome passamos o parâmetro do Aluno a, onde iremos verificar se o nome é válido. Se o nome for nulo, gera um erro de exceção e uma mensagem, se o nome tiver tamanho igual a 0 (zero), ou seja vazio, também gera um erro e imprime mensagem. Se passar por essas validações passamos as regras. Chamamos a classe Pattern, responsável pelos padrões de regra e criamos um objeto. Através de Pattern chamamos o método compile e passamos a regra, o padrão a ser seguido. Na classe Matcher que pesquisará a regra também criamos um objeto e relacionamos esse o objeto da Pattern com a Matcher (padrão com pesquisa) e passamos que o parâmetro é o nome do Aluno. Se a pesquisa for diferente da regra gera um erro e uma mensagem, se não, dá true, o nome está dentro da regra. public Boolean validanome(aluno a) { if (a.getnome() == null){ throw new IllegalArgumentException("Nome nao pode ser NULL..."); if (a.getnome().length() == 0){ throw new IllegalArgumentException("Nome nao pode ser vazio..."); Pattern p = Pattern.compile("[A-Z a-z]{2,35"); Matcher m = p.matcher(a.getnome()); if (!m.matches()) { throw new IllegalArgumentException("Nome Invalido..."); return true; Para o método validaemail, chamaremos a classe Pattern, depois a classe Matcher. Se a pesquisa der diferente gera um erro e uma mensagem. Se não, retorna verdadeiro. public Boolean validaemail(aluno a) { Pattern p = Pattern.compile(".+@.+\\.[a-z]+"); Matcher m = p.matcher(a.getemail()); if (!m.matches()) { throw new IllegalArgumentException("Email Invalido..."); 6

return true; Para o método validacr, se o cr for menor que 0 (zero) ou maior que 10, gera um erro e imprime a mensagem, se não retorna verdadeiro. public Boolean validacr(aluno a) { if (a.getcr() < 0 a.getcr() > 10) { throw new IllegalArgumentException("Cr Invalido..."); return true; Para o método validaativo, se o aluno for diferente de ativo gera o erro com mensagem, se não, ele é ativo, verdadeiro. public Boolean validaativo(aluno a) { if (!a.getativo()) { throw new IllegalArgumentException("Aluno Inativo..."); return true; No main, iremos fazer os testes de validação dentro do bloco try e catch. Criamos um Aluno com seus dados. Passamos se ele está ativo e o valor do cr dele. Chamamos a classe de validação, ValidaAluno, criamos seu objeto e damos espaço de memória. Chamamos cada método para ser verificado. Imprimimos uma mensagem se tudo estiver correto e concatenamos com o tostring de Aluno. Se der errado, vai para o catch e imprime o erro. public static void main(string[] args) { try { Aluno a = new Aluno(10, "jose", "jose@gmail.com"); a.setativo(true); a.setcr(3.); ValidaAluno va = new ValidaAluno(); 7

va.validacodigo(a); va.validaemail(a); va.validanome(a); va.validaativo(a); va.validacr(a); System.out.println("Aluno Valido..." + a); catch (Exception ex) { System.out.println(ex.getMessage()); Criar uma classe Main para relacionar a classe Aluno com a classe Disciplina. O Aluno terá uma lista de disciplinas. Criar o método main para executar o teste. Criar um objeto aluno com seus dados(idaluno, nome, email). Relacionar o objeto de Aluno com setlistadisiciplina passando o ArrayList de Disicplina, que é o espaço para trabalharmos com essa lista. Chamar o objeto a de aluno e passar quais disciplina esse aluno possui através do método add, dar espaço para Disciplina e passar os dados dessa Disciplina(codigo, disciplina, nota1, nota2). 8

package entity; import java.util.arraylist; public class Main { public static void main(string[] args) { Aluno a = new Aluno(100, "pedro", "pedro@gmail.com"); a.setlistadisciplina(new ArrayList<Disciplina>()); a.getlistadisciplina().add(new Disciplina(10, "java", 3., 4.5)); a.getlistadisciplina().add(new Disciplina(11, "oracle",1., 2.)); Criar um for para calcular a media e a situação de quantas disciplinas o aluno tiver em sua lista. Dentro do for passar a classe Disciplina, criar um objeto para Disciplina e passar a lista que o aluno possui. O objeto de Disciplina passa o objeto de Aluno como parâmetro, depois chama setmedia onde passa a fórmula de cálculo da média e por último chama a situação passando a condição de aprovação ou reprovação. Por fim, imprime o objeto aluno com suas disciplinas já calculadas. for (Disciplina x : a.getlistadisciplina()) { x.setaluno(a); x.setmedia((x.getnota1() + x.getnota2()) / 2); x.setsituacao((x.getmedia() >= 6)? "aprovado" : "reprovado"); System.out.println(a); Resultado no console... Aluno [idaluno=100, nome=pedro, email=pedro@gmail.com, listadisciplina=[disciplina [codigo=10, disciplina=java, nota1=3.0, nota2=4.5, media=3.75, situacao=reprovado], Disciplina [codigo=11, disciplina=oracle, nota1=1.0, nota2=2.0, media=1.5, situacao=reprovado]], cr=0.0] 9

Criar um pacote chamado test e criar uma classe chamada TestAluno. Para habilitar o teste utilizando o JUnit, clicar com o botão direito no projeto, clicar na aba Libraries e depois Add Library. 10

Próximo passo: Clicar em Junit e depois Next. Finish. 11

package test; import junit.framework.assert; import org.junit.before; import org.junit.test; import control.validaaluno; import entity.aluno; public class TestAluno { Criar o atributo da classe aluno e passar o objeto aluno. No método init será instanciando o objeto de aluno e seu espaço de memória. A anotação @Before indica que esse método será rodado primeiro que os outros métodos. private Aluno aluno; @Before public void init(){ aluno = new Aluno(); 12

Criaremos um método de teste para impor as regras de nome. Pela anotação @Test indicamos que esse método é um teste que será executado depois do método com a anotação @Before. @Test public void testquantidadelimitenome(){ aluno.setnome("aa"); Assert.assertTrue("Nome fora da faixa de 2 a 35", new ValidaAluno().validaNome(aluno)); Criaremos um outro método de teste para impor outras regras de nome. @Test public void testconteudonome(){ aluno.setnome(""); Assert.assertTrue("Nome não pode ter caracter especial", new ValidaAluno().validaNome(aluno)); Para testar a classe, clicar com o botão direito na classe, ir para Run as, depois JUnit Test. 13

Nesse teste, o exemplo usado não passou, deu resultado vermelho, isto é, foi pego no teste de verificação. No método testconteidonome estava vazio o campo nome. 14

Se modificarmos a classe teremos um novo resultado. package test; import junit.framework.assert; import org.junit.before; import org.junit.test; import control.validaaluno; import entity.aluno; public class TestAluno { private Aluno aluno; @Before public void init(){ aluno=new Aluno(); @Test public void testquantidadelimitenome(){ aluno.setnome("luciana"); Assert.assertTrue("Nome fora da faixa de 2 a 35", new ValidaAluno().validaNome(aluno)); @Test public void testconteudonome(){ aluno.setnome("luciana"); Assert.assertTrue("Nome não pode ter caracter especial", new ValidaAluno().validaNome(aluno)); 15

Os nomes passados estão dentro das regras, então o resultado do teste ficou verde. Criando o banco de dados: Para criar o script do banco de dados, criar um pacote chamado persistence. Depois clicar no pacote, new e Other. 16

Depois SQL Development, SQL File e Next. 17

Em File name, colocar o nome do script e clicar em Next. Depois de criado o arquivo com o SQL do banco. Digitar os comando para criação do banco. Comandos: drop database if exists aula1; create database aula1; show databases; use aula1; show tables; Explicação: Apagar o banco se já existir com o nome de aula1. Criar um banco com o nome de aula1. Mostrar os bancos existentes na sua máquina. Usar o banco aula1. Mostrar as tabelas desse banco. 18

Copiar esses comandos para a janela do MySql. Criar no pacote persistence a classe Dao. Classe responsável pela conexão com o banco de dados. Todas as importações virão do pacote java.sql.* package persistence; import java.sql.callablestatement; import java.sql.connection; import java.sql.drivermanager; import java.sql.preparedstatement; import java.sql.resultset; public class Dao { Chamamos as classes de manipulação do banco onde Connection é responsável pela conexão com o banco, PreparedStatement responsável pelo acesso (gravar, alterar, excluir ou consultar) a tabela do banco, resultset pelas consultas com o comando select e CallableStatement pelas procedures. Connection con; PreparedStatement stmt; ResultSet rs; 19

CallableStatement call; Criamos um método para abertura do banco e conexão. Chamamos a classe Class e o método forname e passamos o diretório onde está o driver de conexão com o MySql. Pelo objeto con, chamamos a classe de gerenciamento dessa conexão e passamos o método de conexão getconnection com os parâmetros de conexão ao banco, usuário e senha. public void open() throws Exception{ Class.forName("com.mysql.jdbc.Driver"); con = DriverManager. getconnection("jdbc:mysql://localhost:3306/aula1","root","coti") ; Criamos um método para fecha a conexão com o banco. Passamos o objeto con e o método close. public void close() throws Exception{ con.close(); Criar um pacote chamado manager e uma classe ManagerBean para gerenciar a lista de disciplinas que a classe Aluno possui. Passar a classe Aluno como atributo e criar o objeto dele. package manager; import java.util.arraylist; import entity.aluno; import entity.disciplina; public class ManagerBean { 20

private Aluno aluno; Criar um construtor passando a classe Aluno como parâmetro e o objeto. Com a palavra reservada this, que faz referencia a própria classe e nesse caso, ao atributo aluno e passamos o objeto. Depois passaremos a lista de disciplinas para esse aluno. public ManagerBean(Aluno a) { this.aluno = a; this.aluno.setlistadisciplina(new ArrayList<Disciplina>()); public Aluno getaluno() { return aluno; Criar um método para adicionar as disciplinas, passar a classe Disciplina como parâmetro e o objeto. No corpo do método, charamr o objeto de aluno e relacionar com as disciplinas, já adicionando. public void add(disciplina d) { aluno.getlistadisciplina().add(d); No método main, chamamos a classe e depois um objeto e então damos espaço para trabalhar passando a criação de um novo aluno com seus dados. Passamos o objeto e em seguida o método add, adicionando as disciplina para o aluno. Pedimos para imprimir através do objeto e o getaluno. public static void main(string[] args) { ManagerBean mb = new ManagerBean(new Aluno(10, "stuart", "stuart@gmail.com")); mb.add(new Disciplina(10, "java", 1.2, 2.1)); mb.add(new Disciplina(11, "OCJA", 2.2, 2.4)); System.out.println(mb.getAluno()); 21

No console... Aluno [idaluno=10, nome=stuart, email=stuart@gmail.com, listadisciplina=[disciplina [codigo=10, disciplina=java, nota1=1.2, nota2=2.1, media=0.0, situacao=], Disciplina [codigo=11, disciplina=ocja, nota1=2.2, nota2=2.4, media=0.0, situacao=]], cr=0.0] 22