Modelagem OO - Como interligar classes

Bom dia Pessoal,

Estou com uma dúvida em relação a modelagem de classes, sobre como distribuir responsabilidades entre elas.

O modelo é de um software para locadora e a dúvida é justamente na parte de realização do aluguel.

Tenho as seguintes classes:

class Cliente {
    private String nome;
    private List<Aluguel> pendentes;
    private Money saldo;
}

class Aluguel {
    private Date retirada;
    private List<ItemAluguel> itens;    
}

class ItemAluguel {
    private Produto produto;
    private Date devolucaoPrevista;
    private Date devolucaoEfetiva;
}

class Produto {
    private String nome;
    private Date aquisicao;
    private boolean disponivel;
}

Quando um cliente alugar um ou mais produtos as seguintes ações precisam ocorrer:

  • Marcar o produto como indisponível.

  • Calcular data de previsão de entrega de cada produto de acordo com alguma política

  • Preencher um item de aluguel para cada produto e com o cálculo anterior

  • Montar o objeto aluguel com todos os itens de aluguel gerado.

  • Associar este objeto aluguel criado ao cliente como pendentes.

  • Descontar do saldo do cliente o valor deste aluguel.

    Minha dúvida é: quem teria o método alugar ?

    Imagino que cada classe teria um método para alterar seus próprios atributos, mas quem faz a interligação de todos eles?

    Agradeço as sugestões.

bom dia

bom era vc tem que usar o conceito de heranças

instancialas e interligalas

esse artigo esplica bem ???

de um alida ai ???

quaisquer duvidas e so avisar

Apesar da ajuda, acredito que a resposta não esteja aí

[quote=welitonjose]bom dia

bom era vc tem que usar o conceito de heranças

instancialas e interligalas

esse artigo esplica bem ???

de um alida ai ???

quaisquer duvidas e so avisar[/quote]

Voce deve procurar GRASP, que é uma metodologia pra atribuição de responsabilidade…
Na minha visão voce deve pensar como é feito o processo de aluguel e modela-lo. Tipo, o cara chega na LOCADORA e pede pra ALUGAR um ou mais ITEM de FILME.
Então acho q deve existir uma classe LOCADORA com um método alugar, é a minha primeira visão. Acho tb q outra classe poderá ter um metodo alugar. Tipo:

Class Locadora{
 public void alugar(InformacaoDoAluguel infa){
  //pode ser um for each
    infa.getItem().alugar(algumaOutraInformacao);
 }
}

http://www.cin.ufpe.br/~if718/transparencias/pdf/06-padroesGRASP.pdf

bom humberto.lima

penso igual a vc mas
mas ele naum criou atributos ja vc particamente resumiu tudo
criar os metodos e instasialos

usando new

class Cliente {   
   int cod;
    private String nome;   
    private List<Aluguel> pendentes;   
    private Money saldo;   
}   
  

class ItemAluguel {   
    private  produto;   
    private Date devolucaoPrevista;   
    private Date devolucaoEfetiva;   
}   

class locadora {

Cliente cliente =new cliente;

void verificaCliente{
/// ler cod do cliente 
if (cliente.cod != null){
 if (produto!=null){
//disponivel pra aluguel
???????????
}
}
}
}

assim por diante

Obrigado pelas respostas.

@humberto.lima

Vou dar uma lida neste link sobre Grasp que foi postado.

A minha primeira idéia era exatamente criar uma classe a parte para ter o conhecimento de como as coisas aconteciam.
Só que achei que isso não seria uma boa prática: ter um objeto só para coordenar as interações entre as classes.

Na prática então, para cada “funcionalidade” (como alugar um filme) do sistema eu teria uma classe para coordenar todos os passos?

Bem…vou conferir o link antes de tirar mais conclusões.

@welitonjose

eu já conheço herança e esses outros conceitos, minha dúvida era só entre o relacionamento entre as classes mesmo…

não coloquei os métodos apenas para poupar espaço, só coloquei os atributos para entender qual relação uma tinha com a outra.

Pq vc não faz em Produto um método ‘locar’ passando um Cliente como parâmetro?