http://www.flickr.com/photos/tambako/4112834255/sizes/l/in/set-72157600220682086/




  Padrões de
   Implementação
       ...
Valores e Princípios




http://www.flickr.com/photos/tambako/3103490954/sizes/l/
quarta-feira, 6 de janeiro de 2010
Valores são conceitos
                                     que guiam nossas escolhas.




                                ...
http://www.flickr.com/photos/sgw/2857641872/sizes/l/




  Simplicidade
quarta-feira, 6 de janeiro de 2010
http://www.flickr.com/photos/khalid-almasoud/474399662/sizes/o/




   Flexibilidade
quarta-feira, 6 de janeiro de 2010
http://www.flickr.com/photos/rxmflickr/2687319911/sizes/l/




 Comunicação
quarta-feira, 6 de janeiro de 2010
Os princípios explicam
                                                a motivação
                                       ...
Princípios
      Os princípios são baseados nos valores e
      são mais                       concretos
      Ajudam a ag...
Agile Manifesto - Values and Principles
   Individuals and                     Our highest priority is to satisfy the     ...
Vamos aos
                                     Princípios...
quarta-feira, 6 de janeiro de 2010
Consequências Locais
                                        Estruture o código de forma que as
                          ...
Reduza a Repetição
                                      Esse principio contribui para manter as
                         ...
Lógica e Dados
                                     devem andar Juntos
                    Na maioria da vezes quando se a...
Simetria
                     Um método add pede um remove, input, output
                      Um grupo de métodos recebe...
Expressões Declarativas
                                     Expressar-se o máximo que puder




