Iniciando projeto para estudo e aprendizado

9 respostas
R

Oi pessoal !!!

Estou começando a minha caminhada no aprendizado de java.
Tenho bastante experiência em Forms/Reports da Oracle e agora quero mudar para java porque tenho outras idéias para o futuro e para mim.

Fiz o curso de OO na Caelum e não tenho verba para fazer o módulo voltado para a Web, então, vou tentar avançar sozinho na tentativa de desenvolver um sistema para Web. Sozinho, não… conto com vocês !!! :lol:

Vou colocar uma idéia bem simples e resumida para facilitar a gente trocar idéias sobre as dúvidas e conceitos.
Para iniciar, estou pensando em fazer uma página simples na Web com JSP, banco de dados MySql e servidor de aplicação Tomcat.

Tenho 3 tabelas no banco de dados:
CLIENTE
cod_cliente
flg_ativo
dat_cadastro

CLIENTE_PF
cod_cliente (fk)
num_cpf
nom_cliente

CLIENTE_PJ
cod_cliente (fk)
num_cnpj
nom_razao_social
nom_fantasia

Vou fazer 3 classes… ClientePf e ClientePj vão estender Cliente

Dúvidas:

:arrow: 1) os métodos, por exemplo, gravaCliente, inativaCliente, etc, ficarão na classe Cliente. Correto?
:arrow: 2) é necessário que a classe Cliente seja abstrata? Pelo que eu entendi, não farei new em Cliente. Correto?
:arrow: 3) não entendo Cliente como interface… está correto meu entendimento?

Acho que para agora é só.
Vou postando outras dúvidas que deverão aparecer à medida que eu for avançando.

Obrigado !!!

9 Respostas

igor_ks

suas classes Bean serao um espelho (grosseiramente falando) do seu banco de dados

a logica do seu sistema tem q ficar desacoplado, em um controlador responsavel por isso
ai la sim tera as interfaces e classes abstratas

vinnysoft

Olá Amigo,

Antes de tudo, se o objetivo é estudar e se atualizar, aconselho a estudar a “tecnologia atual” para programação web em Java, que é o JSF. Veio depois do JSP e Servlets, e é mais simples de trabalhar.
Se quiser se aprofundar, estude algum framework como o PrimeFaces, RichFaces ou Wicket. Facelets também é bem vindo!

Agora a minha opinião sobre suas perguntas:

  1. Da uma lida no padrão MVC, onde vc tem uma camada Model que contem essas regras de negócio. (O ideal é criar um DAO para fazer estes acessos aos dados).

  2. Depende do caso, nada é obrigatório!rs. É uma questão de projeto. Nesse caso de PF e PJ, onde o cliente não vai ser instanciado, o ideal é sim ser abstrata.

  3. A interface serve para quando vc quer encapsular algum comportamento que varia, com a vantagem de poder alterar este comportamento em tempo de execução, e tornar sua aplicação mais flexível.
    Leia o livro Use a Cabeça: Padrões de Projeto, ele têm uns conceitos muito interessantes sobre os padrões de projetos, também com exemplos em Java sobre o uso de interface e herança. No caso específico do Java, que não permite herança múltipla, pode-se usar várias interfaces como opção.

Espero ter ajudado!

Até +!

A

cara,

da uma olhada nessas apostilas, sao muito boas, http://www.k19.com.br/downloads/apostilas-java

t+

espiaoweb2011

Olá amigo, na verdade as classes que vc citou (Cliente,ClientePJ,ClientePF) deverão ser vistas como Pojos (Beans,VO’s) no seu sistema, independente da hierarquia.
Seria correto vc criar classe(s) DAO’s no seu sistema que seriam responsavel pelas operações no Banco de Dados.

Ex:

ClienteVO.java

private int id;
private String nome;

get’s and set’s …

ClienteDAO.java

public boolean salvarCliente(ClienteVO cliente) {

}

