Classe Pessoa PessoaFisica , PessoaJuridica Cliente e Vendas

9 respostas
tenclar

Estou criando a logica de um projeto para cadastro de cliente onde cliente pode ser pessoa jurídica ou Fisica, alguem tem uma sujestão baseado nas tradicionais classes:

Pessoa
PessoaJuridica extends Pessoa
PessoaFisica extends Pessoa

Cliente - pode ser pessoa fisica ou juridica

como crio a classe cliente para que possa receber um dos tipos de Pessoa?

9 Respostas

gustavo_mb

Utilize do poliformismo. Faça com que a classe Pessoa seja abstrata para que ela não possa ser instanciada, e na classe Cliente crie um método de cadastro que recebe Pessoa.

davidbuzatto

Use composição com a classe Pessoa, que poderá ser tanto pessoa física como jurídica.

[]'s

tenclar
public abstract class Pessoa {
    
    private String nome;
    private String endereco;
    private String telefone;

// getters & Setters ..  
    
}

public class PessoaFisica extends Pessoa{
    
    private String cpf;
    private String rg;
  
  // getters & Setters ..  
}

public class PessoaJuridica extends Pessoa {
    private String cnpj;
    private String ie;

// getters & Setters ..  
}

public class Cliente {
    
public static final int FISICA = 0;
public static final int JURIDICA = 1;
PessoaFisica pf;
PessoaJuridica pj;

    public Cliente(int type) {
        
        switch(type){
            case FISICA:
                pf = new PessoaFisica();
        
        case JURIDICA:
                pj = new PessoaJuridica();        
        
        }
        
    }

    public PessoaFisica getPf() {
        return pf;
    }

    public void setPf(PessoaFisica pf) {
        this.pf = pf;
    }

    public PessoaJuridica getPj() {
        return pj;
    }

    public void setPj(PessoaJuridica pj) {
        this.pj = pj;
    }


    
}

uma idéia que me veio.

gustavo_mb

Essa não é a maneira correta de se fazer. Procure aprender polimorfismo.

Se preferir video-aulas, assista as aulas 49,50,51 e 52 desse link: http://www.youtube.com/playlist?list=PLA03DEA5320ECBF85

leoramos

Faça um favor a você mesmo: NÃO use herança de Pessoa pra Pessoa Física e Jurídica. Apesar do nome parecido, o comportamento delas é sempre absurdamente diferente. Aprendi do pior jeito possível umas três vezes, porquê nem sempre eu tinha opção) que fazer isso traz problemas.
Separa esse bagulho, que 3 ou 4 atributos economizados não justificam a herança aí.
Abraço!

tenclar

eu só queria saber o que ponho na classe cliente para que inclua pessoa tanto fisica quanto juridica .

gustavo_mb
tenclar:
eu só queria saber o que ponho na classe cliente para que inclua pessoa tanto fisica quanto juridica .

Você já pesquisou polimorfismo? Acho que não. Vou te mostrar como faz dessa vez, mas não deixe de pesquisar para que aprenda!

public abstract class Pessoa {
	
	private String nome;
	private String telefone;
	private String endereco;

        //getters e setters
public class PessoaFisica extends Pessoa {

	private String cpf;
	private String rg;

        //getters e setters
public class PessoaJuridica extends Pessoa {
	
	private String cnpj;
	private String ie;

        //getters e setters
public class Cliente {

	private static ArrayList<Pessoa> listaDeClientes = new ArrayList<Pessoa>();
	
	public void adicionaCliente(Pessoa p) { //Aqui entra um dos conceitos de polimorfismo... estamos pedindo pra receber uma pessoa aqui. Uma PessoaFisica é uma Pessoa? E uma Pessoa Juridica é uma Pessoa? No nosso caso sim!
		Conta.listaDeClientes.add(p);
		System.out.println(p.getNome() + " adicionado com sucesso na lista de Clientes!");
	}	

	public ArrayList<Pessoa> getListaDeClientes() {
		return listaDeClientes;
	}	
}
public class Teste {
	
	public static void main(String[] args) {
		
		//Pessoa p = new Pessoa(); //não instancia, pois a classe Pessoa é abstrata
		PessoaFisica pf = new PessoaFisica();
		PessoaJuridica pj = new PessoaJuridica();
		
		pf.setNome("Pessoa Física");
		pj.setNome("Pessoa Juridica");
		
		Cliente c = new Cliente();
		c.adicionaCliente(pf);
		c.adicionaCliente(pj);		
	}
}
K

Pessoal boa noite,

Sou iniciante na linguagem java e tenho algumas dúvidas em relação ao conceito de polimorfismo. Através da classe Pessoa, tenho que fazer um vetor que receba os dados dos clientes, imprimá-os e também os “diferenciem” entre os tipos de cliente: Pessoa Física e Pessoa Jurídica.
No momento da comparação através do laço “if”, eu nao estou sabendo mais como fazer.
Caso alguém possa me ajudar ou passar orientações, fico agradecido. O código que está abaixo, é até onde eu consegui fazer.

package br.edu.ifsuldeminas.teste;

import java.util.Scanner;

public class Teste {

  
    
    public static void main(String[] args) {
        int i=0;
        Pessoa clientes[] = new Pessoa[5]; 
        clientes[0] = new PessoaFisica();
        clientes[1] = new PessoaJuridica();
        clientes[2] = new PessoaFisica();
        clientes[3] = new PessoaJuridica();
        clientes[4] = new PessoaFisica();
        
        Scanner entrada = new Scanner(System.in);
        
        for(i = 0; i < 5; i ++){
            System.out.println("---------------------------------------------");
            System.out.print("Digite o nome da Pessoa:");
            clientes[i].setNome(entrada.nextLine());
            System.out.print("Digite o endereco da Pessoa:");
            clientes[i].setEndereco(entrada.nextLine());
            System.out.print("Digite o telefone da Pessoa:");
            clientes[i].setTelefone(entrada.nextInt());
            entrada.nextLine();
            System.out.println("---------------------------------------------");
            
         
              //Aqui precisa fazer a comparação se o cliente é Pessoa Fisica ou Pessoa Juridica.//  
            
            
        }
        
        System.out.println("Dados dos Clientes");    
       
            for(i = 0; i < 5; i ++){
              System.out.println("---------------------------------------------");
              System.out.println("Clientes["+i+"]="+clientes[i].getNome());          
              System.out.println("Clientes["+i+"]="+clientes[i].getEndereco());          
              System.out.println("Clientes["+i+"]="+clientes[i].getTelefone());   
              System.out.println("---------------------------------------------");
           }

        
    }
}
Daniel_T_S

Geralmente eu crio apenas uma classe Pessoa e todas as pessoas no meu sistema herdam de Pessoa, sejam elas físicas ou jurídicas.
Então crio uma classe ‘Documento’ que tem rg, cpf, cnpj e etc. E então a classe Pessoa passa a ‘ter’ uma variável do tipo Documento.

se quiser ir mais longe faz assim:

public class Pessoa{
       private Documento d;
}
public class Documento{

}
public class DocumentoFisica extends Documento{

//atributos

}
public class DocumentoJuridica extends Documento{

//atributos

}
public class Cliente extends Pessoa{

}

Nesse caso qualquer cliente, vendedor, fornecedor etc que estendam ‘Pessoa’ poderão ter um documento que seja para pessoa física OU jurídica.

espero que tenha sido claro.

[]s

Criado 3 de novembro de 2011
Ultima resposta 13 de ago. de 2013
Respostas 9
Participantes 6