Objectos e estrutura de dados
O que são objetos e estrutura de dados? E quando devemos usar um ou o outro.
Esse capítulo estarei esplicando um pouco mais sobre cada um.
Leve em consideração o seguinte exemplo:
public interface Vehicle {
double getFulTankCapacityInGallons();
double getGallonsOfGasoline();
}
E o example abaixo, semelhante, porém sem expor a estrutura de dados do objeto:
public interface Vehicle {
double getPercentFuelRemaining();
}
Dentre os exemplos acima, o segundo é preferível. Porque não queremos expor os detalhes de nossos dados. Sempre prefira por expor seus dados de forma abstrata.
Esses dois exemplos mostram a diferença entre objetos e estrutura de dados. Os objetos usam abstrações para esconder seus dados, e expõem as funções que operam em tais dados.
As estruturas de dados por sua vez, expõem seus dados e não possuem funções significativas.
A Lei de Demeter
Diz o seguinte, um módulo não deve enxergar o interior dos objetos que ele manipula, ou seja, os objetos escondem seus dados e expõem as operações.
Sendo assim, a Lei de Demeter extamente diz o seguinte:
Um método f de uma classe C só deve chamar os métodos de :
C
Um objeto criado por f
Um objeto passado como parâmetro para f
Um objeto dentro de uma variável de instância C
Objetos de transferências de dados
A melhor forma de se criar uma classe respeitando a estrutura de dados é com variáveis públicas e nenhuma função.
Mais comumente conhecido como DTO (Data Transfer Object) , "beans". Onde possuem variáveis privadas manipuladas por métodos de escrita e leitura, exemplo a seguir:
public class Address {
private String street;
private String streetExtra;
private String city;
private String state;
public String getStreet() {
return street;
}
.
.
//Outros getters
.
.
}
Conclusão
Os objetos expões as ações e ocultam os dados. Por outro lado, a estrutura de dados expõe os dados e não possue ações signigicativas.