Como / onde codificar uma classe de associação

Estou com uma dúvida referente à codificação de uma classe de associação.

Basicamente, o problema trata sobre uma Locadora que é composta por seus carros e clientes, onde ao realizar a locação de um veículo, deve-se manter a km inicial (antes da locação), a km final (depois da locação), o valor total da locação (km final - km inicial * valor km rodado) e o cliente.

|Cliente| ....................................... |Carro| | | | | |Locação|

Onde colocar a classe Locação? Como atributo de Cliente? de Carro? de Locadora?

Segue abaixo parte do código, desde já obrigado:

public class Locadora { private ArrayList <Cliente> clientes = new ArrayList <Cliente>(); private ArrayList <Carro> carros = new ArrayList <Carro>();

public class Locacao { private Data dataFim; private Data dataInicio; private double kmFinal; private double kmInicial; private double vlrAluguel;

public class Carro { private String placa; private String modelo; private String cor; private String chassi; private int ano; private double kmRodado; private boolean alugado; private Tipo tipo;

public class Cliente { private String rg; private String cpf; private String tel; private String nome; private String endereco; private String contato; // Um cliente pode alugar mais de um carro private ArrayList <Carro> carrosAlugados = new ArrayList <Carro>();

Locação é a associação entre o Cliente e o Carro, certo?

tente:

public class Locacao { private Data dataFim; private Data dataInicio; private double kmFinal; private double kmInicial; private double vlrAluguel; private Carro carro; // um cliente pode llocar mais de uma carro por vez? se sim, isso vira uma coleção private Cliente cliente;

public class Carro { private String placa; private String modelo; private String cor; private String chassi; private int ano; private double kmRodado; private boolean alugado; private Tipo tipo; private List<Locacao> locacoes = new ArrayList<Locacao>(); // um carro pode ter sido locado várias vezes por vários clientes (ou pelo mesmo cliente várias vezes)

public class Cliente { private String rg; private String cpf; private String tel; private String nome; private String endereco; private String contato; private List<Locacao> locacoes = new ArrayList<Locacao>(); // um cliente pode ter locado vários carros (ou o mesmo carro várias vezes)

[quote=wbdsjunior]Locação é a associação entre o Cliente e o Carro, certo?

tente:

public class Locacao { ... private Carro carro; // um cliente pode llocar mais de uma carro por vez? se sim, isso vira uma coleção private Cliente cliente;

public class Carro { ... private List<Locacao> locacoes = new ArrayList<Locacao>(); // um carro pode ter sido locado várias vezes por vários clientes (ou pelo mesmo cliente várias vezes)

public class Cliente { ... private List<Locacao> locacoes = new ArrayList<Locacao>(); // um cliente pode ter locado vários carros (ou o mesmo carro várias vezes)
[/quote]

Ok, só uma dúvida: então um cliente tem uma locação, e a locação também tem um cliente?
Obrigado pela resposta.

[quote=jhonatta]Ok, só uma dúvida: então um cliente tem uma locação, e a locação também tem um cliente?
Obrigado pela resposta.[/quote]
sim. reflita…

mundo real:
olhando para uma locação (imagine um papel) você reconhece o cliente que locou o carro. e se você perguntar a um cliente, ele saberá dizer quais locações (data, carro, etc) fez.

no seu programa:
um cliente (o programa que instanciará a Locação ou o Cliente) pode perguntar (chamar uma método) ao objeto Locação qual é o cliente que locou o carro ou para o objeto Cliente, quantas locações ele fez. você “desenha” como no mundo real, sacou? mas se seu cliente (o programa) instanciar apenas a Locação, você não precisará fazer essa associação no Cliente (o objeto) e vice-versa.