Ruttmann:
No meu caso, tenho que simular um Computador.
O meu problema é esse: Tenho uma classe PortaParalela. Na PortaParalela posso acoplar tanto um Leitor(CD ou DVD por exemplo) como um DispositivoArmazenamentoParalelo(um HD por exemplo).
Por isso veio a idéia de criar uma interface que une Leitor e DispositivoArmazenamento, e fazer com que PortaParalela receba qualquer dispositivo que implemente tal interface.
Mas existe algum método que você queira usar, como “salvar(Arquivo arquivo)”, “ler(Arquivo arquivo)”, “remover(Arquivo arquivo)”?
Dê uma olhadinha na Lei de Demeter, acho que ela é a saída que você procura.
Por exemplo, temos a classe Pessoa e a classe Endereço:
class Pessoa {
private String nome;
private Endereco endereco;
// getters e setters
}
class Endereco {
private String rua;
private int numero;
private String cep;
// getters e setters
}
Então para acessar o cep de uma pessoa, você precisa fazer assim:
pessoa.getEndereco().getCep();
Isso gera um custo elevado de manutenção. Vamos supor que vamos criar a classe CEP e dentro dela o getCepFormatado() iria formatar o cep para nós… Teríamos que alterar todos os lugares que fazem o getCep() para incluir um .getCepFormatado()…
Portanto, seria menos custoso manter um código que fizesse assim:
Pois assim, só precisaria mexer na classe Pessoa… Para que isso aconteça, as nossas classes precisam ficar assim:
class Pessoa {
private String nome;
private Endereco endereco;
// Construtor para setar
public String getNome() {
return nome;
}
public String getCep() {
return endereco.getCep();
}
}
class Endereco {
private String rua;
private int numero;
private String cep;
// getters e setters
}
E depois de arrumado, ficaria assim:
class Pessoa {
private String nome;
private Endereco endereco;
// Construtor para setar
public String getNome() {
return nome;
}
public String getCep() {
return endereco.getCepFormatado();
}
}
class Endereco {
private String rua;
private int numero;
private CEP cep;
// Construtor para setar
public String getCepFormatado() {
return cep.getCepFormatado();
}
// outros getters
}
class CEP {
private primeirosDigitos;
private ultimosDigitos;
// Construtor para setar
public String getCepFormatado() {
return primeirosDigitos + "-" + ultimosDigitos;
}
}