SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
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

Mais conteúdo relacionado

Semelhante a Código Limpo: Objetos e Estruturas de Dados cap6

Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIMario Guedes
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosIES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosRamon Mayor Martins
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacaotaniamaciel
 
Projeto de Sistemas - Aula004
Projeto de Sistemas - Aula004Projeto de Sistemas - Aula004
Projeto de Sistemas - Aula004Cláudio Amaral
 
01 banco de dados-basico
01 banco de dados-basico01 banco de dados-basico
01 banco de dados-basicoAmadeo Santos
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteirosRobson Eduardo
 
LDP mod 14 - Acesso a bases de dados
LDP   mod 14 - Acesso a bases de dadosLDP   mod 14 - Acesso a bases de dados
LDP mod 14 - Acesso a bases de dadosRui Inácio
 
Banco de Dados Orientado a Objeto
Banco de Dados Orientado a ObjetoBanco de Dados Orientado a Objeto
Banco de Dados Orientado a Objetoelliando dias
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosUFT
 

Semelhante a Código Limpo: Objetos e Estruturas de Dados cap6 (20)

Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
 
Classes e Estrutura de Dados
Classes e Estrutura de DadosClasses e Estrutura de Dados
Classes e Estrutura de Dados
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Slide da aula 04
Slide da aula 04Slide da aula 04
Slide da aula 04
 
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosIES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacao
 
JustJava 2004: JAXB
JustJava 2004: JAXBJustJava 2004: JAXB
JustJava 2004: JAXB
 
Projeto de Sistemas - Aula004
Projeto de Sistemas - Aula004Projeto de Sistemas - Aula004
Projeto de Sistemas - Aula004
 
01 banco de dados-basico
01 banco de dados-basico01 banco de dados-basico
01 banco de dados-basico
 
Lista encadeada de inteiros
Lista encadeada de inteirosLista encadeada de inteiros
Lista encadeada de inteiros
 
2006 - ADONET.ppt
2006 - ADONET.ppt2006 - ADONET.ppt
2006 - ADONET.ppt
 
Treinamento DDD .Net
Treinamento DDD .NetTreinamento DDD .Net
Treinamento DDD .Net
 
LDP mod 14 - Acesso a bases de dados
LDP   mod 14 - Acesso a bases de dadosLDP   mod 14 - Acesso a bases de dados
LDP mod 14 - Acesso a bases de dados
 
Banco de Dados Orientado a Objeto
Banco de Dados Orientado a ObjetoBanco de Dados Orientado a Objeto
Banco de Dados Orientado a Objeto
 
03 poo
03 poo03 poo
03 poo
 
Dao
DaoDao
Dao
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aplicativo aula02
Aplicativo aula02Aplicativo aula02
Aplicativo aula02
 
Ado
AdoAdo
Ado
 

Mais de Inael Rodrigues

Artigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemArtigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemInael Rodrigues
 
Arquiteturas de sistemas reais
Arquiteturas de sistemas reaisArquiteturas de sistemas reais
Arquiteturas de sistemas reaisInael Rodrigues
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2Inael Rodrigues
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: ComentáriosInael Rodrigues
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3Inael Rodrigues
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Inael Rodrigues
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Inael Rodrigues
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: ClassesInael Rodrigues
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiInael Rodrigues
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android Inael Rodrigues
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityInael Rodrigues
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilInael Rodrigues
 
Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Inael Rodrigues
 
Android bootcamp 06-01-2012 Part 1
Android bootcamp  06-01-2012 Part 1Android bootcamp  06-01-2012 Part 1
Android bootcamp 06-01-2012 Part 1Inael Rodrigues
 

Mais de Inael Rodrigues (18)

Artigo Monitoramento de Pastagem
Artigo Monitoramento de PastagemArtigo Monitoramento de Pastagem
Artigo Monitoramento de Pastagem
 
Map Reduce
Map ReduceMap Reduce
Map Reduce
 
Arquiteturas de sistemas reais
Arquiteturas de sistemas reaisArquiteturas de sistemas reais
Arquiteturas de sistemas reais
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2
 
Código limpo: Limites
Código limpo: LimitesCódigo limpo: Limites
Código limpo: Limites
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: Comentários
 
Código limpo: Funções Capítulo 3
Código limpo: Funções  Capítulo 3Código limpo: Funções  Capítulo 3
Código limpo: Funções Capítulo 3
 
Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09 Código Limpo: Testes de Unidade Capítulo 09
Código Limpo: Testes de Unidade Capítulo 09
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7
 
Livro Código limpo: Classes
Livro Código limpo:  ClassesLivro Código limpo:  Classes
Livro Código limpo: Classes
 
Paa algoritmos gulosos
Paa  algoritmos gulososPaa  algoritmos gulosos
Paa algoritmos gulosos
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 
TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android TDC 2012: Trilha - Android University Back end Android
TDC 2012: Trilha - Android University Back end Android
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android University
 
Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento Ágil
 
Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2Android bootcamp 06-01-2012 Part 2
Android bootcamp 06-01-2012 Part 2
 
Android bootcamp 06-01-2012 Part 1
Android bootcamp  06-01-2012 Part 1Android bootcamp  06-01-2012 Part 1
Android bootcamp 06-01-2012 Part 1
 

Código Limpo: Objetos e Estruturas de Dados cap6

  • 1. Código Limpo Capitulo 6 Objetos e 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 ● 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
  • 12. FIM