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

Webinar Pré Agile Week | Agile Mindset Workshop Pocket
Webinar Pré Agile Week | Agile Mindset Workshop PocketWebinar Pré Agile Week | Agile Mindset Workshop Pocket
Webinar Pré Agile Week | Agile Mindset Workshop Pocket
Coletivo AÇÃO | Criando ambientes colaborativos e criativos
 
マイクロサービスアーキテクチャ とは何か
マイクロサービスアーキテクチャとは何かマイクロサービスアーキテクチャとは何か
マイクロサービスアーキテクチャ とは何か
Yusuke Suzuki
 

Mais procurados (20)

これからの KYC と Identity on Blockchain の動向
これからの KYC と Identity on Blockchain の動向これからの KYC と Identity on Blockchain の動向
これからの KYC と Identity on Blockchain の動向
 
三大WebサーバーのSSL設定ベストプラクティス
三大WebサーバーのSSL設定ベストプラクティス三大WebサーバーのSSL設定ベストプラクティス
三大WebサーバーのSSL設定ベストプラクティス
 
【ウェブセミナー】マネージドな 100% OSS アナリティクス プラットフォーム HDInsight の最新事情
【ウェブセミナー】マネージドな 100% OSS アナリティクス プラットフォーム HDInsight の最新事情【ウェブセミナー】マネージドな 100% OSS アナリティクス プラットフォーム HDInsight の最新事情
【ウェブセミナー】マネージドな 100% OSS アナリティクス プラットフォーム HDInsight の最新事情
 
【JEUG】 オープンSIEMの世界へ
【JEUG】 オープンSIEMの世界へ【JEUG】 オープンSIEMの世界へ
【JEUG】 オープンSIEMの世界へ
 
SPAと覚悟
SPAと覚悟SPAと覚悟
SPAと覚悟
 
Webinar Pré Agile Week | Agile Mindset Workshop Pocket
Webinar Pré Agile Week | Agile Mindset Workshop PocketWebinar Pré Agile Week | Agile Mindset Workshop Pocket
Webinar Pré Agile Week | Agile Mindset Workshop Pocket
 
UX - Entregaveis
UX - EntregaveisUX - Entregaveis
UX - Entregaveis
 
20201023 Builders Box 2nd Enterprise Architect
20201023 Builders Box 2nd Enterprise Architect20201023 Builders Box 2nd Enterprise Architect
20201023 Builders Box 2nd Enterprise Architect
 
毎日が越境だ!
毎日が越境だ!毎日が越境だ!
毎日が越境だ!
 
アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成
 
Lições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidadeLições aprendidas em 10 anos de agilidade
Lições aprendidas em 10 anos de agilidade
 
Material Algoritmos e Estruturas de Dados - 1º Bimestre
Material Algoritmos e Estruturas de Dados - 1º BimestreMaterial Algoritmos e Estruturas de Dados - 1º Bimestre
Material Algoritmos e Estruturas de Dados - 1º Bimestre
 
マイクロサービスアーキテクチャ とは何か
マイクロサービスアーキテクチャとは何かマイクロサービスアーキテクチャとは何か
マイクロサービスアーキテクチャ とは何か
 
はじめてのふりかえり
はじめてのふりかえりはじめてのふりかえり
はじめてのふりかえり
 
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
ソフトウェアパターン概論およびパターンを活用したアーキテクチャ設計
 
AWS サーバーレス開発用ローカルシミュレータを作った話
AWS サーバーレス開発用ローカルシミュレータを作った話AWS サーバーレス開発用ローカルシミュレータを作った話
AWS サーバーレス開発用ローカルシミュレータを作った話
 
TCC Inteligência Artificial
TCC Inteligência ArtificialTCC Inteligência Artificial
TCC Inteligência Artificial
 
Inovação & Criatividade
Inovação & CriatividadeInovação & Criatividade
Inovação & Criatividade
 
AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介AI-first Code Editor 「Cursor」の機能紹介
AI-first Code Editor 「Cursor」の機能紹介
 
【TECH×GAME COLLEGE#28】形から入ったドメイン駆動設計によるゲーム開発の光と闇
【TECH×GAME COLLEGE#28】形から入ったドメイン駆動設計によるゲーム開発の光と闇【TECH×GAME COLLEGE#28】形から入ったドメイン駆動設計によるゲーム開発の光と闇
【TECH×GAME COLLEGE#28】形から入ったドメイン駆動設計によるゲーム開発の光と闇
 

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