Os VO’s e DAO’s farão parte da camada de modelo do seu sistema, para seu sistema gravar um novo cliente por ex, vc deve criar na camada de controle que pode ser feita com um Servlet, seria algo mais ou menos assim :

SalvaClienteServlet.java

//voce receberia os dados da view
String nome = request.getParameter(“nome”);

//ai voce cria um novo cliente(referente a camada de modelo VO)
ClienteVO cliente = new ClienteVO();

//e seta os dados recebidos
cliente.setNome(nome);

//apos isso cria um objeto da classe DAO
ClienteDAO clienteDAO = new ClienteDAO();

//e manda executar o metodo responsavel por salvar no banco passando o cliente (VO) como parametro
clienteDAO.salvarCliente(cliente);

Procure dar uma olhada no padrão de projetos DAO.

Espero ter ajudado.

R

Obrigado pelas respostas até o momento.

Minhas considerações:

igor_ks e vinnysoft
Entendi o que vocês falaram, mas ficou bem claro mesmo quando o espiaoweb2011 colocou os exemplos.
Quanto a arquitetura MVC acho bacana, mas como disse, estou iniciando e ainda é um pouco confuso todas essas nomenclaturas, por isso acho que clareou bem com os exemplos mais práticos.

espiaoweb2011
POJO’s :arrow: já tinha visto esse termo, mas VO’s não… o que seria?

alissonvla
Baixei as apostilas… obrigado pela dica.
Vou ler assim que possível para não misturar muito com a apostila que eu estou seguindo da Caelum… até mesmo porque eu fiz um curso lá.

Vou ver se consigo estruturar e codificar alguma coisa mais concreta em cima do que vocês falaram e assim que possível eu vou postar aqui para dar andamento no projeto e no esclarecimento das dúvidas que surgirem.

Abraço!!!

espiaoweb2011

rcerullo:
Obrigado pelas respostas até o momento.

Minhas considerações:

igor_ks e vinnysoft
Entendi o que vocês falaram, mas ficou bem claro mesmo quando o espiaoweb2011 colocou os exemplos.
Quanto a arquitetura MVC acho bacana, mas como disse, estou iniciando e ainda é um pouco confuso todas essas nomenclaturas, por isso acho que clareou bem com os exemplos mais práticos.

espiaoweb2011
POJO’s :arrow: já tinha visto esse termo, mas VO’s não… o que seria?

alissonvla
Baixei as apostilas… obrigado pela dica.
Vou ler assim que possível para não misturar muito com a apostila que eu estou seguindo da Caelum… até mesmo porque eu fiz um curso lá.

Vou ver se consigo estruturar e codificar alguma coisa mais concreta em cima do que vocês falaram e assim que possível eu vou postar aqui para dar andamento no projeto e no esclarecimento das dúvidas que surgirem.

Abraço!!!

Então, VO é Value Object, vou tentar explicar de uma forma bem clara, nada muito técnico, por que para quem esta iniciando não resolve muito a parte técnica…

Diagamos que os VO’s em uma aplicação com banco de dados representariam suas tabelas. EX:

Você tem uma tabela no banco uma tabela pessoa, esta pessoa tem:

id do tipo INTEGER
nome do tipo VARCHAR
telefone do tipo VARCHAR

Ai em sua aplicação você faria um VO para representar isso, EX:

Pessoa.java

private int id;

private String nome;

private String telefone;

get’s e set’s

Os VO’s são a combinação perfeita para trabalhar com DAO’s, pois ele representam as Entidades (tabelas no banco se for o caso), enquanto os DAO’s fazem a parte de persistencia (ações no banco).

Qual a vantagem ?

Mais organização na aplicação.

Um Ex. que pode te deixar mais claro uma aplicação Web com Servlet’s e JSP (com padão MVC).

Na parte de modelo viriam os VO’s e DAO’s

Na parte de controle viriam os Servlet’s

E na parte de visão viriam os JSP’s (utilizando JSTL para deixar mais limpo as view’s)

Espero ter esclarecido algo, pesquise mais na net sobre VO’s DAO’s e MVC, tem muito conteúdo…

