Nesta aula iremos aprender como fazer polimorfismo no Ruby, também iremos ver como funciona o overload de métodos.
Na Sobrescrita ou Sobreposição você pode acessar tanto o novo método que sobreescreveu da classe pai, e também acessa-lô de dentro desse novo método, unindo as características de ambos, aqui vemos o uso do polimorfismo.
No Ruby não existe Overload, que consiste em ter mais de um método com mesmo nome, como em linguagens como C#,
mas temos a passagem de argumentos dinâmica com *args
.
Como de praxe copie os arquivos das aulas anteriores para seguir conforme o padrão.
Para essa aula criaremos alguns arquivos de classe separados do código principal.
Para o arquivo aula.rb
faça:
require 'byebug'
require_relative 'carro'
require_relative 'fiesta'
require_relative 'golf'
golf = Golf.new
fiesta = Fiesta.new
carro = Carro.new
debugger
golf.mostrar
fiesta.mostrar
Para o arquivo carro.rb
faça:
class Carro
def initialize(nome = "Modelo padrão")
@nome = nome
end
attr_accessor :nome, :porta, :painel, :roda
attr_reader :pneu
def mostrar(marca="Marca padrão")
"Marca: #{marca} - Modelo: #{self.nome} - #{algo_mais_protected}"
end
private
def algo_mais
"este é um metodo privado para retornar algo a mais"
end
def algo_mais2
"este é um metodo privado para retornar algo a mais"
end
def algo_mais3
"este é um metodo privado para retornar algo a mais"
end
def algo_mais4
"este é um metodo privado para retornar algo a mais"
end
public
def algo_mais_publico
"este é um metodo publico para retornar algo a mais"
end
protected
def algo_mais_protected
"este é um metodo protegido para retornar algo a mais"
end
end
Para o arquivo golf.rb
faça:
class Golf < Carro
def mostrar
puts "este é o medodo mostrar da classe golf"
end
end
Usando o super
no golf.rb
para usar o método mostrar da classe base:
class Golf < Carro
def mostrar
mostrar_original = super
puts "este é o medodo mostrar da classe golf - #{mostrar_original}"
end
def andar
puts ""
end
end
Exemplo de Sobrescrita:
class Golf < Carro
def mostrar
mostrar_original = super
puts "este é o medodo mostrar da classe golf - #{mostrar_original}"
end
def andar(p1,p2,p3)
puts "andar com parametros #{p1}, #{p2}, #{p3}"
end
def andar
puts "andar sem parametros"
end
end
Arquivo golf.rb
final:
class Golf < Carro
def mostrar
mostrar_original = super
puts "este é o medodo mostrar da classe golf - #{mostrar_original}"
end
def andar(p1,p2,p3)
puts "andar com parametros #{p1}, #{p2}, #{p3}"
end
def andar
puts "andar sem parametros"
end
def andar(*parametros)
puts "andar com parametros, opcionais #{parametros}"
parametros.each do |param|
puts param
end
end
end
Arquivo Fiesta.rb
final:
class Fiesta < Carro
attr_accessor :cor
def mostrar
puts "OIIII ---- #{super}"
end
def mostrar2(d,r)
puts "Osssssss - #{d} - #{r}"
end
def mostrar2
puts "Osssssss"
end
def mostrar_privado
# algo_mais
Carro.new.algo_mais
end
def mostrar_protegido
# algo_mais_protected
Carro.new.algo_mais_protected
end
end
Nesta aula iremos aprender como implementar Interface, Abstração e cla...
Nesta aula iremos aprender como criar métodos de forma dinâmica, iremo...
Nesta aula iremos aprender como abrir uma classe, com os comandos inst...
Nesta aula iremos aprender como definir classes e métodos em runtime, ...
Arquiteto de software, analista, programador, professor. Danilo criou o projeto torne-se um programador, para passar o seu conhecimento para a nova geração. Com o intuito de ser um bom pai, Danilo trabalha muito motivado para garantir o futuro de sua filha.