Carcleo 4 Denunciar post Postado Junho 11, 2015 Bom, estou tentando fazer um coisa parecida com um fórum.É claro que ainda estou no B'a'B'á'. Então, por favor, não reparem na simplicidade. Criei a classe Pessoa, essa Pessoa terá seus atributos e métodos conforme abaixo. Mas preciso saber o que acontece com uma pessoa que, após ser cadastrada, não quiser fazer uma pergunta de imediato? package imwsaogotardo.com.br.ebd.pessoas; public class Pessoa { private String nome; private int nascimentoDia; private int nascimentoMes; private int nascimentoAno; private String senha; private Date dataCadastro; Pessoa(String _nome, int _nascimentoDia, int _nascimentoMes, String _senha, int _nascimentoAno) { this.nome = _nome; this.nascimentoDia = _nascimentoDia; this.nascimentoMes = _nascimentoMes; this.nascimentoAno = _nascimentoAno; this.senha = _senha; this.dataCadastro = new Date(); } public String getNome() { return this.nome; } public String getDataNascimento() { return this.nascimentoDia + "/" + this.nascimentoMes + "/" + this.nascimentoAno; } public String getDataCadastro() { return this.dataCadastro; } public String getSenha() { return this.senha; } public void perguntar(Sala _sala, Pessoa _pessoa) { } public void comentar(Pergunta _pergunta, Pessoa _pessoa) { } } Também criei 2 classes, Professor e Usuario, que extendem de Pessoa Professor package imwsaogotardo.com.br.ebd.pessoas; public class Professor extends Pessoa { private Sala sala; Professor (String _nome, int _nascimentoDia, int _nascimentoMes, int _nascimentoAno, Sala _sala) { Super (_nome, _nascimentoDia, _nascimentoMes, _nascimentoAno); this.sala = _sala; } public void responder(Pergunta _pergunta) { } } Usuario package imwsaogotardo.com.br.ebd.pessoas; public class Usuario extends Pessoa { private String email; Usuario (String _nome, int _nascimentoDia, int _nascimentoMes, int _nascimentoAno, String _email) { Super (_nome, _nascimentoDia, _nascimentoMes, _nascimentoAno); this.email = _email; } } Criei também uma classe Pergunta package imwsaogotardo.com.br.ebd.perguntas; public class Pergunta { private Pessoa pessoa; private String titulo; private String texto; private Date dataCadastro; Pergunta(String _titulo, String _texto, Pessoa pessoa) { this.pessoa = _pessoa this.titulo = _titulo; this.texto = _texto; this.dataCadastro = new Date(); } } E uma classe Retorno package imwsaogotardo.com.br.ebd.retornos; public class Retorno { private String retorno; private Date dataCadastro; Retorno (Pergunta _pergunta, String _retorno) { this.retorno = _retorno; this.dataCadastro = new Date(); } } E uma classe Resposta que extende de Retorno package imwsaogotardo.com.br.ebd.retornos; public class Resposta extends Retorno { private Professor professor; private Pergunta pergunta; Resposta (String _retorno, Professor _professor, Pergunta _pergunta) { super(_pergunta, _retorno) ; this.professor = _professor; this.pergunta = _pergunta; } } Uma classe Comentario que extende Retorno package imwsaogotardo.com.br.ebd.retornos; public class Resposta extends Retorno { private Usuario usuario; private Resposta resposta; Resposta (String _retorno, Usuario _usuario, Resposta _resposta) { super( _retorno) ; this.usuario = _usuario; this.resposta = _resposta; } } Isso é tudo que fiz!Para onde vou agora? Outra coisa, meus arquivos estão todos como .java. Precisa ser .jsp ou .java? Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Junho 11, 2015 O que você tem basicamente são um modelo de classes, acredito que estejam relacionadas com o modelo de dados. Para persistir e recuperar os dados você precisa das classes de persistência, criando suas classes DAO. Aqui um bom exemplo: http://javafree.uol.com.br/artigo/874102/Acessando-dados-com-Java-1%C2%BA-parte-Simples-Dao.html Seus arquivos DAO e objetos de negócio sempre serão .java. Agora para Web é recomendado usar MVC (Model View Controller), isto fará com que você compreenda melhor alguns conceitos e também a implementar uma aplicação mais próxima de como seria feito usando Frameworks. Veja aqui: http://www.caelum.com.br/apostila-java-web/ Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 11, 2015 Sim, mas me dá uma luz! Tenho umas dúvidas: 1) Quando eu faço as Subclasses Professor e Usuario herdarem de Pessoa, na hora de salvar na base de dados, eu deveria ter uma tabela Pessoa ou 2 tabelas sendo uma Professor e outra Usuario? 2) Assim que gravar na base, devo destruir o objeto Pessoa criado né? 3) Na hora de exibir os dados para uma possível busca, é obvio que nesse momento não terei objetos e sim, consultas SQL à base de dados. Sendo assim, as classes que usei para criar os objetos inicialmente, não poderiam ter métodos der alteração de seus atributos pois eles já não existem mais. Então, devo ter que fazer busca no banco e popular o formulário de alteração normalmente como se fosse Não Orientado a Objeto. Estou correto? É esse o caminho? Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Junho 11, 2015 1) Isto depende do nível de dependência que você quer para o seu sistema, por exemplo: um professor pode ser aluno ou vice-versa (alias, vai ter aluno?)? Isto vai influenciar na regra de negócio, e para isto não há certo nem errado, apenas lógica diferente. 2) Não acho que seria importante neste momento se preoculpar com destruir objetos. O Garbage Collector vai se encarregar disto. 3) Você vai procurar sempre trabalhar o máximo possível atrabalhar o modelar seus objetos com intuito de facilitar o entendimento do que acontece e visando sempre o reaproveitamento, o que, nem sempre quer dizer que este será o caminho fácil. Para cada uma das suas classes Usuario, Professor e Comentario você terá uma correspondente DAO, por exemplo. UsuarioDAO, ProfessorDAO, etc, estas classes vão ter os métodos de gravação e recuperação da informação, e sim, serão instruções SQL. Na sua camada de visão (JSP), você fará referência as suas classes para recuperar os dados e instanciando, por exemplo, listas de Pessoas, para que na página você possa "imprimir" uma lista ou preencher os formulários, um exemplo de classe PessoaDAO poderia ser assim: package imwsaogotardo.com.br.ebd.dao.pessoas; public class PessoaDAO { public void apagar(String email) { ... } public void apagar(Integer id) { ... } public List<Pessoa> listarTodos() { ... } public void atualizar(Pessoa pessoa) { ... } public Pessoa buscar(String email) { ... } public Pessoa buscar(Integer id) { ... } public void inserir(Pessoa pessoa){ ... } } Perceba que o retorno dos métodos buscar é uma classe Pessoa, mas você vai ter outros tipos de retornos, como Listas, logo, quando você fizer suas listagens nas páginas ou preenchimento em formulários, na verdade você estará executando chamadas de métodos nas suas classes DAO. Os campos dos seus formulários serão vinculados as propriedades dos objetos, não de forma automática, isto precisa ser parametrizado. Aqui um exemplo usando Scriptlet: http://www.caelum.com.br/apostila-java-web/javaserver-pages/#6-3-listando-os-contatos-com-scriptlet Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 11, 2015 Para confirmar: Noto que quando vou alterar o cadastro de um professor por exemplo, nesse momento ele não é mais um objeto da classe mas sim um record na base de dados. Certo? 1) No exemplo que me passou, tem um metodo buscarTodos() aonde é feito uma varredura na base em busca de todos os records da tabela Pessoa e à cada laço do while é criado um objeto da classe Pessoa! Mas não vejo necessidade de se fazer isso. Uma vez que os dados já estão no banco, basta altera-los ou exclui-los coo se faz no estruturado php. estou certo? 2) Terei em meu projeto arquivos .jsp e .java? Se sim, vai acabar tendo também .class. O Tomcat lê .class? 3) Essas várias conexões ao banco que aparecem no PessoaDAO, não podem ser feitas apenas uma vez no jsp que gerencia as edições? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 11, 2015 1) Completando o item 1, quer dizer que o fato do retorno do método buscar ser uma pessoa, significa que é para podermos usar os métodos da classe Pessoa e não criarmos mais "funções estruturadas)? É isso mesmo? Esse é o motivo pelo qual se gera a lista de pessoas? 4) E no caso do Professor querer ser aluno, o que fazer nesse caso? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 11, 2015 Outra observação importante: Na parte de alteração de Pessoa, vejo alterando a Pessoa por ela mesma! É isso mesmo? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Junho 12, 2015 Será que entendi errado? será que na função abaixo não deveria ter outro parâmetro, Pessoa pessoa2 para que as modificações pudessem ocorrer? Da forma que esta: public void atualizar(Pessoa pessoa) { conectar(); String com = "UPDATE pessoa SET nome = '" + pessoa.getNome() + "', idade =" + pessoa.getIdade() + ", cidade = '" + pessoa.getCidade() + "', estado ='" + pessoa.getEstado() + "' WHERE rg = '" + pessoa.getRg() + "';"; System.out.println("Atualizada!"); try { comando.executeUpdate(com); } catch (SQLException e) { e.printStackTrace(); } finally { fechar(); } } Parece que ele esta alterando a pessoa por ela mesma. Não é não? Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Junho 15, 2015 Você tem alguns entendimentos corretos e alguns errados. Como já havia sugerido, leia um pouco mais para ter dúvidas um pouco mais conscientes. Além de usar uma IDE, programar java para web sem IDE é uma tarefa muito mais complicada. https://www.caelum.com.br/apostilas/ Compartilhar este post Link para o post Compartilhar em outros sites