Problema com agregação

7 respostas
1

Estou com um grande problema no meu trabalho.
Vou tentar explicar.

tenho 4 classes: Conta, Cliente, ContaCorrente e ContaPoupança.
A conta e o cliente são agregados.
e a contaCorrente e a poupanca herdeiros de “conta”

Em cliente eu tenho a variavel nome que é uma String;

No main eu crio Cliente c = new Cliente()

e faço: c.setNome=Joao;

Em Conta eu criei a variavel nome2 do tipo Cliente;
entao meu get e set “nome” são do tipo Cliente

Como posso agregar o Cliente nome que é uma string dentro da Conta nome2 q só recebe tipo Cliente??

7 Respostas

Rodrigo_Sasaki

Tente explicar melhor seu problema, talvez exemplificando com código.

Mas antes de postar código leia o nosso How To.

Agora nome2? Isso me parece gambiarra… Mostre melhor seu cenário que aí a gente tenta te ajudar

Demys_Cota
// tente
Cliente c = new Cliente() 
e faço: c.setNome="Joao";
conta.setnome2(c);
wbdsjunior
1988:
... Como posso agregar o Cliente nome que é uma string dentro da Conta nome2 q só recebe tipo Cliente??
acho que você está confundindo um pouco as coisas. vocễ não deve colocar o nome do Cliente na Conta, mas sim o próprio Cliente (como fez). E para recuperar o nome do Cliente, você pode criar um método auxiliar na classe Conta e delegar a chamada ao método que retorna o nome do Cliente. Exemplo:
public class Cliente {
    private String nome;
    private Conta conta;

    // ...

    public void setConta(Conta conta) {
        if (conta == null) {
            this.conta = conta;
        }
    }
}

public class Conta {
    private int numero;
    private Cliente cliente;

    // ...

    public void setCliente(Cliente cliente) {
        if (cliente == null) {
            this.cliente = cliente;
        }
    }

    public String getClienteNome() {
        return cliente != null ? cliente.getNome() : null;
    }
}

public class Start {
    public static void main(String[] args) {
        // ...
        conta.setCliente(cliente);
        System.out.println(conta.getNomeCliente());
    }
}

Ou simplesmente pegar o nome do Cliente na Conta. Exemplo:

public class Start {
    public static void main(String[] args) {
        // ...

        conta.setCliente(cliente);
        System.out.println(conta.getCliente() != null ? conta.getCliente().getNome() : null);
    }
}
Demys_Cota

Bem melhor

di.magdaleno

1988:
Estou com um grande problema no meu trabalho.
Vou tentar explicar.

tenho 4 classes: Conta, Cliente, ContaCorrente e ContaPoupança.
A conta e o cliente são agregados.
e a contaCorrente e a poupanca herdeiros de “conta”

Em cliente eu tenho a variavel nome que é uma String;

No main eu crio Cliente c = new Cliente()

e faço: c.setNome=Joao;

Em Conta eu criei a variavel nome2 do tipo Cliente;
entao meu get e set “nome” são do tipo Cliente

Como posso agregar o Cliente nome que é uma string dentro da Conta nome2 q só recebe tipo Cliente??

Acho que o problema é que você não está usando uma abordagem totalmente orientada a objeto nesse cenário.

A sua classe conta não deveria ter um atributo nome do tipo cliente, mas sim um atributo cliente do tipo cliente que recebesse o cliente titular daquela conta.

Quando você quisesse recuperar o nome do titular da conta deveria utilizar algo como:

this.cliente.getNome();
1

[color=red]VOU MOSTRAR O QUE PRETENDO FAZER PARA SER MAIS FACIL [/color]

public class Cliente {

    private String nome;
    private int idade;

    public String getNome() {
     return this.nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getIdade() {
        return idade;
    }
    public void setIdade(int idade) {
        this.idade = idade;
    }
}


public class Conta {
    private int nconta;
    private Cliente cliente;
    
    public Conta(Cliente n ){
        this.cliente=n;
       }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {  
     this.cliente.getNome();
    }
}


public class ContaCorrente extends Conta {
	private Conta Nconta;
         private Cliente Cte;
   
        
    public ContaCorrente(Cliente c){
        super(c);
         }

    public Cliente getCte() {
        return Cte;
    }

    public void setCte(Cliente c) {
        this.Cte=super.getCliente();
    }

        public int getNconta(){
        return super.getNconta();
    }

    public void setNconta(Conta n) {
        this.Nconta = n ;
    }

}


public class ContaBancaria {


    public static void main(String[] args) {

        Cliente cliente = new Cliente();
        Conta conta = new Conta(cliente);
        ContaCorrente corrente = new ContaCorrente(cliente);

        cliente.setNome("Joao Pedro da Silva");
        cliente.setIdade(23);

        conta.setNconta(123);
        conta.setCliente(cliente.getNome()); // da erro

        //preciso de um metodo em ContaCorrente que pegue da Class Conta o: Nconta e o Cliente;
        // depois chamar esse metodo no main e imprimir como abaixo:

        System.out.println("Cliente: " + cliente.getNome() + "\nIdade: " + cliente.getIdade());
        System.out.println("-------------------------------------");
        System.out.println("Numero da Conta: " + conta.getNconta() +  "\nDono da conta: "+ conta.getCliente());
        System.out.println("-------------------------------------");
        System.out.println("Conta: " + corrente.getNconta() + "\nCliente: " + corrente.Cte );

}
di.magdaleno

1988, acho que você deveria rever a forma como definiu sua classe ContaCorrente, pois, ela duplica atributos que você já declarou na super classe Conta.

De qualquer forma, considerando o seu código como está:

Dá erro porque esse método está esperando uma referência ao tipo Cliente não à uma String. Você deveria fazer assim:

conta.setCte(cliente);

E depois chamar o atributo dessa forma: System.out.println("Titular da conta: " + conta.getCte().getNome());

Criado 8 de abril de 2013
Ultima resposta 8 de abr. de 2013
Respostas 7
Participantes 5