Saudações Pessoal!
Que problemas poderei ter nesta abstração?
Como poderei instanciar uma pessoa a partir de seu papel?
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
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?
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