Duvida com abstração Pessoa, PessoaFisica, PessoaJuridica, Cliente em um sistema imobiliario

Pessoal estou modelando um sistema para imobiliaria, onde tenho as seguintes condições:

-Um cliente deve ser uma pessoa.
-Um cliente pode ser uma pessoa fisica ou juridica.
-Um cliente pode ser tanto um locador como um locatario.
-O locatario pode ser um locador também e vice versa.

Bem a parte da modelagem que tá pegando é essa, não sei como fazer, a principio, tenho uma classe Pessoa, e mais uma classe PessoaFisica e PessoaJuridica ambas herdando a classe Pessoa, mas não sei como faria a parte do cliente, pois ele pode ser ou juridica como fisica. E ai, alguma sujestão para essa modelagem ?

Para não ter restrição tão forte, faça mais uso de composição! Há situações que composição é mais recomendado, outras herança, e vice-versa.

Cliente não precisa ser um Domínio em si

Ex: quando você for cadastrar um cliente, instancia um objeto do tipo locatário que este pode ser PF ou PJ

Sugestão:

Pessoa
--------------------------
  |                      |
PessoaFisica     PessoaJuridica
--------------     -----------------
  |                      |
LocatarioPF        LocatarioPJ
-------------        -------------
  |                      |
LocadorPF          LocadorPJ

Mas isso depende muito das propriedades que teriam Locador e Locatario.
Você poderia também ter Locatário/Locador como uma interface.

[quote=juno.rr]Sugestão:

Pessoa
--------------------------
  |                      |
PessoaFisica     PessoaJuridica
--------------     -----------------
  |                      |
LocatarioPF        LocatarioPJ
-------------        -------------
  |                      |
LocadorPF          LocadorPJ

Mas isso depende muito das propriedades que teriam Locador e Locatario.
Você poderia também ter Locatário/Locador como uma interface.[/quote]

Um cliente podera terá varios imoveis associados a ele, tera imovéis como ele sendo proprietario(no caso ele sera locatario), e podera ter imoveis com ele sendo o locador, como ficaria isso ?

Classes:
Cliente

  • nome : String
  • imoveisLocator : List
  • imoveisLocatario : List

PessoaFisica

  • CPF

PessoaJuririca

  • CNPJ

Imovel

  • proprietario - Cliente
  • locator - Cliente

Relacionamentos:
Cliente HAS-A Imovel (1 - *)

PessoaFisica IS-A Cliente

PessoaJuridica IS-A Cliente

[quote=heatcold]Classes:
Cliente

  • nome : String
  • imoveisLocator : List
  • imoveisLocatario : List

PessoaFisica

  • CPF

PessoaJuririca

  • CNPJ

Imovel

  • proprietario - Cliente
  • locator - Cliente

Relacionamentos:
Cliente HAS-A Imovel (1 - *)

PessoaFisica IS-A Cliente

PessoaJuridica IS-A Cliente[/quote]

Resolvido com a sua sugestão, ficou assim:

--------- Pessoa
-------------- Cliente
------------------- ClientePessoaFisica
------------------- ClientePessoaJuridica

E o cliente podera ter uma lista de imoveis proprietarios, e uma lista de imoveis alugados.

Obrigado pessoal!