Isso é um caso de herança?

7 respostas
diagramajavaherança
Henrique_Santos2

Tenho uma classe Pedido, e nesse pedido vai ter um Cliente e um Funcionario vinculados, os atributos de Cliente e Funcionario são iguais, com exceção que Funcionario possui ‘login’ e ‘senha’, e na classe Endereco eu colocaria 2 composições(Cliente cliente, Funcionario func) ? pois funcionario tem um endereco e cliente tbm tem um endereco…e o certo seria um endereço ter um cliente ou um funcionario.

(EDIÇÃO)
Assim se encaixaria? fiz um enum de perfis pra controlar com o Spring Security

public class Usuario{
   private Long id;
   private String username;
   private String senha;
   private Set<Perfil> perfis;
}

public enum Perfil{
ADMIN, GARCOM, CLIENTE
}

public Pedido {
   private Usuario funcionario;
   private Usuario cliente;
}

7 Respostas

javaflex

Não. Cliente e Funcionario são entidades com histórias totalmente independentes. No mínimo ficariam em módulos bem separados, ou como ocorre na maioria das empresas, em sistemas separados, sob gestões diferentes. Não acople as coisas só porque a estrutura de dados tem algo em comum.

staroski

A resposta já está no questionamento: Funcionario tem um atributo do tipo Endereco e Cliente também tem um atributo do tipo Endereco.

Não vejo necessidade de usar herança, mas se quiser realmente utilizar, crie uma classe abstrata Pessoa, com os atributos comuns para ambos, como por exemplo o endereco.
Cliente estende Pessoa.
Funcionario também estende Pessoa e define ainda os atributos login e senha.

Henrique_Santos2

Ai como eu faria na classe Endereco? adicionaria 2 composições? Endereço tem um cliente e um endereço, daí um desses seria null?

javaflex

Endereço não tem um Cliente.

Tudo depende dos requisitos do negócio. Se Cliente pode ter um ou mais endereços. Se Funcionário tem um ou mais endereços.

daí um desses seria null

Não entendi, isso não parece fazer sentido.

Dragoon

Agora alguém disse tudo, qual é a sua regra de negócio, qual é o seu contexto, o que você deseja implementar?

Henrique_Santos2

um Pedido teria uma Mesa, Funcionario e Cliente vinculados, o cliente seria opcional, caso o Cliente queria se identificar no pedido…

javaflex

Se o requisito for: um Cliente pode ter um ou mais endereços, entao crie ClienteEndereco ou EnderecoCliente, como quiser, mas sem misturar com Funcionario.

O mesmo para Funcionário (FuncionarioEndereco), se realmente precisar de vários endereços, caso contrário coloca o endereço direto em Funcionario.

Criado 17 de janeiro de 2019
Ultima resposta 17 de jan. de 2019
Respostas 7
Participantes 4