048_use_case_when_para_testar_a_classe_de_seus_objetos.rb 1.88 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
# 07/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 048 - Use case when para testar a classe de seus objetos
#
#
# Este exemplo, retirado do livro Programming Ruby 1.9
# página 137, tem somente fins didáticos.
#
# Veremos que, as características de Ruby de polimorfismo
# e Duck Typing permitem que evitemos construções com
# case / when, invocando diretamente os métodos
#
#
# No exemplo abaixo, veremos que toda classe em Ruby
# é uma instância da classe Class, que implementa
# o operador === comparando se seu argumento é uma
# instância da sua classe.
#
# Dessa forma, podemos usar case / when para descobrir
# a classe de um objeto em tempo de execução.
#
# Relembrando: É mais fácil resolver com polimorfismo
#
#
#
#



def metodo_polemico(maquina)
  case maquina
  when MaquinaRebelde
    maquina.coloca_de_castigo
  when MaquinaBoazinha
    maquina.faça_um_sanduíche
  end
end


class MaquinaRebelde

  def coloca_de_castigo
    puts "Essa máquina nunca me obedece"
  end
end

class MaquinaBoazinha

  def faça_um_sanduíche
    puts "Sanduíche de atum"
  end

end


maquina1 = MaquinaRebelde.new
maquina2 = MaquinaBoazinha.new

metodo_polemico(maquina1) # => nil
metodo_polemico(maquina2)

# >> Essa máquina nunca me obedece
# >> Sanduíche de atum


# Observações:
#  1. Acho que estou assistindo muitos filmes de ficção com robôs
#  2. Já vimos muitas estruturas de controle. Estamos acabando,
#  mas já está se tornando inevitável apresentar classes e métodos.
#  Paciência, logo veremos as explicações detalhadas de como criar
#  uma classe, um método de instância, uma nova instância etc.
#
#  É muito importante conhecer os detalhes das estruturas de controle
#  do Ruby. Pois elas são muito ricas, oferecendo grande expressividade
#  sem perda de legibilidade.
#
#  Lembre-se que, tirando as estruturas de controle, todo o restante
#  são objetos
#
#