O capítulo discute abstração de dados, a Lei de Demeter e anti-simetria entre objetos e estruturas de dados. Objetos escondem dados e expõem funções, enquanto estruturas de dados expõem dados. Híbridos dificultam evolução. Objetos de Transferência de Dados e Active Records mapeiam bancos de dados para código.
2. Abstração de Dados
● 6-2: Os métodos exigem regra de acesso
● 6-1: Obriga a ser manipulada independentemente
3. 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.
4. 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
5. A Lei de Demeter
A 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".
6. 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();
7. 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.
8.
9. 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)
10. 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.
11. 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