quarta-feira, 6 de janeir...
Taxa de Alterações
                                         (Rate of Change)
                  setAmont(int value, String ...
Os padrões expressão um ou mais
                                             valores de comunicação,
                     ...
Motivação




                                     http://www.flickr.com/photos/tambako/3567125378/sizes/l/
quarta-feira, 6...
O Custo do Software
                                         Custo Total


                                             =
...
Custo de
                                                  Manter
                                                 é maior...
Os Padrões tem o objetivo
                  de gerar Código Claro para
                  o desenvolvimento futuro,
       ...
Você passa mais

                             tempo      lendo
                                 do que escrevendo
        ...
Classes                         http://www.flickr.com/photos/tambako/4112153517/sizes/l/




quarta-feira, 6 de janeiro de ...
Classes e
         Arquétipos
          de Platão




quarta-feira, 6 de janeiro de 2010
Classe
                “Estes               dados vão juntos e essa lógica também”

              Dados são alterados mais...
Super-Classe

                              Use herança   cautelosamente
              “Sou parecida com a minha superclas...
Simple Superclass Name
        Encontrar                    o nome perfeito é dos momentos
        mais satisfatórios da v...
Qualified Subclass Name
   O Nome de uma sub-classe deve comunicar duas coisas


   1. Com que classe ela se              ...
Abstract Interface
               “Aumentar o número de interfaces não diminuem o
                             custo do so...
Mudança é Ruim?
                           “Esses dias li uma lista com todas as razões pelas
                           q...
Mudança é Ruim?
                 Porque a previsão do tempo é realizada para um
                 ano inteiro de uma só vez...
Interfaces


                                     File < FileImpl


                                      IFile < File
qua...
Interfaces Versionadas

               O que você faz quado precisa alterar uma interface
                                ...
Interfaces Versionadas
                  interface Command { void run(); }

                  interface ResersibleCommand ...
Value Object

quarta-feira, 6 de janeiro de 2010
Value Object
                    São objetos que depois de
                   criados nunca mais tem seus
                ...
Value Object
               Transação {
               	 int valor;

               	      (int valor, Conta credito, Cont...
Class Specialization

                       SubClass
quarta-feira, 6 de janeiro de 2010
Subclass

                    É um forma de dizer “Esse
                   objeto é semelhante a aquele
                  ...
Cuidado com o Anti-Pattern
               de Hierarquias Paralelas
                                     Duplicidade, Compl...
Inner Class
                                Static and Non-Static




quarta-feira, 6 de janeiro de 2010
Instance
                                     Specific
                                     Behavior
quarta-feira, 6 de ja...
Condicionais
                           Cuidado com a Duplicidade
                       public void display() {   public ...
Imagine que você agora,
                          precisa adicionar um novo
                                     tipo...

...
Delegation

                   A lógica comum deve fica na
                   referring class e a especifica
               ...
Delegation
               É comum passar a referência do delegador

             // Graphic Editor
             public voi...
Pluggable Selector
                  Quando existem poucas implementações

                       Crie todos os métodos em...
Anonymous
                                     Inner Class
                 public class Pato {

                 	
      ...
Anonymous
                                     Inner Class
             Difícil de Testar

            Como a classe não p...
?
           O que você pode
             fazer quando
          precisa de alguma
         funcionalidade que
           ...
?
            Que tal criar uma
             classe cheia de
            métodos estáticos
                com essas
     ...
Library Class
                        public class Collections {
                        	     //..
                      ...
Library Class
                          Não têm Estado

                          Difícil de Testar

                     ...
Estado




   http://www.flickr.com/photos/tambako/2701117725/sizes/l/

quarta-feira, 6 de janeiro de 2010
State
                    Trabalha com valores que que variam ao
                               longo do tempo



        ...
Cuidado!


                         Estado e concorrência
                         não se dão muito bem.


quarta-feira, 6...
Separar Estados
                           Quando tiver dúvida,
                       pergunte-se se os atributos
       ...
Access

                                     Mantém a Flexibilidade limitando o
                                          ...
Access

                                A distinção entre acessar dados
                             armazenados e invocar...
Direct Access

                                       Acessa o estado de um objeto
                                       ...
Legibilidade

                                     numeroDeFilhos = 10;

                                          porta =...
Indirect Access

                         Acessa o estado de um objeto através de
                          métodos para a...
Indirect Access

                            “Minha estratégia padrão é permitir
                          acesso direto à...
Common State

                             Armazena o estado comum a todos os
                                   objetos d...
Exemplo do Cartesiano
                   class Point {
                     int x;
                     int y;
           ...
Variable State
                            Armazena o estado que variam de
                          instancia para instan...
Variable State
                 public class ObjetoFlexivel {

                 	      Map<String, Object> properties = ne...
Variable
                             Variáveis provêem um namespace para
                                        acessar ...
Escopo
                                                    Local

                                                   Atrib...
Local Variable
                       Variáveis Locais detém o estado de um
                                    escopo úni...
Variável Local Coletora

                       Coleta Informações para uso posterior.

                     Geralmente sã...
Variável Local
                                      Contadora
                   Um Tipo de Especial de Variável Coletora...
Variável Local Explicatória
                                Quando há um cálculo complexa
                              ar...
Variável Local de Reuso
                         Quando você precisa utilizar o mesmo
                               valor...
Field
                      Fields armazenam o estado de vida de
                     um objeto. Elas nascem e morrem junt...
Helper Field
                          Helper Fields guardam referências de
                           objetos que são usa...
Flag Field
                  Flag Fields indicam que o objeto pode ter
                  dois tipos de comportamentos dife...
Strategy
                        Quando você quiser expressar que
                       existem formas diferentes de real...
Components
                      Atributos componentes contém objetos
                      ou dados que pertencem ao obje...
Parameter
             Parâmetros comunicam o estado durante
                 a execução de um único método




quarta-fei...
Parameter
                 Além de variáveis não privadas, a única
                  forma de comunicar o estado de um
   ...
Parameter
                         O acoplamento introduzido por um
                        parâmetro é bem menor do que u...
Parameter
                       Quando um parâmetro se repete em
                      muitos métodos de um objeto, é mui...
quarta-feira, 6 de janeiro de 2010
Collection Parametor




quarta-feira, 6 de janeiro de 2010
Collection Parametor
                                   Passa um parâmetro para coletar
                                 r...
Collection Parametor
                 void listar() {
                 	 List results = new ArrayList();
                 ...
Optinal Parameter
                         Utilizado em métodos e construtores,
                         também conhecido ...
Parameter Object
                           Consolida longas listas de parâmetros
                           usados freque...
Constant
                          Armazena o estado que não se altera

                       Utilize variáveis static fin...
quarta-feira, 6 de janeiro de 2010
• count: armazena contagens
                     • each: armazena elemento durante iterações
                     • result...
Nomeie variáveis de acordo com seus papéis




                     • count: armazena contagens
                     • eac...
Role-Suggesting Name
                        Nomeie variáveis de acordo com seus papéis




                     • count: ...
Declared Type
                         Declara um tipo genérico para variáveis




           List<Pessoa> candidatos =
  ...
Inicialization
quarta-feira, 6 de janeiro de 2010
Eager Inicialization
                                     Inicializa campos de um instancia em
                           ...
Lazy Inicialization
                     Inicializa campos cujo valores são caros
                       de se calcular ap...
Métodos
                                     http://www.flickr.com/photos/tambako/4170480368/sizes/l/
quarta-feira, 6 de ja...
Intetion-Revealing
                                       Method
                     Métodos devem ter nomes que revelem
...
Method Visibility
                                public, package, protected ou private?

                                ...
Method Object
                  Esse padrão pode te ajudar a transformar
                   um código massivo aglomerado e...
Method Object
                     Aqueles métodos, cheios de variáveis
                  temporárias e um montão de parâm...
Method Object
   1. Crie uma classe com o nome do método

   2. Crie um atributo para cada parâmetro, variável local e atr...
Overidden Method
                                       Métodos sobre-escritos são
                                     um...
Overloaded Method
                  Métodos sobrecarregados representam
                    formas alternativas de se invo...
Method Return Type
                               Identificam se o método é uma
                               Procedure (v...
Comentários
                   Expresse o máximo de informação
                    possível através de   nomes e da
      ...
Helper Method

                          São métodos        private que compõe um
                             método públ...
Debug Print Method
                            Implemente o método toString() dos
                                     obj...
Conversion
                              Quando você precisa   converter
                            um objeto de um tipo ...
Conversion Method
              class Farenheight {

                       public Celsius convertToCelsius(Farenheight f)...
Conversion Contructor
                       class Farenheight {

                                public Farenheight (Cels...
Construtor
                  Deve representar a     criação de um
                                     objeto




quarta-f...
Factory Method
                             Forma alternativa ao Construtor para
                          representar a c...
Internal Factory
                            Quando criar ou calcular um objeto for
                             complexo,...
Collection
                                     Accessor Method
                      Como prover acesso a uma Collection?...
Collection
                                      Accessor Method
                       public List<Livro> getLivros() {
 ...
Unmodifiable Wrapper
                         public List<Livro> getLivros() {
                         	 return Collectio...
Collection Accessor Method
                                     public void addLivro(Livro livro) {}

                    ...
Boolean Setting Method
                      procure usar

                      cache.ativar();
                      cac...
Boolean Setting Method
                         a menos que

                    if (booleanVar)
                    	 cac...
Getting
                                     Method

quarta-feira, 6 de janeiro de 2010
Setting Method
                       void setX(int x){      ...       }

                       void centered(){      ......
http://www.flickr.com/photos/pong/288491653/sizes/o/



       Safe Copy



                              public void getLi...
Coleções




                                     http://www.flickr.com/photos/tambako
quarta-feira, 6 de janeiro de 2010
Array
                                     Simples e Pouco Flexíveis

                                           Tamanho F...
Iterable
                          Interface básica que permite apenas que
                             se realizem iteraç...
Collection
                        Oferece Adição, Remoção e Verificação de
                                        Presenç...
List
                               Elementos Ordenados que podem ser
                                  acessados por sua ...
Set
                                     Um conjunto de elementos sem
                                             duplici...
SortedSet
                                Um conjunto ordenado de elementos
                                         sem d...
Map
                            Um coleção de chaves ligadas a valores




quarta-feira, 6 de janeiro de 2010
Comunicação
                              As colections Java       comunicam o que
                                são o q...
Referência

                                     Leia o Livro!



                                     http://www.amazon.c...
OBRIGADO!!!!




                                     http://www.flickr.com/photos/tambako
quarta-feira, 6 de janeiro de 20...
Upcoming SlideShare
Loading in...5
×

Implemention Patterns

1,152

Published on

Palestra sobre o livro Implemention Patterns de Kent Beck

Published in: Technology, Sports
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,152
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
47
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Implemention Patterns

  1. 1. http://www.flickr.com/photos/tambako/4112834255/sizes/l/in/set-72157600220682086/ Padrões de Implementação com Java de Kent Beck André Faria Gomes quarta-feira, 6 de janeiro de 2010
  2. 2. Valores e Princípios http://www.flickr.com/photos/tambako/3103490954/sizes/l/ quarta-feira, 6 de janeiro de 2010
  3. 3. Valores são conceitos que guiam nossas escolhas. http://www.flickr.com/photos/rxmflickr/ quarta-feira, 6 de janeiro de 2010
  4. 4. http://www.flickr.com/photos/sgw/2857641872/sizes/l/ Simplicidade quarta-feira, 6 de janeiro de 2010
  5. 5. http://www.flickr.com/photos/khalid-almasoud/474399662/sizes/o/ Flexibilidade quarta-feira, 6 de janeiro de 2010
  6. 6. http://www.flickr.com/photos/rxmflickr/2687319911/sizes/l/ Comunicação quarta-feira, 6 de janeiro de 2010
  7. 7. Os princípios explicam a motivação por trás dos padrões http://www.flickr.com/photos/rxmflickr/3828493521/sizes/l/ quarta-feira, 6 de janeiro de 2010
  8. 8. Princípios Os princípios são baseados nos valores e são mais concretos Ajudam a agir conforme os valores e são mais fácil de serem traduzidos à práticas São como guias http://www.flickr.com/photos/werkunz/3680331543 quarta-feira, 6 de janeiro de 2010
  9. 9. Agile Manifesto - Values and Principles Individuals and Our highest priority is to satisfy the a development team is face-to-face customer through early and continuous conversation. interactions delivery of valuable software. over processes Working software is the primary and tools Welcome changing requirements, even measure of progress. late in development. Agile processes Agile processes promote sustainable harness change for the customer's Working development. The sponsors, developers, competitive advantage. software over and users should be able to maintain a Deliver working software frequently, constant pace indefinitely. comprehensive from a couple of weeks to a couple of documentation Continuous attention to technical months, with a preference to the excellence and good design enhances shorter timescale. agility. Customer Business people and developers must collaboration Simplicity--the art of maximizing the work together daily throughout the over contract amount of work not done--is essential. project. negotiation The best architectures, requirements, Build projects around motivated and designs emerge from self- individuals. Give them the environment Responding to organizing teams. and support they need, and trust them change over to get the job done. At regular intervals, the team reflects following a on how to become more effective, then The most efficient and effective method plan tunes and adjusts its behavior of conveying information to and within accordingly. quarta-feira, 6 de janeiro de 2010
  10. 10. Vamos aos Princípios... quarta-feira, 6 de janeiro de 2010
  11. 11. Consequências Locais Estruture o código de forma que as consequências sejam locais. Reduza os efeitos colaterais. Diminua o custo de fazer alterações. quarta-feira, 6 de janeiro de 2010
  12. 12. Reduza a Repetição Esse principio contribui para manter as consequências locais. Quando mais cópias do mesmo código, mais cara se torna a mudança. Quebre o sistema em pequenas partes, pequenos pacotes, pequenos métodos, pequenos objetos. quarta-feira, 6 de janeiro de 2010
  13. 13. Lógica e Dados devem andar Juntos Na maioria da vezes quando se altera a estrutura dos dados, também se altera a lógica. Se eles estivem juntos a consequência de alterar será local. quarta-feira, 6 de janeiro de 2010
  14. 14. Simetria Um método add pede um remove, input, output Um grupo de métodos recebem os mesmos parâmetros Atributos com o mesmo ciclo de vida Faz o código torna-se mais fácil de se ler Se você entender uma parte, entende o todo “A mesma idéia deve ser expressada da mesma forma em todos os lugares” quarta-feira, 6 de janeiro de 2010
  15. 15. Expressões Declarativas Expressar-se o máximo que puder quarta-feira, 6 de janeiro de 2010
  16. 16. Taxa de Alterações (Rate of Change) setAmont(int value, String currency) { this.value = value; this.currency = currency; } setAmont(int value, String currency) { this.money = new Money(value, currency); } setAmont(Money money) { this.money = money; } Evita Duplicidade e Criar Consequências Locais quarta-feira, 6 de janeiro de 2010
  17. 17. Os padrões expressão um ou mais valores de comunicação, simplicidade ou flexibilidade http://www.flickr.com/photos/rxmflickr/4045972780/sizes/l/ quarta-feira, 6 de janeiro de 2010
  18. 18. Motivação http://www.flickr.com/photos/tambako/3567125378/sizes/l/ quarta-feira, 6 de janeiro de 2010
  19. 19. O Custo do Software Custo Total = Custo de Desenvolver + Custo de Manter quarta-feira, 6 de janeiro de 2010
  20. 20. Custo de Manter é maior! Consome mais tempo É mais propenso a erros Tem que aprender o que o código faz quarta-feira, 6 de janeiro de 2010
  21. 21. Os Padrões tem o objetivo de gerar Código Claro para o desenvolvimento futuro, reduzindo o custo de manutenção e melhorando a comunicação de programador com programador quarta-feira, 6 de janeiro de 2010
  22. 22. Você passa mais tempo lendo do que escrevendo código quarta-feira, 6 de janeiro de 2010
  23. 23. Classes http://www.flickr.com/photos/tambako/4112153517/sizes/l/ quarta-feira, 6 de janeiro de 2010
  24. 24. Classes e Arquétipos de Platão quarta-feira, 6 de janeiro de 2010
  25. 25. Classe “Estes dados vão juntos e essa lógica também” Dados são alterados mais frequentemente do que lógica. Aprender como empacotar lógica em classes e como expressar suas variações é essencial para se programar de forma eficaz com orientação à objetos. quarta-feira, 6 de janeiro de 2010
  26. 26. Super-Classe Use herança cautelosamente “Sou parecida com a minha superclasse, apenas um pouco diferente” Reduzir a quantidade de classes em um sistema é uma melhora, na condição de as outras classes não fiquem inchadas quarta-feira, 6 de janeiro de 2010
  27. 27. Simple Superclass Name Encontrar o nome perfeito é dos momentos mais satisfatórios da vida de um programador O nome certo implica em simplicidade e expressividade Encontrar o nome certo pode levar horas, dias, meses ou até mesmo anos quarta-feira, 6 de janeiro de 2010
  28. 28. Qualified Subclass Name O Nome de uma sub-classe deve comunicar duas coisas 1. Com que classe ela se parece 2. No que ela é diferente Boleto BoletoSimples BoletoRegistrado quarta-feira, 6 de janeiro de 2010
  29. 29. Abstract Interface “Aumentar o número de interfaces não diminuem o custo do software.” Uma nova interface é algo a mais para compreender, documentar, debugar, organizar, navegar e nomear. Pague esse preço quando realmente precisar da flexibilidade de uma interface. quarta-feira, 6 de janeiro de 2010
  30. 30. Mudança é Ruim? “Esses dias li uma lista com todas as razões pelas quais mudanças ocorrem em software, negligência do levantamento de requistos, bla, bla.... A lista assumia que todas as mudanças eram ruins.” quarta-feira, 6 de janeiro de 2010
  31. 31. Mudança é Ruim? Porque a previsão do tempo é realizada para um ano inteiro de uma só vez? Porque o tempo muda de maneiras imprevisíveis! Em Java, Interfaces e Classes abstratas podem te ajudar a conseguir flexibilidade quando for preciso. quarta-feira, 6 de janeiro de 2010
  32. 32. Interfaces File < FileImpl IFile < File quarta-feira, 6 de janeiro de 2010
  33. 33. Interfaces Versionadas O que você faz quado precisa alterar uma interface mas não pode? Crie uma nova interface que extende a anterior e utilize instanceof para verificar se pode utilizar a nova operação! quarta-feira, 6 de janeiro de 2010
  34. 34. Interfaces Versionadas interface Command { void run(); } interface ResersibleCommand extends Command { void undo(); } ... if (recent instanceof ReversibleCommand) ((ReversibleCommand) recent).undo() ... quarta-feira, 6 de janeiro de 2010
  35. 35. Value Object quarta-feira, 6 de janeiro de 2010
  36. 36. Value Object São objetos que depois de criados nunca mais tem seus valores alterados. Exemplos desse padrão na linguagem Java: Integer, Float, String, BigDecimal, Double quarta-feira, 6 de janeiro de 2010
  37. 37. Value Object Transação { int valor; (int valor, Conta credito, Conta debito) { this.valor = valor; credit.addCredito(this); debit.addDebit(this); } int getValor() { return this.valor; } } quarta-feira, 6 de janeiro de 2010
  38. 38. Class Specialization SubClass quarta-feira, 6 de janeiro de 2010
  39. 39. Subclass É um forma de dizer “Esse objeto é semelhante a aquele exceto...” quarta-feira, 6 de janeiro de 2010
  40. 40. Cuidado com o Anti-Pattern de Hierarquias Paralelas Duplicidade, Complexidade e Acoplamento Contrato Produto ContratoDeSeguro ContratoDeSeguro ContratoDePensão ContratoDePensão quarta-feira, 6 de janeiro de 2010
  41. 41. Inner Class Static and Non-Static quarta-feira, 6 de janeiro de 2010
  42. 42. Instance Specific Behavior quarta-feira, 6 de janeiro de 2010
  43. 43. Condicionais Cuidado com a Duplicidade public void display() { public void contains() { switch(getType()) { switch(getType()) { case MOUSE_DOWN: case MOUSE_DOWN: //.. //.. break; break; case SELECT: case SELECT: //.. //.. break; break; case MOUSE_OVER: case MOUSE_OVER: //.. //.. break; break; } } } } quarta-feira, 6 de janeiro de 2010
  44. 44. Imagine que você agora, precisa adicionar um novo tipo... Será preciso alterar todos os métodos incluindo um nova entrada no swtich case statement. quarta-feira, 6 de janeiro de 2010
  45. 45. Delegation A lógica comum deve fica na referring class e a especifica nos delegates. quarta-feira, 6 de janeiro de 2010
  46. 46. Delegation É comum passar a referência do delegador // Graphic Editor public void mouseDown() { tool.mouseDown(this); } // Retangle Tool public void mouseDown(Editor editor) { editor.add(new RetangleFigure()); } Ou Passe o Delegator no Construtor do Delegating Object quarta-feira, 6 de janeiro de 2010
  47. 47. Pluggable Selector Quando existem poucas implementações Crie todos os métodos em uma única classe e armazene os nomes dos métodos em Strings e chame-os através de reflection. Como é feito no JUnit: String name; public void runTest() { Class[] noArguments = new Class[0]; Method method = getClass().getMethod(name, noArguments); method.invoke(this, new Object[0]); } quarta-feira, 6 de janeiro de 2010
  48. 48. Anonymous Inner Class public class Pato { Habilidade andar = new Habilidade() { public void fazer() { //... } }; } quarta-feira, 6 de janeiro de 2010
  49. 49. Anonymous Inner Class Difícil de Testar Como a classe não possui nome é você não pode expressar sua intenção facilmente Pode tornar o código mais difícil de ler quarta-feira, 6 de janeiro de 2010
  50. 50. ? O que você pode fazer quando precisa de alguma funcionalidade que não encaixa em nenhum objeto quarta-feira, 6 de janeiro de 2010
  51. 51. ? Que tal criar uma classe cheia de métodos estáticos com essas funcionalidades quarta-feira, 6 de janeiro de 2010
  52. 52. Library Class public class Collections { //.. public static <T extends Comparable<? super T>> void sort(List<T> list) { Object[] a = list.toArray(); Arrays.sort(a); ListIterator<T> i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set((T)a[j]); } } //.. } quarta-feira, 6 de janeiro de 2010
  53. 53. Library Class Não têm Estado Difícil de Testar Procedural quarta-feira, 6 de janeiro de 2010
  54. 54. Estado http://www.flickr.com/photos/tambako/2701117725/sizes/l/ quarta-feira, 6 de janeiro de 2010
  55. 55. State Trabalha com valores que que variam ao longo do tempo “Olhe para o sol, espere uma hora e olhe novo, ele já não estará mais no mesmo lugar“ quarta-feira, 6 de janeiro de 2010
  56. 56. Cuidado! Estado e concorrência não se dão muito bem. quarta-feira, 6 de janeiro de 2010
  57. 57. Separar Estados Quando tiver dúvida, pergunte-se se os atributos devem nascem e morrem ao mesmo tempo. Se a reposta for sim, eles devem ficar juntos. quarta-feira, 6 de janeiro de 2010
  58. 58. Access Mantém a Flexibilidade limitando o acesso ao estado quarta-feira, 6 de janeiro de 2010
  59. 59. Access A distinção entre acessar dados armazenados e invocar computações é uma dicotomia das linguagens de programação. quarta-feira, 6 de janeiro de 2010
  60. 60. Direct Access Acessa o estado de um objeto diretamente. Geralmente utilizados em métodos acessores e construtores. quarta-feira, 6 de janeiro de 2010
  61. 61. Legibilidade numeroDeFilhos = 10; porta = 1; abrirPorta(); porta.abrir(); quarta-feira, 6 de janeiro de 2010
  62. 62. Indirect Access Acessa o estado de um objeto através de métodos para aumentar a flexibilidade quarta-feira, 6 de janeiro de 2010
  63. 63. Indirect Access “Minha estratégia padrão é permitir acesso direto à própria classe, incluindo inner classes, e acesso indireto à classes clientes” Kent Beck quarta-feira, 6 de janeiro de 2010
  64. 64. Common State Armazena o estado comum a todos os objetos de uma classe. quarta-feira, 6 de janeiro de 2010
  65. 65. Exemplo do Cartesiano class Point { int x; int y; } Todos os atributos compartilham o mesmo ciclo de vida. quarta-feira, 6 de janeiro de 2010
  66. 66. Variable State Armazena o estado que variam de instancia para instancia em um mapa Alta Flexibidade Comunicação Pobre quarta-feira, 6 de janeiro de 2010
  67. 67. Variable State public class ObjetoFlexivel { Map<String, Object> properties = new HashMap<String, Object>(); public Object getProperty(final String key) { return properties.get(key); } public void setProperty(final String key, final Object value) { properties.put(key, value); } } Use prefixos para representar propriedades relacionadas: border, borderColor, borderWidth... quarta-feira, 6 de janeiro de 2010
  68. 68. Variable Variáveis provêem um namespace para acessar o estado. Leitores devem entender facilmente o escopo, o ciclo de vida e o papel de uma variável. quarta-feira, 6 de janeiro de 2010
  69. 69. Escopo Local Atributo (Field) Estático + Modificadores (private, default, protected, public) quarta-feira, 6 de janeiro de 2010
  70. 70. Local Variable Variáveis Locais detém o estado de um escopo único quarta-feira, 6 de janeiro de 2010
  71. 71. Variável Local Coletora Coleta Informações para uso posterior. Geralmente são usadas no retorno de métodos, neste caso chame de result ou results. quarta-feira, 6 de janeiro de 2010
  72. 72. Variável Local Contadora Um Tipo de Especial de Variável Coletora que armazena a contagem de objetos. quarta-feira, 6 de janeiro de 2010
  73. 73. Variável Local Explicatória Quando há um cálculo complexa armazene suas partes variáveis para facilitar a leitura. int top = 10; int left = 10; int heigth = 10; int width = 10; new Retangle(top, left, height, width); quarta-feira, 6 de janeiro de 2010
  74. 74. Variável Local de Reuso Quando você precisa utilizar o mesmo valor mais de uma vez. long now = System.currentTimeMills(); for (Clock each: getClocks()) each.setTime(now); quarta-feira, 6 de janeiro de 2010
  75. 75. Field Fields armazenam o estado de vida de um objeto. Elas nascem e morrem junto com o objeto. quarta-feira, 6 de janeiro de 2010
  76. 76. Helper Field Helper Fields guardam referências de objetos que são usados por vários métodos. Se um objeto é passado por parâmetro para muitos métodos, considere torná-lo um field quarta-feira, 6 de janeiro de 2010
  77. 77. Flag Field Flag Fields indicam que o objeto pode ter dois tipos de comportamentos diferentes. Se houver um setter para esse field o comportamento pode ser mudado ao longo da vida do objeto. Atenção: Se houver muitas consultas repetitivas a flag para determinar o comportamento do objeto, analise a possibilidade de usar o padrão Strategy quarta-feira, 6 de janeiro de 2010
  78. 78. Strategy Quando você quiser expressar que existem formas diferentes de realizar parte do comportamento do objeto crie um strategy field. Se ele puder mudar ao longo da vida do objeto, crie um setter, caso contrário defina no construtor. quarta-feira, 6 de janeiro de 2010
  79. 79. Components Atributos componentes contém objetos ou dados que pertencem ao objeto em questão. Carro Motor quarta-feira, 6 de janeiro de 2010
  80. 80. Parameter Parâmetros comunicam o estado durante a execução de um único método quarta-feira, 6 de janeiro de 2010
  81. 81. Parameter Além de variáveis não privadas, a única forma de comunicar o estado de um objeto para outro é através de parâmetros. quarta-feira, 6 de janeiro de 2010
  82. 82. Parameter O acoplamento introduzido por um parâmetro é bem menor do que uma referência de permanente (atributo) de um objeto para outro. quarta-feira, 6 de janeiro de 2010
  83. 83. Parameter Quando um parâmetro se repete em muitos métodos de um objeto, é muito provável que ele deva ser uma atributo. quarta-feira, 6 de janeiro de 2010
  84. 84. quarta-feira, 6 de janeiro de 2010
  85. 85. Collection Parametor quarta-feira, 6 de janeiro de 2010
  86. 86. Collection Parametor Passa um parâmetro para coletar resultados complicados de múltiplos métodos quarta-feira, 6 de janeiro de 2010
  87. 87. Collection Parametor void listar() { List results = new ArrayList(); addTo(results); return results; } private void adicionar(List elements) { ... } quarta-feira, 6 de janeiro de 2010
  88. 88. Optinal Parameter Utilizado em métodos e construtores, também conhecido como Telescoping Pattern public void mascarar() {mascarar(2,2);} public void mascarar(int decimals) { mascarar(decimals, decimals); } public void mascarar(int min, int max) { ... } quarta-feira, 6 de janeiro de 2010
  89. 89. Parameter Object Consolida longas listas de parâmetros usados frequentemente em um objeto setBordaExterna ( x,y,w,h ); setBordaInterna ( x+2,y+2,w-4,h-4 ); setBordaExterna ( borda ); setBordaInterna ( borda.expandir(-2) ); quarta-feira, 6 de janeiro de 2010
  90. 90. Constant Armazena o estado que não se altera Utilize variáveis static final com nomes em uppercase. Cuidado setAlignment(CENTERED) não comunica também como center() quarta-feira, 6 de janeiro de 2010
  91. 91. quarta-feira, 6 de janeiro de 2010
  92. 92. • count: armazena contagens • each: armazena elemento durante iterações • result: armazena o valor que a função retornará quarta-feira, 6 de janeiro de 2010
  93. 93. Nomeie variáveis de acordo com seus papéis • count: armazena contagens • each: armazena elemento durante iterações • result: armazena o valor que a função retornará quarta-feira, 6 de janeiro de 2010
  94. 94. Role-Suggesting Name Nomeie variáveis de acordo com seus papéis • count: armazena contagens • each: armazena elemento durante iterações • result: armazena o valor que a função retornará quarta-feira, 6 de janeiro de 2010
  95. 95. Declared Type Declara um tipo genérico para variáveis List<Pessoa> candidatos = new ArrayList<Pessoas>(); quarta-feira, 6 de janeiro de 2010
  96. 96. Inicialization quarta-feira, 6 de janeiro de 2010
  97. 97. Eager Inicialization Inicializa campos de um instancia em tempo de criação class Clube { List<Pessoa> membros = Lists.newArrayList(); } class Clube { ... Clube() { /* inicialização */ } } quarta-feira, 6 de janeiro de 2010
  98. 98. Lazy Inicialization Inicializa campos cujo valores são caros de se calcular apenas antes de serem usados pela primeira vez public List<Pessoa> getMembros() { if (membros == null) { membros = Lists.newArrayList(); } return membros; } quarta-feira, 6 de janeiro de 2010
  99. 99. Métodos http://www.flickr.com/photos/tambako/4170480368/sizes/l/ quarta-feira, 6 de janeiro de 2010
  100. 100. Intetion-Revealing Method Métodos devem ter nomes que revelem seu objetivo e sejam intuitivos para que um potencial invocador o descubra Customer.findById(id); iterator.hasNext(); quarta-feira, 6 de janeiro de 2010
  101. 101. Method Visibility public, package, protected ou private? “Revelar o mínimo possível garante maior flexibilidade” quarta-feira, 6 de janeiro de 2010
  102. 102. Method Object Esse padrão pode te ajudar a transformar um código massivo aglomerado em um método impossível em um código legível, limpo e claro, que revela gradualmente suas intenções ao leitor. quarta-feira, 6 de janeiro de 2010
  103. 103. Method Object Aqueles métodos, cheios de variáveis temporárias e um montão de parâmetros são ótimos candidatos se transformarem em um objeto, tentar apenas fazer um Extract Method, resultaria em sub- métodos difíceis de nomear com dezenas de variáveis. quarta-feira, 6 de janeiro de 2010
  104. 104. Method Object 1. Crie uma classe com o nome do método 2. Crie um atributo para cada parâmetro, variável local e atributos do objeto original usados no método. 3. Crie um construtor que recebe os parâmetros e atributos. 4. Copie o método original para a nova classe substituindo seus parametrôs pelas referencias dos atributos da nova classe. 5. Altere a chamada do método na classe original 6. Se atributos eram definidos na classe original, obtenha-os por getters e defina-os. 7. Agora faça os extract methods necessários para tornar o código mais legível. quarta-feira, 6 de janeiro de 2010
  105. 105. Overidden Method Métodos sobre-escritos são uma forma clara de se expressar variações. quarta-feira, 6 de janeiro de 2010
  106. 106. Overloaded Method Métodos sobrecarregados representam formas alternativas de se invocar o mesmo método. Todos as versão sobrecarregadas devem servir para o mesmo propósito, caso contrário é melhor procurar um novo nome. quarta-feira, 6 de janeiro de 2010
  107. 107. Method Return Type Identificam se o método é uma Procedure (void) ou uma Function (Object). Generalize o tipo de retorno para esconder detalhes de implementação. quarta-feira, 6 de janeiro de 2010
  108. 108. Comentários Expresse o máximo de informação possível através de nomes e da escreva estrutura do seu código, comentários somente para o que não estiver óbvio. Evite comentários redundantes. quarta-feira, 6 de janeiro de 2010
  109. 109. Helper Method São métodos private que compõe um método público e tornam seu o código mais legível e coeso. quarta-feira, 6 de janeiro de 2010
  110. 110. Debug Print Method Implemente o método toString() dos objetos de forma a identificar seu valor facilmente, essa prática pode reduzir significativamente o tempo de debugging . quarta-feira, 6 de janeiro de 2010
  111. 111. Conversion Quando você precisa converter um objeto de um tipo em outro de um tipo diferente. quarta-feira, 6 de janeiro de 2010
  112. 112. Conversion Method class Farenheight { public Celsius convertToCelsius(Farenheight f) { ... } } quarta-feira, 6 de janeiro de 2010
  113. 113. Conversion Contructor class Farenheight { public Farenheight (Celsius c) { ... } } quarta-feira, 6 de janeiro de 2010
  114. 114. Construtor Deve representar a criação de um objeto quarta-feira, 6 de janeiro de 2010
  115. 115. Factory Method Forma alternativa ao Construtor para representar a criação de um objeto em um método estático. Calculadora c = Calculadora.criar(); Muito útil quando se precisa de caching ou retornar diferentes subclasses dependendo dos parâmetros. quarta-feira, 6 de janeiro de 2010
  116. 116. Internal Factory Quando criar ou calcular um objeto for complexo, crie um método que cria e retorna o novo objeto. getX(){ if (x == null) x = computeX(); return x; } quarta-feira, 6 de janeiro de 2010
  117. 117. Collection Accessor Method Como prover acesso a uma Collection? public List<Livro> getLivros() { return livros; } Qual o problema dessa implementação? quarta-feira, 6 de janeiro de 2010
  118. 118. Collection Accessor Method public List<Livro> getLivros() { return livros; } Apesar de dar máxima flexibilidade, você perde o controle sobre um atributo de seu objeto que pode ser invalidado sem que você saiba. quarta-feira, 6 de janeiro de 2010
  119. 119. Unmodifiable Wrapper public List<Livro> getLivros() { return Collections.unmodifiableList(livros); } quarta-feira, 6 de janeiro de 2010
  120. 120. Collection Accessor Method public void addLivro(Livro livro) {} public int getQuantidadeDeLivros() {} public Iterator getLivros() {} Uma boa prática é fornecer métodos que para operações limitadas e significativas. Isso melhora a coesão, torna o código mais legível e testável. E você fica no controle. quarta-feira, 6 de janeiro de 2010
  121. 121. Boolean Setting Method procure usar cache.ativar(); cache.inativar(); ao invés de cache.setStatus(true); cache.setStatus(false); quarta-feira, 6 de janeiro de 2010
  122. 122. Boolean Setting Method a menos que if (booleanVar) cache.ativar(); else cache.inativar(); nesse caso cache.setStatus(booleanVar); quarta-feira, 6 de janeiro de 2010
  123. 123. Getting Method quarta-feira, 6 de janeiro de 2010
  124. 124. Setting Method void setX(int x){ ... } void centered(){ ... } quarta-feira, 6 de janeiro de 2010
  125. 125. http://www.flickr.com/photos/pong/288491653/sizes/o/ Safe Copy public void getLivros() { List<Livro> result = new ArrayList<Livros>(); result.addAll(this.livros); return result; } quarta-feira, 6 de janeiro de 2010
  126. 126. Coleções http://www.flickr.com/photos/tambako quarta-feira, 6 de janeiro de 2010
  127. 127. Array Simples e Pouco Flexíveis Tamanho Fixo Sintaxe de Acesso Simples Acesso Rápido quarta-feira, 6 de janeiro de 2010
  128. 128. Iterable Interface básica que permite apenas que se realizem iterações e nada mais. quarta-feira, 6 de janeiro de 2010
  129. 129. Collection Oferece Adição, Remoção e Verificação de Presença. quarta-feira, 6 de janeiro de 2010
  130. 130. List Elementos Ordenados que podem ser acessados por sua localização. quarta-feira, 6 de janeiro de 2010
  131. 131. Set Um conjunto de elementos sem duplicidade. quarta-feira, 6 de janeiro de 2010
  132. 132. SortedSet Um conjunto ordenado de elementos sem duplicidade quarta-feira, 6 de janeiro de 2010
  133. 133. Map Um coleção de chaves ligadas a valores quarta-feira, 6 de janeiro de 2010
  134. 134. Comunicação As colections Java comunicam o que são o que elas fazem. Esse é o grande beneficio de ter padrões. quarta-feira, 6 de janeiro de 2010
  135. 135. Referência Leia o Livro! http://www.amazon.com/Implementation-Patterns-Kent-Beck/dp/0321413091 quarta-feira, 6 de janeiro de 2010
  136. 136. OBRIGADO!!!! http://www.flickr.com/photos/tambako quarta-feira, 6 de janeiro de 2010
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×