Uma dúvida me veio quando estou tentando modelar um sistema para uma transportadora.
Modelando, encontrei as seguintes classes: Fornecedor, Usuário do sistema, Motorista e Cliente. Esse cliente pode ser uma Pessoa Física ou Jurídica. O Fornecedor é somente Pessoa Jurídica. Até aqui tudo ok!
Como ficaria modelada o meu Diagrama de Classes?
Eu teria que criar uma classe Pessoa e duas subclasses: PessoaFisica e PessoaJuridica? Se sim, existiria a classe Cliente e Fornecedor já que um Cliente pode ser tanto PessoaFisica quanto PessoaJuridica e um Fornecedor só PessoJuridica?
E Usuário e Motorista? Extenderiam a classe Pessoa?
dando uma olhada rapida, pude perceber que vc pode criar sim duas classes PessoaFisica e PessoaJuridica. Essas duas classes herdariam da classe Cliente e PessoaJuridica herdaria mais ainda de Fornecedor. E Usuário e Motorista, tambem com atributos distintos, extenderiam a classe Pessoa.
Eh isso aí. Se alguem quiser dar pontos de vista. :lol: to com pressa agora, depois posso analisar melhor
Existe uma classe Pessoa, e outras duas classes PessoaFisica e PessoaJuridica, até aqui ok né?!
A classe Cliente extende a classe Pessoa.
A classe Usuario extende a classe PessoaFisica.*
A classe Fornecedor extende a classe PessoaJuridica
A classe Motorista extende a classe PessoaFisica (Nunca vi nenhuma empresa dirigindo um caminhão, HUAHuahUHAUha)
Apartir das informações que voê deu, acredito que isso seja o correto!
Modelagem depende muito do contexto, geralmente você consegue descobrir suas classes básicas, como estas, apartir de um descritivo do sistema entregue pelo Cliente ou mesmo por você.
Isso depende muito de como é o usuário do seu sistema, se for um usuário normal a afirmação “Usuário é uma PessoaFisica” está correta, porém aqui na minha empresa temos casos que algums usuários de sistema são outros sistemas ou mesmo algumas empresas (apartir de um webService) logo colocamos Usuario extendendo Pessoa.
[quote]estou tentando modelar um sistema para uma transportadora. [/quote]Se é para transportadora então deve transportar algo e se existe motorista então ele deve dirigir algo como:
-Caminhão.
-Van.
-Veículo leve ou pesado
-etc.
Um rabisco do que eu imagino ser o dominio de uma transportadora pelo que eu entendi da discussao ate agora, usando Graphviz:
[code]u [label=‘Usuario’]
p [label=‘Pessoa’]
pf [label=‘Fisica’]
pj [label=‘Juridica’]
f [label=‘Fornecedor’]
c [label=‘Cliente’]
m [label=‘Motorista’]
v [label=‘Veiculo’]
ca [label=‘Caminhao’]
va [label=‘Van’]
mt [label=‘Motocicleta’]
t [label=‘Transporte’]
u -> p [label=‘is’]
c -> p [label=‘is’]
m -> pf [label=‘is’]
pf -> p [label=‘is’]
pj -> p [label=‘is’]
f -> pj [label=‘is’]
m -> v [label=‘has’]
mt -> v [label=‘is’]
ca -> v [label=‘is’]
va -> v [label=‘is’]
t -> u [label=‘has’]
t -> m [label=‘has’]
t -> f [label=‘has’]
t -> c [label=‘has’]
[/code]
Voce pode usar o AjaxGraphviz pra ver o diagrama, ou altera-lo, em http://ashitani.jp/gv/
[quote=Edufa]Eu uso uma outra abordagem, num sistema onde haviam vários papeis.
Pessoa (abstrata), PessoaFisica e PessoaJuridica.
Role (interface)
Pessoa possui uma lista de roles q ela pode assumir
Motorista, Colaborador, Cliente, Fornecedor, Usuário, etc (todos implementam a interface Role) e cada um teria seus atributos particulares.
Não sei se com essa abordagem acaba complicando mais, mas funcionou bem.[/quote]
Cara… teria como você me passar este diagrama de classes pra eu ver como você implementou…
sou novato em OO e estou MTO perdido com o diagrama de classes para pessoa hehe…
eu não consigo entender porque pessoafisica e juridica são especializações de Pessoa… elas não tem atributos em comum(nome não é o mesmo… um é nome… e outro é nomeFantasia… e pelo que li… pode-se colocar atributos com nome iguais apenas quando representam a MESMA coisa…)
bom… se puder me enviar esse seu por e-mail(o que me ajudaria MTO!!HEHE)… meu mail é raelbgl@yahoo.com.br
Eu implementei como pattern state. A classe pessoa tem um tipo pode ser do fisica ou juridica. Nos casos em q elas variam pouco (cliente de loja, prestador de servico) ele funciona bem.
Em casos mais complexos, em q vc precise de muitas informacoes especificas de pessoa fisica ou juridica, eu acho q elas nao deveriam ter uma interface ou classe abstrata comum.