Diagrama de classes - problema de referência  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
RenatoJP
Smalltalk

Membro desde: 02/09/2010 01:04:06
Mensagens: 3
Offline

Galera, estou fazendo um projeto e estou com uma dúvida no diagrama de classes, o problema aqui é na classe pessoa, onde eu tenho um cliente fisico e juridico e um fornecedor físico e jurídico também, e o cliente pode ser fornecedor e vice-versa, daí fica minha dúvida, como posso melhorar esse diagrama e corrigir os problemas de referências que os professores dizem ter mas ninguém dá uma solução, obrigado.

asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

Me parece que Cliente e Fornecedor deveriam estender de Pessoa Jurídica, não de Pessoa. E Funcionário deveria estender Pessoa Física, não Pessoa. Não sei dizer se é esse o problema que seus professores dizem ou se tem mais alguma coisa, mas esse seria um começo.

[]´s

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

fantomas
GUJ Master
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1534
Localização: Terra (maior parte do tempo)
Offline

Bem vindo ao forum Renato!

Eis aqui meu chute!

O "problema" relacionado a classe Pessoa é causado pelo uso da herança. Pessoa juridica, por exemplo, não tem (a principio) telefone celular; quando vc utiliza herança a estrutura da superclasse fica disponivel para a classe, logo, neste caso (pessoa juridica) herança pode não ser a melhor saida. O objeto pessoa juridica ficará com uma estrutura de dados para telefone celular sendo que ele não precisa deste atributo.

A saída indicada é o uso da agregação. Ao invés da classe Pessoa Fisica herdar a estrutura da classe Pessoa, ela (classe Pessoa Fisica) deverá agregar a classe Pessoa.

Inicialmente Pessoa Juridica, Pessoa Fisica, Cliente, Funcionario pode parecer um TIPO DE PESSOA nos levando a pensar que utilizar herança é a melhor opção. Mas na realidade Pessoa Fisica, Cliente, Funcionario e etc... são PAPEIS desempenhados pela pessoa dentro do domino por isso que herança não se encaixa muito bem como solução.

flws




fantomas
GUJ Master
[Avatar]

Membro desde: 24/04/2008 16:10:55
Mensagens: 1534
Localização: Terra (maior parte do tempo)
Offline

Depois de acertar a questão da herança x agregação é necessário fazer uma revisão nos atributos / relacionamentos das classes. Me parece que dá para melhorar um pouco mais também.

flws
RenatoJP
Smalltalk

Membro desde: 02/09/2010 01:04:06
Mensagens: 3
Offline

Aew galera, olha eu aqui novamente, mexi novamente no diagrama, adicionei uma classe papel pois uma pessoa pode ter mais de um no sistema e também adicionei uma classe de entrada e saída para fins de consulta/relatório, porém conversei com meu professor e ele disse que ao montar o banco, utilizar uma tabela para pessoa (pessoa, pessoa física e jurídica)[img], acho que fica meio incoerente, mas bom ele pediu pra pesquisar sobre problemas de herança múltipla, se algué puder ajudar aí agradeço.

RenatoJP
Smalltalk

Membro desde: 02/09/2010 01:04:06
Mensagens: 3
Offline

Guevara
GUJ Master
[Avatar]

Membro desde: 24/02/2009 17:56:09
Mensagens: 1023
Offline

Não rola fazer uma composição?



Aí colocaria cpf, cnpj e td que for relativo a pessoa na classe pessoa e o código ficaria assim:


O mesmo seria pra Funcionario e Fornecedor
Poderia criar uma classe Endereco, nela vc colocaria logradouro, numero, complemento, bairro, cidade, estado, cep e pais, e relacionaria com Funcionario, Cliente e Fornecedor, ficando uma relação @OneToOne:


Abraço!

This message was edited 1 time. Last update was at 24/10/2010 11:33:59




Analista de Sistemas e desenvolvedor WEB Java e Python
http://twitter.com/eguevara2012
[WWW]
KaosBr
Java Ninja
[Avatar]

Membro desde: 26/05/2010 18:06:58
Mensagens: 255
Localização: São Carlos
Offline

asaudate wrote:Me parece que Cliente e Fornecedor deveriam estender de Pessoa Jurídica, não de Pessoa. E Funcionário deveria estender Pessoa Física, não Pessoa. Não sei dizer se é esse o problema que seus professores dizem ou se tem mais alguma coisa, mas esse seria um começo.

