Código Limpo: Objetos e Estruturas de Dados cap6

12

Click here to load reader

Transcript of Código Limpo: Objetos e Estruturas de Dados cap6

Page 1: Código Limpo: Objetos e Estruturas de Dados cap6

Código Limpo Capitulo 6

Objetos e Estrutura de DadosObjetos e Bruno Maia

Carlos AlbertoJosé Leonardo

Maxwel Otsuka

Page 2: Código Limpo: Objetos e Estruturas de Dados cap6

Abstração de Dados● 6-2: Os métodos exigem regra de acesso● 6-1: Obriga a ser manipulada independentemente

Page 3: Código Limpo: Objetos e Estruturas de Dados cap6

Abstração de Dados● Manipulação independente expõe as variáveis● Estaria exposta mesmo com métodos de leitura e

escrita● Ocultar a implementação significa inserir

métodos para chamadas de variáveis● Deve-se expor interfaces abstratas que não

demonstrem a implementação.

Page 4: Código Limpo: Objetos e Estruturas de Dados cap6

Anti-simetria data/objeto● Objetos usam abstrações para esconder seus

dados e expõe as funçoes que operam seus dados.● Estruturas de dados expõe seus dados.● O código procedural facilita a adição de novas

funções sem precisar alterar TAD existentes● Código OO facilita a adição de novas classes sem

alterar funções existentes

Page 5: Código Limpo: Objetos e Estruturas de Dados cap6

A Lei de DemeterA Lei de Demeter é uma heurística que diz: "um módulo não deve enxergar o interior dos objetos que ele manipula". Ou seja, um método f de uma classe C só deve chamar os métodos de:● C;● Um objeto criado por f;● Objeto passado como parâmetro para f;● Um objeto dentro de uma instância da variável f;

"Fale apenas com conhecidos, não com estranhos".

Page 6: Código Limpo: Objetos e Estruturas de Dados cap6

Carrinhos de Trem● final String outputDir = ctxt.getOptions().getScratchDir().

getAbsolutePath();

● Esse tipo de código tem esse nome pois se parece com com um monte de carrinhos de trem acoplados. Esse tipo de cadeias de chamadas são consideradas descuidadas e devem ser evitadas. Na maioria das vezes é melhor dividi-las assim:

■ Options opts = ctxt.getOptions();■ File scratchDir = opts.getScratchDir();■ final String outputDir = scratchDir.getAbsolutePath();

Page 7: Código Limpo: Objetos e Estruturas de Dados cap6

Híbridos● São estruturas metade objetos metade estrutura de

dados. Elas tornam públicas as variáveis privadas, incitando outras funções externas a usarem tais variáveis de forma como um programa procedimental usaria uma estrutura de dados.

● Eles dificultam tanto a adição de novas funções como de novas estruturas de dados.

● Evite cria-los.

Page 8: Código Limpo: Objetos e Estruturas de Dados cap6
Page 9: Código Limpo: Objetos e Estruturas de Dados cap6

Estruturas Ocultas● Cria o arquivo de rascunho de um determinado

nome (obtido através do caminho absoluto do diretório de rascunho)

● A estrutura interna é escondida, evitando que funções violem a Lei de Demeter ao navegar por objetos "alheios" (que não deveria enxergar)

Page 10: Código Limpo: Objetos e Estruturas de Dados cap6

Objetos de Transferência de Dados

● Os Objetos de Transferência de dados são estruturas muito úteis, especialmente para se comunicar com banco de dados ou analisar sintaticamente mensagens provenientes de sockets e assim por diante.

● Eles costumam se tornar os primeiros numa série de estágios de tradução que convertem dados brutos de um banco de dados no código do aplicativo.

Page 11: Código Limpo: Objetos e Estruturas de Dados cap6

O Active Record● Os Actives Records são formas especiais de

Objetos de Transferência de Dados.

● Eles são estruturas de dados com variáveis públicas , mas eles tipicamente possuem métodos de navegação como save(), find(), insert() ...

● Esses Actives Records são traduções diretas das tabelas de banco de dados ou de outras fontes de dados

Page 12: Código Limpo: Objetos e Estruturas de Dados cap6

FIM