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

Mais procurados

Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
Docker, Inc.
 

Mais procurados (20)

Docker introduction & benefits
Docker introduction & benefitsDocker introduction & benefits
Docker introduction & benefits
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Fully automated kubernetes deployment and management
Fully automated kubernetes deployment and managementFully automated kubernetes deployment and management
Fully automated kubernetes deployment and management
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Collabnix Online Webinar - Demystifying Docker & Kubernetes Networking by Bal...
Collabnix Online Webinar - Demystifying Docker & Kubernetes Networking by Bal...Collabnix Online Webinar - Demystifying Docker & Kubernetes Networking by Bal...
Collabnix Online Webinar - Demystifying Docker & Kubernetes Networking by Bal...
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Linux Programming
Linux ProgrammingLinux Programming
Linux Programming
 
CI / CD ( 지속적인 통합 / 지속적인 전달 ) 발표 자료 다운로드
CI / CD ( 지속적인 통합 / 지속적인 전달 ) 발표 자료 다운로드CI / CD ( 지속적인 통합 / 지속적인 전달 ) 발표 자료 다운로드
CI / CD ( 지속적인 통합 / 지속적인 전달 ) 발표 자료 다운로드
 
Docker swarm
Docker swarmDocker swarm
Docker swarm
 
Docker 101: Introduction to Docker
Docker 101: Introduction to DockerDocker 101: Introduction to Docker
Docker 101: Introduction to Docker
 
What is Docker Architecture | Edureka
What is Docker Architecture | EdurekaWhat is Docker Architecture | Edureka
What is Docker Architecture | Edureka
 
Kubernetes Concepts And Architecture Powerpoint Presentation Slides
Kubernetes Concepts And Architecture Powerpoint Presentation SlidesKubernetes Concepts And Architecture Powerpoint Presentation Slides
Kubernetes Concepts And Architecture Powerpoint Presentation Slides
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech Talk
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech TalkArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech Talk
ArgoCD and Tekton: Match made in Kubernetes heaven | DevNation Tech Talk
 
How to build a Kubernetes networking solution from scratch
How to build a Kubernetes networking solution from scratchHow to build a Kubernetes networking solution from scratch
How to build a Kubernetes networking solution from scratch
 
Introduction to Kubernetes Workshop
Introduction to Kubernetes WorkshopIntroduction to Kubernetes Workshop
Introduction to Kubernetes Workshop
 
Red Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform OverviewRed Hat OpenShift Container Platform Overview
Red Hat OpenShift Container Platform Overview
 

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

01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacao
taniamaciel
 
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
Rui Inácio
 
Banco de Dados Orientado a Objeto
Banco de Dados Orientado a ObjetoBanco de Dados Orientado a Objeto
Banco de Dados Orientado a Objeto
elliando dias
 

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

Pged 03
Pged 03Pged 03
Pged 03
 
Aula1
Aula1Aula1
Aula1
 
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
 

Mais de Inael Rodrigues

Codigo limpo: Nomes Significativos Cap 2
Codigo limpo:  Nomes Significativos Cap 2Codigo limpo:  Nomes Significativos Cap 2
Codigo limpo: Nomes Significativos Cap 2
Inael Rodrigues
 
Código limpo: Comentários
Código limpo:   ComentáriosCódigo limpo:   Comentários
Código limpo: Comentários
Inael 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 3
Inael 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 7
Inael Rodrigues
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android University
Inael 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