UML - Classes Pessoa (Física e Jurídica), Fornecedor, Usuário, Motorista e Cliente

Galera,

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?

  1. 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?
  2. E Usuário e Motorista? Extenderiam a classe Pessoa?

O que vcs acham? Alguém já passou por isso?

Atenciosamente,

Rogério Araújo

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. :wink:

Eh isso aí. Se alguem quiser dar pontos de vista. :lol: to com pressa agora, depois posso analisar melhor

Minha opinião:

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.

Qualquer coisa retorne!

Olá rgildo,

[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.

  Começe  criando veículo ==> motorista ==> expedição == mercadoria ==>

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 -&gt p [label=‘is’]
c -&gt p [label=‘is’]
m -&gt pf [label=‘is’]
pf -&gt p [label=‘is’]
pj -&gt p [label=‘is’]
f -&gt pj [label=‘is’]

m -&gt v [label=‘has’]
mt -&gt v [label=‘is’]
ca -&gt v [label=‘is’]
va -&gt v [label=‘is’]

t -&gt u [label=‘has’]
t -&gt m [label=‘has’]
t -&gt f [label=‘has’]
t -&gt c [label=‘has’]
[/code]

Voce pode usar o AjaxGraphviz pra ver o diagrama, ou altera-lo, em http://ashitani.jp/gv/ :wink:

Ei, gostei desse Graphviz! Muito legal mesmo! :smiley:

Olá

Ô loco :lol:

CV, muito legal esta pinóia.

[]s
Luca

cv wrote.: [quote] Voce pode usar o AjaxGraphviz pra ver o diagrama[/quote] Muito legal… :stuck_out_tongue:

Estrelinha que eh bom, nada ne? :stuck_out_tongue:

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.

cv wrote.:[quote]Estrelinha que eh bom, nada ne? [/quote]Só se pagar U$$ 50,00 Ok… :roll:

CV, desculpe a ignorância mas qual browser vc usou? (valendo uma estrelhinha)
Tentei aqui com o exfoder 6 e 7 e nada …

Fui na raiz da url que vc postou pra ver alguma dica mas o site é japonês …

No firefox funciona que é uma beleza… :wink:

Valeu!!! Já ajudou …

Cara,

No meu firefox não tá indo, o que tem que ser feito? Só colar a parada do lado esquerdo?

Help!!! :slight_smile:

…e apertar enter em qqer lugar da textarea :wink:

Ou vc tb pode baixar o graphviz, eh um software muito bom, e tb velho de guerra. Tem pra todos os sistemas operacionais e tal.

Coisa de japonês…

hehehe estou resgatando o tópico…

[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.

Essa ideia dos roles tbm achei interessante.

  • duplicado