Material da aula 17.A! Veja mais informações sobre o curso e a lista completa das aulas em: http://cursoprogramacao.rafaelbiriba.com/
17.A. Revisão de conteúdo
Essa é uma aula de revisão de conteúdo. Vou mostrar rapidamente tudo que foi ensinado nas últimas aulas, além dos exercícios um pouco mais complexos.
Não deixe de tentar resolver os exercícios da aula e investir algum tempo estudando mais sobre o assunto.
Vídeo da aula
Conteúdo da aula
- Revisão do conteúdo das aulas anteriores
Métodos
def soma(a,b)
a + b
end
soma(1,3) # 4
Classes e Instâncias
class Pizza
def self.valor
30
end
def tempo_de_preparo
10
end
end
Pizza.valor # 30
minha_pizza = Pizza.new
minha_pizza.tempo_de_preparo # 10
class Carro
def combustivel
"gasolina"
end
end
class Eletrico < Carro
def combustivel
"eletricidade"
end
def nome
"Tesla"
end
end
Carro.new.combustivel # gasolina
Carro.new.nome # NoMethodError
Eletrico.new.combustivel # eletricidade
Eletrico.new.nome # Tesla
class Teste
attr_accessor :a
attr_writer :b
attr_reader :c
end
teste = Teste.new
teste.a = 1
teste.a # 1
teste.b = 1
teste.b # NoMethodError
teste.c = 1 # NoMethodError
teste.c # nil
Exercícios
1.
Implementar uma classe Carro
que inicializa com o modelo, cor, km rodados. A classe carro deve expor os métodos:
-
detalhes
(que retorna modelo e cor do carro) -
km_rodados
(que retorna os km rodados pelo carro) -
precisa_trocar_oleo?
(retornatrue
se oskm_rodados
forem>10000
senão,false
) -
precisa_trocar_pneu?
(retornatrue
se oskm_rodados
forem>50000
senão,false
)
Segue o código para teste abaixo:
carro_preto = Carro.new("corsa", "preto", 32000)
carro_preto.detalhes # "corsa preto"
carro_preto.km_rodados # 32000
carro_preto.precisa_trocar_oleo? # true
carro_preto.precisa_trocar_pneu? # false
carro_azul = Carro.new("fusca", "azul", 9000)
carro_azul.detalhes # "fusca azul"
carro_preto.km_rodados # 9000
carro_azul.precisa_trocar_oleo? # false
carro_azul.precisa_trocar_pneu? # false
carro_branco = Carro.new("palio", "branco", 51000)
carro_branco.detalhes # "palio branco"
carro_preto.km_rodados # 51000
carro_branco.precisa_trocar_oleo? # true
carro_branco.precisa_trocar_pneu? # true
2.
Aproveitando o exercício #1, crie uma classe Oficina
. Essa classe vai ter uma lista para armazenar os carros (utilize a classe Carro
do exercício anterior.)
A Oficina
precisa expor o método listar_todos_carros
, listar_carros_troca_oleo
e listar_carros_troca_pneu
.
Você precisa criar um método adicionar_carro
para adicionar os carros na oficina.
Segue o código para teste abaixo:
oficina = Oficina.new
oficina.adicionar_carro(Carro.new("corsa", "preto", 32000))
oficina.adicionar_carro(Carro.new("fusca", "azul", 9000))
oficina.adicionar_carro(Carro.new("palio", "branco", 51000))
oficina.listar_todos_carros #["corsa preto", "fusca azul", "palio branco"]
oficina.listar_carros_troca_oleo #["corsa preto", "palio branco"]
oficina.listar_carros_troca_pneu #["palio branco"]
3.
Implementar uma classe Veiculo
que inicializa e expõe os métodos peso
e rodas
.
Implementar as classes Caminhao
, Moto
, Carro
que estendem da classe Veiculo
, onde:
-
Caminhao
: Possui 8 rodas e 12000kg. Essa classe precisa implementar o métodocarga
e retornararroz
-
Moto
: Possui 2 rodas e 250kg. Essa classe precisa implementar o métodocilindradas
e retornar200cc
-
Carro
: Possui 4 rodas e 1100kg. Essa classe precisa implementar o métodolugares
e retornar5
OPCIONAL: Salvar as classes em arquivos separados (exemplo, Veiculo
em veiculo.rb
, Carro
em carro.rb
) e utilizar o require_relative
Segue o código para teste abaixo:
veiculo = Veiculo.new(100000, 12)
veiculo.rodas # 12
veiculo.peso # 100000kg
veiculo.carga # NoMethodError, pois não deve estar disponível Veiculo
veiculo.cilindradas # NoMethodError, pois não deve estar disponível Veiculo
veiculo.lugares # NoMethodError, pois não deve estar disponível Veiculo
caminhao = Caminhao.new
caminhao.rodas # 8
caminhao.peso # 12000kg
caminhao.carga # arroz
caminhao.cilindradas # NoMethodError, pois não deve estar disponível para Caminhao
caminhao.lugares # NoMethodError, pois não deve estar disponível para Caminhao
moto = Moto.new
moto.rodas # 2
moto.peso # 250kg
moto.cilindradas # 200cc
moto.carga # NoMethodError, pois não deve estar disponível para Moto
moto.lugares # NoMethodError, pois não deve estar disponível para Moto
carro = Carro.new
carro.rodas # 4
carro.peso # 1100kg
carro.lugares # 5
carro.carga # NoMethodError, pois não deve estar disponível para Carro
carro.cilindradas # NoMethodError, pois não deve estar disponível para Carro
4. DESAFIO
Implementar um jogo da forca. Forca é um jogo onde uma palavra é escolhida em segredo, e o jogador tem 6 chances de acertar a palavra, tentando adivinhar letra por letra.
Nesse exercício, você deve criar uma classe Forca
que inicialize com a palavra escolhida para o jogo.
Você deve implementar um método jogar
para iniciar o jogo e receber (perguntar ao jogador) as letras a cada jogada.
Quando o número de erros forem igual a 6, o jogo acaba com a mensagem Você perdeu!
Se a palavra for descoberta, o jogo acaba com a mensagem Você ganhou!
OPCIONAL: Não precisa guardar a lista de letras digitadas. Se o jogador digitar a mesma letra, e ela estiver errada, contar como um novo erro.
DICA: Usar gets
para receber as letras do jogador.
DICA 2: Utilizar while
para manter o jogo rodando, até a palavra for acertada ou o jogador errar 6 vezes.
DICA 3: "cavalo".size
retorna o tamanho da palavra, ou seja 6
DICA 4: Array.new(6)
cria um array vazio com 6
posições [nil, nil, nil, nil, nil, nil]
jogo = Forca.new("cavalo")
jogo.jogar
# Digite uma letra: z
# Você cometeu um erro. (1 de 6)
# Digite uma letra: c
# ["c", nil, nil, nil, nil, nil]
# Digite uma letra: u
# Você cometeu um erro. (2 de 6)
# Digite uma letra: a
# ["c", "a", nil, "a", nil, nil]
# Digite uma letra: u
# Você cometeu um erro. (3 de 6)
# Digite uma letra: v
# ["c", "a", "v", "a", nil, nil]
# Digite uma letra: l
# ["c", "a", "v", "a", "l", nil]
# Digite uma letra: o
# ["c", "a", "v", "a", "l", "o"]
# Você ganhou!