Olá pessoal!
Estive o dia todo lendo sobre herança e interfaces, inclusive das apostilas da Caelum. Decidi seguir o caminho do uso de Interfaces ao invés de Herança.
O meu projeto é de uma Imobiliária, poderia fazer com Herança ou com Interfaces, conforme a figura:

O que eu quero é deixar a aplicação o mais desacoplada possível, já que a a mesma poderá crescer, existe sempre a mudança de requisitos e quando mais solto estiver o código, melhor.
A minha dúvida é se ao usar Interfaces como mostrado na figura eu estaria aplicando Interfaces onde não seria necessário (over-engineering) ou se a minha decisão é a mais correta, especificamente para o caso mostrado na figura.
Abraço!!!
se for usar ferramenta de persistencia, como hiberante por exemplo … vai acabar se vendo sem muita possibilidade, e mesmo que use a Interface, vai ter que usar herança para usar em outras entidades…
=/
Essa tua Interface faz o que? Que métodos ela vai conter. Você poderia criar uma classe abstrata, e depois você iria herdar todos os atributos ou métodos da classe abstrata.
Olá pessoal!
A minha idéia é criar uma interface e duas classes conforme o exemplo para funcionário:
public interface Funcionario {
public Long getIdFuncionario();
public String getNome();
public String getLogin();
public String getSenha();
public String getStatus();
}
public class Gerente implements Funcionario {
private Long idFuncionario;
private String nome;
private String login;
private String senha;
private String status;
public String getIdFuncionario() {
return idFuncionario;
}
public String getNome() {
return nome;
}
public String getLogin() {
return login;
}
public String getSenha() {
return senha;
}
public String getStatus() {
return status;
}
}
A classe Vendedor:
public class Vendedor implements Funcionario {
private Long idVendedor;
private String nome;
private String login;
private String senha;
private String status;
public String getIdVendedor() {
return idVendedor;
}
public String getNome() {
return nome;
}
public String getLogin() {
return login;
}
public String getSenha() {
return senha;
}
public String getStatus() {
return status;
}
}
Como o objetivo é separar o que cada um poderá fazer no sistema enquanto estiver logado, achei que usando Interfaces poderia controlar melhor isso, quero evitar a amarração da Herança.
Lavieri, eu uso VRaptor3 + Hibernate, não poderei implementar desta forma com os frameworks que estou usando? =/
Abraço!
na verdade nesse caso o que vc precisa é o coneito de composição over herença… ou seja
class PessoaFisica
Funcionario tem uma PessoaFisica, logo
class Funcionario {
PessoaFisica pessoaFisica;
FuncionarioTipo tipo;
//outor campos
}
enum FuncionaoTipo {
GERENTE,OUTROTIPO,ETC;
}
Aonde a interface é boa ? a interface é boa pra algo como Usuario, um usuário é uma coisa comum a varios sistemas então vc pode criar uma interface para isso…
interface User {
String getLogin();
String getSenha(); //normalmente isso retorna uma senha criptografada
boolean checkSenha(String senha); //normalmente aqui vc recebe uma senha descriptografada para checar contra a sua senha.
}
pq uma interface usuario ? pq vc pode usar em esquemas de login, em em varias outras partes, e assim não precisa escrever para aplicativos diferentes e pode reaproveitar… ai a ideia é legal de usar interface…
class Usuario implements User {
private PessoaFisica pessoaFisica;
//outros campos
}
por ai vai…
Fiz o seguinte, criei uma classe interface User, uma classe Cliente que implementa User e dentro da classe Cliente fiz a composição, conforme os códigos abaixo:
Classe de interface User:
public interface User {
public String getLogin();
public String getNome();
public String getSenha();
public String getStatus();
}
Classe Cliente que implementa User:
public class Cliente implements User {
ClientePF clientePF = new ClientePF();
ClientePJ clientePj = new ClientePJ();
private String nome;
private String login;
private String senha;
private String status;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getSenha() {
return senha;
}
public ClientePF getClientePF() {
return clientePF;
}
public void setClientePF(ClientePF clientePF) {
this.clientePF = clientePF;
}
public ClientePJ getClientePj() {
return clientePj;
}
public void setClientePj(ClientePJ clientePj) {
this.clientePj = clientePj;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public void setSenha(String senha) {
this.senha = senha;
}
}
Classe ClientePF:
public class ClientePF {
private Long idClientePF;
private String cpf;
private String nome;
private Date dataNasc;
private String telefone;
private String celular;
private String email;
private String eCivil;
private String profissao;
private String endereco;
private String bairro;
private String cidade;
private String estado;
private String pais;
private String cep;
public Long getIdClientePF() {
return idClientePF;
}
public void setIdClientePF(Long idClientePF) {
this.idClientePF = idClientePF;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Date getDataNasc() {
return dataNasc;
}
public void setDataNasc(Date dataNasc) {
this.dataNasc = dataNasc;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public String getCelular() {
return celular;
}
public void setCelular(String celular) {
this.celular = celular;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String geteCivil() {
return eCivil;
}
public void seteCivil(String eCivil) {
this.eCivil = eCivil;
}
public String getProfissao() {
return profissao;
}
public void setProfissao(String profissao) {
this.profissao = profissao;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getPais() {
return pais;
}
public void setPais(String pais) {
this.pais = pais;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
}
É isso??
Abraço!