A programação orientada a objetos permite que classes possam herdar estados e comportamentos comuns usados de outras classes. Neste exemplo, bicicleta torna-se agora a superclasse da classe BicicletaMontanha. Na linguagem de programação Ruby, cada classe é permitido ter uma superclasse direta, e cada superclasse tem o potencial para um número ilimitado de subclasses.
Override
Métodos Override (substituição), em programação orientada a objeto, é um recurso de linguagem que permite que uma subclasse ou classe filha possa fornecer uma implementação específica de um método que já é fornecido por uma de suas superclasses ou classes pai.
A implementação Override das subclasses substitui a implementação na superclasse, fornecendo um método que tem o mesmo nome, mesmos parâmetros ou assinatura, e mesmo tipo de retorno como o método na classe pai.
@ (Arroba – Ruby)
Uma variável associada ao sinal de arroba em Ruby significa uma variável da instancia ex: @variavavel.
Super
Usando super você irá chamar o mesmo método, mas, tal como definido na superclasse e consequentemente lhe fornecendo o resultado.
Exemplo:
Neste exemplo damos a classe BicicletaMontanha todos os mesmos campos e métodos da classe bicicleta, e ainda permite que seu código se concentre exclusivamente sobre as características que a tornam única. Isso faz do código de suas subclasses fáceis de ler. Usamos métodos Override neste exemplo de duas maneiras, para substituir um método da subclasse e adicionar mais um construtor com parâmetros.
No entanto, você deve tomar cuidado para documentar corretamente o estado e o comportamento que cada superclasse define, uma vez que o código não irá aparecer no arquivo de origem de cada subclasse.
Ruby
#!/usr/bin/env ruby
# Desenvolvimento Aberto
# Herança.rb
# Define classe
class Bicicleta
# Define métodos assesores
attr_accessor :modelo, :quadro, :rodas, :freios
# Construtor
def initialize(modelo, quadro, rodas, freios)
@modelo = modelo
@quadro = quadro
@rodas = rodas
@freios = freios
end
# Imprime modelo
def imprimeModelo()
puts "Modelo : " + @modelo
puts "Quadro: " + @quadro
puts "Rodas: " + @rodas
puts "Freios: " + @freios
end
end
# Classe com Herança
class BicicletaMontanha < Bicicleta
# Novos métodos assessores
attr_accessor :marchas, :amortecedores, :garrafa, :gps
# Construtor da classe
def initialize(modelo, quadro, rodas, freios, marchas, amortecedores, garrafa, gps)
# Super inicializa construtor da herança
super(modelo, quadro, rodas, freios)
# Inicializa variáveis
@marchas = marchas
@amortecedores = amortecedores
@garrafa = garrafa
@gps = gps
end
# Método Override - sobrepõe o metodo da classe super
def imprimeModelo()
puts "Modelo : " + modelo
puts "Quadro: " + quadro
puts "Rodas: " + rodas
puts "Freios: " + freios
puts "Marchas: " + @marchas
puts "Amortecedores: " + @amortecedores
puts "Garrafa: " + @garrafa
puts "Gps: " + @gps
end
end
# cria instancia da classe Bicicleta
bike1 = Bicicleta.new("Street", "Aço", "Ferro", "Pastilhas")
puts "Bicicleta Numero ---> 1:"
bike1.imprimeModelo()
# Cria instancia da classe BicicletaMontanha
bike2 = BicicletaMontanha.new("Montain Bike", "Carbono", "Aluminio", "Disco", "10 M",
"RX 3000 oil", "Aliminio 500ml", "Discovery 300xs")
puts "\nBicicleta Numero ---> 2:"
bike2.imprimeModelo()


