Minha Abstração - Pessoa Jurídica, Física, Cliente, Vendedor - terei algum problema?

Saudações Pessoal!

Que problemas poderei ter nesta abstração?

Como poderei instanciar uma pessoa a partir de seu papel?

você pode até instanciar agora vc tem que saber qual o papel da classe pessoa na sua aplicação, e quando vc deve instanciá-la.

geralmente, a classe pessoa é uma classe abstrata, eu não colocaria lá a classe tipo atributo, eu colocaria assim:

    public abstract class Pessoa{}
    public class PessoaFisica extends Pessoa{}
    public class PessoaJuridica extends Pessoa{}

usando herança

Outro exemplo

Conta Corrente e Poupança.

As duas são um exemplo de conta certo?

se eu fosse seguir o seu exemplo eu teria que ter uma classe intermediária. TipoConta. Essa classe faria oq, qual a finalidade dela.

Eu faria assim:


    public abstract class Conta{}//Essa classe eu não precisaria instanciar, eu só colocaria para moldar as outras
    public class ContaCorrente extends Conta{}//Aqui estou "moldando" a classe (na verdade estou herdando todos os atributos e os métodos da classe abstrata Conta
    public class Poupança extends Conta{}//Aqui também estou fazendo a mesma coisa, além de estar herdando os atributos e os métodos, também posso implementar outros atributos e outros métodos nas classes-filha.

Cara, por experiência própria, eu não coloco Pessoa Jurídica e Pessoa Física na mesma hierarquia de classes.
Apesar do nome parecido, o tratamento delas é completamente diferente. As chaves naturais, os tipos de documento, os processos em que se envolvem… é tudo bem diferente, tu acaba fazendo uma herança desnecessária, e que acaba com umas chamadas de método (usando fluent interface) que ficam parecendo um trem, de tão gigantes.
Eu, particularmente, faço isso. Mas cada um na sua.
É só uma dica :wink:
Abraço!

Olá!

Eu tentaria melhorar o seguinte:

  • As classes “Pessoa” e “Empresa”, se entendi corretamente, não são necessárias. “Pessoa” traz os atributos de uma pessoa física, e “Empresa” traz os atributos de uma empresa (dããã :-))… correto? Então por que não colocar esses atributos nas próprias classes PessoaFisica e PessoaJuridica?

  • Feita a alteração acima, a classe TipoJuridico poderia ser renomeada para Pessoa, que é bem mais significativo (PessoaFisica “é uma” pessoa, PessoaJuridica “é uma” pessoa).

  • O Papel não deveria ser um atributo da pessoa. É bem possível que algumas pessoas sejam os 2, vendedores e clientes, e o modelo não suportaria essa situação.

  • Aliás, a classe Papel a meu ver não seria necessária pois Vendedor e Cliente são entidades do negócio totalmente distintas. Não parece haver muito sentido em colocá-las em uma mesma hierarquia.

Além disso, sempre é bom ver a necessidade de ter uma hierarquia para PessoaFisica e PessoaJuridica. Dependendo do negócio, não há nenhum comportamento diferenciado entre eles, o que possibilitaria criar um único tipo “Pessoa” com um campo indicando se é Fisica ou Juridica.
Em outros casos (citado acima), a diferença de tratamento é tão grande que os 2 se tornam entidades totalmente separadas.

mas

Pessoa Jurídica não é uma pessoa

Empresa não é uma pessoa

Pessoa Jurídica é um conceito jurídico

PessoaFísica não é uma pessoa, também é um conceito

não se pode herdar coisas de papéis ou transações

um vendedor pode ser um cliente, se ele trabalhar na empresa e comprar dela

todos dão opinião, mas o que existe aqui no GUJ é sempre, Pessoa Jurídica e Pessoa Física extendendo de Pessoa

rodei o fórum e não encontrei uma abstração que não seja assim,

o que existe no fórum, é só discussão, filosofia

acabando em sempre extender PJ e PF de Pessoa

por favor

postem aí então

uma abstração Pessoa Física, Pessoa Jurídica

com papéis Vendedor, Cliente, Fornecedor, Transportador,

mas sem discussão, “você pode isso”, “você pode aquilo”, e etc.

postem já indicando as FK e PK

Claro que tudo depende do domínio da aplicação em questão, como é tratado no seu negócio especificamente. Mas no sentido comum, pessoa jurídica é uma pessoa sim… Ela pode comprar, vender, contratar, ser contratada, processar judicialmente, ser processada… só não pode ir no banheiro. Porque isso é uma necessidade física, portanto típica das pessoas físicas :roll:

Mas a discussão não é o mais importante ???

acho isso herança descabida

daqui a pouco, teremos

pessoa tipo especial de computadores

computador tipo especial de sabonetes

na OO

não temos que observar a realidade?

acho importante separar conceitos da realidade

já li muita discussão

preciso ver algo melhor do que eu postei

já mapeado com fk e pk

mas, se eu quiser migrar minhas classes para outra regra de negócio, de uma clínica médica, por ex.

se acompanhar a realidade, não fica mais fácil a migração?

imagina eu ter um sistema de uma clínica médica, onde a clínica é uma pessoa jurídica

e uma pessoa é um ser humano

a clínica, terá rins, coração, dentes, ossos

por favor, posta aí então

um ex. de abstração de Papéis onde uma pessoa pode ser todos os papéis ao mesmo tempo

já com fk e pk

Pesquise Actor-Role Pattern, ele resolve esta situação de forma bem elegante, na minha opinião, e é o que uso quanto existem vários papeis.

[quote=Bruno Reis][quote=gomesrod]
posta aí então
já com fk e pk[/quote]
Puxa, expliquei tão mal assim ? Não dá nem pra tentar imaginar? :frowning:

não quer imaginar pra mim né? rs

o jeito é

Pessoa Jurídica é um tipo especial de Pessoa

vi uma Pessoa Jurídica passando aqui na rua

que coisa linda!

que quadril torneado!

assoviei para ela, ela me disse “não vou te dar meu cnpj”

rsrsrs

:slight_smile:

Agent Role Pattern

http://www.cs.sjsu.edu/faculty/pearce/modules/patterns/analysis/agents.htm