1
resposta

Orientação de Objetos Composição Java

Prezados, boa noite!

Estou com duvida em composição, vou compartilhar um exemplo que criei aqui para tentar ir direto ao ponto.

Observe as 3 classes abaixo:

public class Cliente {

private String nome, rg, cpf;

public Cliente(String nome, String rg, String cpf) {
    this.nome = nome;
    this.rg = rg;
    this.cpf = cpf;
}

public String getNome() {
    return nome;
}

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

public String getRg() {
    return rg;
}

public void setRg(String rg) {
    this.rg = rg;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

}

public class Endereco {

private String rua, bairro, cep;
private Cliente cliente;

public Endereco(String rua, String bairro, String cep, Cliente cliente) {
    this.rua = rua;
    this.bairro = bairro;
    this.cep = cep;
    this.cliente = cliente;
}

public String getRua() {
    return rua + "do Cliente " + cliente.getNome();
}

public void setRua(String rua) {
    this.rua = rua;
}

public String getBairro() {
    return bairro;
}

public void setBairro(String bairro) {
    this.bairro = bairro;
}

public String getCep() {
    return cep;
}

public void setCep(String cep) {
    this.cep = cep;
}

}

public class Main {

public static void main(String[] args) {

    Cliente cliente = new Cliente("marcos", "rg XXX", "cpf XXX");
    Endereco endereco = new Endereco("rua XXX", "bairro XXX", "cep XXX", cliente);
    System.out.println(endereco.getRua());

}

}

Isso que postei acima esta compilando sem problemas, e até acredito que usei corretamente a composição. A minha duvida é o seguinte...

Pensando no exemplo acima, eu precisei fazer a composição de Endereço com Cliente, correto? Isso me obrigou a criar o objeto Cliente e o Endereço, e no construtor da classe Endereço precisei passar a referencia de Cliente. Supondo a necessidade de além da composição de Endereço com Cliente, eu tivesse mais uma classe para Formação Academica, outra para Comprovação de Renda e asssim vai... Eu teria que criar um objeto para cada nova classe, e alem disso, ainda ter que passar sempre ela no CONSTRUTOR?

No meu projeto real, eu ja tenho todos os dados em um JSON, eu quebrei em classes, para efeito de REFATORACAO... Mas eu preciso gerar umas Strings de QUERYS, que precisa pegar os atributos entre as classes.

Gostaria de saber se existe alguma forma das referencias serem criadas por dentro do codigo e não pela MAIN (pela MAIN eu só teria a primeira criação de objeto), e assim elas forem se atualizando dinamicamente entre as classes.

Uma opção seria usar STATIC, mas quebra meu ENCAPSULAMENTO.

Se existir uma opção, gostaria de saber como. Agora mais importante do que ter uma opção, é saber se a forma como defini as classes para funcionarem, se estão corretas tambem.

Desde ja obrigado.

1 resposta

Olá, Marcos, tudo bem com você?

Peço desculpas pela demora no retorno a sua mensagem.

Se você tiver outras classes, como FormacaoAcademica e ComprovacaoRenda, que também precisam ser relacionadas com a classe Cliente, você precisará criar objetos dessas classes e passá-los no construtor das respectivas classes.

No entanto,uma opção para que esse processo seja mais dinâmico, seria utilizar métodos de associação, onde você poderia definir métodos na classe Cliente para associar um objeto da classe Endereco, FormacaoAcademica, ComprovacaoRenda, entre outros. Dessa forma, você poderia atualizar as referências entre as classes de forma mais flexível.

Lebre-se que essa abordagem pode deixar seu código mais complexo e difícil de entender, principalmente se você tiver muitas classes e associações. Portanto, é importante avaliar se realmente é necessário utilizar essa abordagem dinâmica ou se a composição está atendendo às suas necessidades.

Todavia, vale ressaltar que como é um assunto externo aos cursos da Alura, e que não tenho acesso ao cenário completo do projeto outros testes terão de ser feitos a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero ter ajudado.

Abraços e bons estudos!