Código Limpo
Capitulo 6

Objetos e Estrutura de Dados
                               Objetos e Bruno Maia
                                       Carlos Alberto
                                        José Leonardo
                                       Maxwel Otsuka
Abstração de Dados
● 6-2: Os métodos exigem regra de acesso
● 6-1: Obriga a ser manipulada independentemente
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.
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
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".
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();
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.
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)
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.
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
FIM

Código Limpo: Objetos e Estruturas de Dados cap6

  • 1.
    Código Limpo Capitulo 6 Objetose Estrutura de Dados Objetos e Bruno Maia Carlos Alberto José Leonardo Maxwel Otsuka
  • 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 ● Objetosusam 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 deDemeter 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 estruturasmetade 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.
  • 9.
    Estruturas Ocultas ● Criao 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ênciade 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
  • 12.