Isso é um caso de herança?

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;
}

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.

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.

2 curtidas

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?

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.

1 curtida

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

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

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.