Ruby – Inheritance, Override – Super – Linux

Publicado: 28 de dezembro de 2014 em Ruby on Rails

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.

Ruby - Herança - Sobreposição - Super

Ruby – Herança – Sobreposição – Super

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()

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s