Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[DÚVIDA] Associação de classes

Boa tarde, tudo bem pessoal?

nas aulas de atributos privados e encapsulamento, vimos duas formas de fazer a integração/associação entre classes, conforme códigos abaixo.

1) Através da propria classe conta:

public class Conta {

private double saldo;
private int agencia;
private int numero;
private Cliente titular;

***Cliente cliente = new Cliente();*** // associação das classes ao criar o objeto conta

}


2) Através da classe principal/teste:

public class TestaBanco {

public static void main(String[] args) {

    Cliente cliente = new Cliente();
    cliente.nome = "Armando";
    cliente.cpf = "123.456.789-01";
    cliente.profissao = "Proletário";

    Conta conta = new Conta(); 
***conta.titular = cliente;*** // associação das classes dentro da classe principal

}


Comparando estas duas formas, a primeira impressão que me passa, é que seria melhor e mais prático a forma usada na primeira opção, no momento de criação do objeto conta. Seria correto pensar assim, ou esta situação irá variar de acordo com o tipo de problema a ser solucionado?

Existem vantagens e desvantagens em optar por um dos dois modos? Quais?

Valeu, abraços.

4 respostas
solução!

Olá Armando, tudo bem?

Ótima pergunta.

Ambas as formas de associação entre classes que você mostrou são válidas e podem ser úteis em diferentes situações.

A primeira opção, em que a associação é feita dentro da própria classe Conta pode ser mais prática quando você tem certeza de que a classe Conta sempre terá um Cliente associado. Isso porque ao criar uma instância de Conta, a associação com Cliente já é feita automaticamente. Essa forma de associação também é mais fácil de ser implementada em construtores, já que todos os atributos necessários para a criação da instância de Conta estão dentro da própria classe.

Já a segunda opção, em que a associação é feita na classe principal/teste, pode ser mais útil quando você não tem certeza de que uma instância de Conta sempre terá um Cliente associado, ou quando você quer associar a mesma instância de Cliente a várias instâncias de Conta. Essa forma de associação também permite que você crie várias instâncias de Cliente diferentes e associe cada uma a uma instância de Conta diferente, o que pode ser útil em situações em que há vários clientes com contas diferentes.

Não há uma forma certa ou errada de fazer a associação entre classes. Cada forma tem suas vantagens e desvantagens e cabe ao programador escolher a mais adequada para cada situação específica conforme comentei acima :)

Espero ter ajudado, abraço!

Bom dia Otávio, tudo bem?

entendi, seria de acordo com a regra de negócios do projeto!

Apenas para eu entender aqui, estas formas de ligar as classes então seria a forma de fazer os tipos de relacionamentos que estudamos em UML (associação, agregação, etc)? No caso de criar o objeto ao colocar o construtor dentro da classe conta, seria a relação de composição (pois estaríamos criando um vínculo mais forte entre os dois, maior acoplamento) e no caso de criar o objeto à partir da classe principal, estaríamos fazendo uma associação com vínculos mais fracos, uma vez que não necessariamente ao excluirmos uma conta estaríamos excluindo o cliente?

Seria desta forma a criação destas relações da UML?

Valeu, abraços!

Sim, Armando, é isso mesmo :) As diferentes formas de associação entre as classes podem ser mapeadas para os tipos de relacionamentos apresentados na UML, tais como associação, agregação e composição. No caso da criação do objeto ao colocar o construtor dentro da classe conta, estamos estabelecendo um relacionamento de composição, em que a classe Conta é responsável pela criação e gerenciamento da instância da classe Cliente, havendo um forte acoplamento entre elas. Já no caso de criar o objeto a partir da classe principal, estaríamos estabelecendo uma associação com vínculos mais fracos, uma vez que não necessariamente ao excluir uma conta estaríamos excluindo o cliente.

Muito legal, bacana!

Valeu pela ajuda, abraços!