R

vinnysoft
Esqueci de dizer uma coisa.
Não vou utilizar JSF agora, porque quero pegar bem os conceitos básicos.
JSF será um próximo passo meu de evolução depois que a aplicação estiver funcionando e eu com os conceitos básicos assimilados.
Acho que vai me confundir ainda mais nesse início se eu já utilizar JSF. Pelo menos é a impressão que eu tenho.

espiaoweb2011
Agradeço mais uma vez.
Seus exemplos estão me ajudando muuuuuito !!!
Como eu disse, com base no que vocês me ensinaram por aqui, vou estruturar a minha aplicação e assim que possível vou postar o meu código aqui para vocês criticarem.

Valeu !!! :smiley:

Lucas_Abbatepaolo

Respondendo a pergunta que iniciou o topico (sem falar que vc deve usar tal padrão ou tal tecnologia ja que existem dezenas por ai).

Sim vc pode fazer as classes ClientePf e ClientePj serem classes filhas de Cliente. Em relação a ser uma abstrata ou interface, eu usaria como abstrata ja que provavelmente eu teria metodos implementados no cliente para reaproveitalos nas classes filhas.

PS: Acho legal sua iniciativa de querer aprender desde o basico e não ir diretor para um framework, pois por exemplo exite muita gente que sabe utilizar o jsf e nao consegue escrever uma pagina com jsp usando EL.

Qualquer duvida posta ai…bons estudos…

vinnysoft

Olá!

Verdade Lucas! Acho que fui longe opinando quanto a “JSF”. Estava pensando em produtividade… rs

Se o objetivo é estudar, o foco é outro, independente do framework. Mais importante que codificar é o projeto do software, onde vc pensa antes de fazer (evitando retrabalho e deixando o código flexível!).

Outro conceito que poderia te ajudar quanto a usar interface x classe abstrata é este:

  • Usa-se a classe abstrata quando quiser um modelo para as demais classes, onde a classe abstrata tenha uma implementação em comum que possa ser compartilhada entre as demais classes filhas. Você a coloca como abstrata para evitar que sejam criados objetos dela. Outro ponto é que a classe abstrata compartilha os atributos com as classes filhas, já a interface “compartilha” somente métodos.

  • A interface é utilizada quando quiser definir um comportamento/função que as demais classes precisem ter para serem utilizadas em seu código. Ex:

Imagine um software para jogos, com uma Classe soldado que utilizasse uma arma, mas deveria poder trocá-la durante a execução do jogo. Como programar se você não sabe quais armas serão criadas? ou mesmo se for necessário criar novas armas depois de pronto sem ter de modificar o código antigo? Resposta: interface!

public interface IArma
{

public void atacar();

}
public Class Soldado()
{

private String nome;
private IArma minhaArma;


public void atacar(){
//aqui você delega a parte de atacar para a interface, e ela executa de acordo com a implementação.
    minhaArma.atacar();  
}
//getters and setters

}

Neste código, o atributo minhaArma do soldado poderia receber qualquer objeto de classe que implementasse a interface IArma, e você ainda poderia trocá-la em tempo de execução.

public class Espada implements IArma(){

private int dano;

public void atacar(){
System.out.println("Atacando com espada!");
}

//getters and setters

}
public static void main(String[] args){

Soldado soldado = new Soldado();
Espada espada = new Espada();

soldado.setArma = espada;
soldado.atacar();

//Se no futuro for necessário criar alguma outra arma, bastaria implementar a interface IArma que poderia usá-la em seu código, sem precisar alterar nada do código antigo!
Revolver revolver = new Revolver();
soldado.setArma = revolver;
soldado.atacar();

}

As saídas do código seriam mais ou menos assim:

  • Atacando com espada!
  • Atacando com revolver!

Bem, espero ter te ajudado! Bons estudos!

Até +!

Criado 10 de novembro de 2011
Ultima resposta 11 de nov. de 2011
Respostas 9
Participantes 6