Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Java Web

Recommended Posts

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.