Introdução à OO (Orientação a Objetos) usando Ruby
Fundamentos e prática
Olá, meu caros!
As aulas que você está prestes a assistir eram parte de um curso pago. As
inscrições do curso foram encerradas em agosto de 2023. Eu não tenho planos de
abrir novas turmas, por isso decidi disponibilizar parte dele gratuitamente 🙂
Espero que goste. Sucesso em sua jornada! 👊
Códigos usados no vídeo:
metodos.rb
ruby
def numeros_impares(min = 0, max)
(min..max).each do |numero|
puts "O número #{numero} é ímpar" if numero.odd?
end
end
def media(elementos)
elementos.sum / elementos.size
end
def rolar_dado(faces)
return 'número de faces precisa ser maior que 1' if faces <= 1
rand(faces) + 1
end
numeros_impares(80, 90)
puts '---'
numeros_impares(12)
# puts media([9, 1, 2])
# puts media([10, 20])
# puts rolar_dado(1)
# puts rolar_dado(6)
classes.rb
ruby
# 1ª demonstração
class Cachorro
def latir
puts "au au"
end
end
class Gato
def miar
puts "miau"
end
end
cachorro = Cachorro.new
cachorro.latir
Gato.new.miar
#################################################
# 2ª demonstração
class Conta
end
class Banco
def criar_nova_conta
Conta.new
end
end
banco = Banco.new
conta = banco.criar_nova_conta
escopo_de_variaveis.rb
ruby
class Pessoa
def definir_nome(novo_nome)
puts "O novo nome é #{novo_nome}"
@nome = novo_nome
end
def exibir_informacoes
puts "Nome: #{@nome}"
end
end
pessoa = Pessoa.new
pessoa.definir_nome('Lucas')
pessoa.exibir_informacoes
pessoa2 = Pessoa.new
pessoa2.definir_nome("Daniel")
pessoa2.exibir_informacoes
metodo_construtor.rb
ruby
class Pessoa
def initialize(nome, idade)
@nome = nome
@idade = idade
end
def exibir_informacoes
puts "#{@nome} tem #{@idade} anos."
end
end
pessoa = Pessoa.new('Joana', 45)
pessoa.exibir_informacoes
setters_and_getters.rb
ruby
class Produto
attr_reader :fabricante # somente leitura
attr_writer :preco # somente escrita
attr_accessor :nome, :codigo # ambos leitura e escrita
def initialize
@fabricante = 'Apple'
@codigo = 1234
end
end
celular = Produto.new
# celular.fabricante = 'LG' # tentando chamar o setter (x)
# puts celular.fabricante # tentando chamar o getter (✓)
# celular.preco = 1000 # tentando chamar o setter (✓)
# puts celular.preco # tentando chamar o getter (x)
# celular.nome = 'iPhone' # tentando chamar o setter (✓)
# puts celular.nome # tentando chamar o getter (✓)
# celular.codigo = 6789 # tentando chamar o setter (✓)
# puts celular.codigo # tentando chamar o getter (✓)
metodo_privado.rb
ruby
class Sorteio
def initialize(participantes)
@participantes = participantes
end
def sortear
return if @participantes.empty?
sorteado = @participantes.sample
puts "O participante sorteado foi: #{sorteado}!"
remover_participante(sorteado)
end
private
def remover_participante(participante)
@participantes.delete(participante)
end
end
participantes = ['Bruno', 'Gabriela', 'Leandro', 'Marcia']
sorteio = Sorteio.new(participantes)
sorteio.sortear
sorteio.sortear
sorteio.sortear
sorteio.sortear
sorteio.sortear
# Não é possível chamar o método privado abaixo:
# sorteio.remover_participante('qualquer coisa')
metodo_de_classe.rb
ruby
class Tempo
def self.agora
Time.now
end
# Podemos misturar métodos de classe e métodos de instância
# na mesma classe, sem problemas:
def alguma_coisa
puts "funciona!"
end
end
puts Tempo.agora
# tempo = Tempo.new
# tempo.alguma_coisa
# # ou...
Tempo.new.alguma_coisa