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:


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.