[]´s


Boa noite,


asaudate, tenho um modelo muito parecido, com o adotado pelo nosso amigo RenatoJP. A razão para essa estrutura, reside em que, tanto "Pessoa Fisica" quanto "Pessoa Juridica" podem ser, consumidor ou fornecedor.


Exemplos:

Como pessoa fisica, trabalho com manutenção e configuração, de servidor linux. Durante a execução, dessas tarefas, legalmente sou um fornecedor, de serviços. E a pessoa juridica, o consumidor, de minha mão de obra.

Uma pessoa juridica, me vende, cabo e conectores. Neste momento eu, como pessoa fisica, sou consumidor da loja. E a pessoa juridica, fornecedor, de componentes.


O que define, a condição de cliente ou fornecedor, está na posição ocupada, na relação comercial.


Nota: Perdõem a intromissão, meu proposito é somar, ao topico.


[]s

This message was edited 1 time. Last update was at 25/10/2010 18:28:48


Anderson Fios

Técnico em Informática

http://afconsultoriaeservicos.blogspot.com/
asaudate
GUJ Master
[Avatar]

Membro desde: 01/09/2007 19:31:41
Mensagens: 1794
Localização: São Paulo
Offline

KaosBr wrote:
asaudate wrote:Me parece que Cliente e Fornecedor deveriam estender de Pessoa Jurídica, não de Pessoa. E Funcionário deveria estender Pessoa Física, não Pessoa. Não sei dizer se é esse o problema que seus professores dizem ou se tem mais alguma coisa, mas esse seria um começo.

[]´s


Boa noite,


asaudate, tenho um modelo muito parecido, com o adotado pelo nosso amigo RenatoJP. A razão para essa estrutura, reside em que, tanto "Pessoa Fisica" quanto "Pessoa Juridica" podem ser, consumidor ou fornecedor.


Exemplos:

Como pessoa fisica, trabalho com manutenção e configuração, de servidor linux. Durante a execução, dessas tarefas, legalmente sou um fornecedor, de serviços. E a pessoa juridica, o consumidor, de minha mão de obra.

Uma pessoa juridica, me vende, cabo e conectores. Neste momento eu, como pessoa fisica, sou consumidor da loja. E a pessoa juridica, fornecedor, de componentes.


O que define, a condição de cliente ou fornecedor, está na posição ocupada, na relação comercial.


Nota: Perdõem a intromissão, meu proposito é somar, ao topico.


[]s


Oi, KaosBR! Interessante a sua colocação, ficou mais claro o modelo do amigo. No entanto, passo a concordar com o Guevara, que composição, nesse caso, seria mais elegante.

[]´s!

Alexandre Saudate
__________________________

Do not try to bend the spoon - that's impossible. Instead, only try to realize the truth: there is no spoon.

Série quickstart: Spring+Spring Security+Jersey (REST) +Hibernate (JPA) -> https://github.com/alesaudate/kickstart-springjerseyhibernate

Evite usar Axis2!!! Leia aqui para mais detalhes!

@alesaudate
Quer ler um blog especializado em web services e SOA?

KaosBr
Java Ninja
[Avatar]

Membro desde: 26/05/2010 18:06:58
Mensagens: 255
Localização: São Carlos
Offline

Boa tarde,



asaudate, concordo com a agregassão proposta, pelo Guevara, é bem vinda

RenatoJP , você tem, o atributo: ramoAtividade; Repetido em pessoa, fisica e juridica. Na sua solução, esse atributo não pode ser tranferido para, Pessoa tornando esta classe, mais coesa e removendo a duplicidade?


[]s

This message was edited 2 times. Last update was at 27/10/2010 13:43:18


Anderson Fios

Técnico em Informática

http://afconsultoriaeservicos.blogspot.com/
RafaelViana
GUJ Master

Membro desde: 23/03/2008 18:56:02
Mensagens: 1257
Localização: Venâncio Aires/RS
Offline

Eu modelaria da seguinte maneira:



P.S: O problema é que a interface complica bastante para modelar para o banco de dados. (Ainda estou procurando outras alternativas).

Rafael Rodrigues Viana
Estudando Java e Flex
Blog: http://www.cauirs.com.br/rafael/

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
[Email] [MSN]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team