Nesta aula iremos aprender sobre herança, mais uma aula de orientação a objetos em Ruby, com a herança é possível aproveitar códigos de classes similares.

Herança

Herança é um princípio da programação orientada a objetos (POO) que permite criar uma nova classe a partir de uma já existente, útil para reaproveitamento de código, uma classe pode "herdar" de outra vários métodos e implementar novos métodos e atributos, você vai ouvir palavras como: classe Pai, Mãe, superclasse, subclasse, classe filha etc.


Exemplo de herança, definida classe Pai carro e classe filha Fiesta que herda os métodos do Pai.

      
        class Carro
          attr_accessor :nome, :portas
        end
      
    

Usamos o sinal <, para representar o conceito de herança em Ruby

      
        class Fiesta < Carro
          # Aqui a classe Fiesta tem os mesmos attr_accessor :nome, :portas
        end
      
    

Aula Prática

Como de praxe copie o arquivo padrão 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 fiesta.rb faça:

        
          class Fiesta
            attr_accessor :cor
          end
        
      

No 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")
              puts "Marca: #{marca} - Modelo: #{self.nome}"
            end
          end
        
      

Para o arquivo aula.rb deve-se fazer o require_relative dos outros arquivos.

        
        require 'byebug'

        require_relative 'carro'
        require_relative 'fiesta'

        debugger
        
        fiesta = Fiesta.new
        carro = Carro.new

        Carro.new.mostrar
        
      

Incluindo a herança no fiesta.rb

        
          class Fiesta < Carro
            attr_accessor :cor
          end
        
      

Incluindo a herança no golf.rb

        
          class Golf < Carro
            
          end
        
      

Para o arquivo aula.rb atualize com o golf.rb.

        
          require 'byebug'

          require_relative 'carro'
          require_relative 'fiesta'
          require_relative 'golf'

          debugger
          
          fiesta = Fiesta.new
          golf = Golf.new
          carro = Carro.new

          Carro.new.mostrar
        
      

Como vimos a classe Golf pode ser vazia, assim utilizando apenas os métodos herdados de Carro, atente-se para o require_relative de carro ser feito antes das classes que herdam ele.

Incluindo a herança golf.rb, assim ele herdará todos métodos das classes Carro e Fiesta

        
          class Golf < Fiesta
            # Golf está herdando tudo de Carro e Fiesta.
          end
        
      

Observações:

Sempre preste atenção na ordem de importação, observe a semântica quando for herdar métodos e sempre que você fizer AlgumaClasse.new, estará criando uma nova instância, um novo objeto, tendo um diferente endereço na memória inclusive.



Próximas Aulas


Orientação a Objetos - public, private, protected

Nesta aula iremos aprender as marcações public, private, protected e veremos as diferenças entre ela...

Orientação a objetos - Polimorfismo e Overload

Nesta aula iremos aprender como fazer polimorfismo no Ruby, também iremos ver como funciona o overlo...

Orientação a Objetos - Interface, Abstração, Singleton

Nesta aula iremos aprender como implementar Interface, Abstração e classe Singleton, de uma forma mu...

Metaprogramming - RunTime

Nesta aula iremos aprender o inicio da metaprogramação, veremos como o Ruby injeta métodos em objeto...

Metaprogramming - Modulo

Nesta aula iremos aprender como programar orientado a objetos por comportamento, iremos ver os estad...

Metaprogramming - Dinâmicos

Nesta aula iremos aprender como criar métodos de forma dinâmica, iremos ver os comandos, lambda, Pro...

Metaprogramming - Eval para Classes e instâncias

Nesta aula iremos aprender como abrir uma classe, com os comandos instance_eval e class_eval é possí...

Metaprogramming - Classes e métodos dinâmicos

Nesta aula iremos aprender como definir classes e métodos em runtime, veremos onde podemos utilizar ...



Danilo

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.

ELEVE SEUS GANHOS E POTENCIALIZE SUA PERFORMANCE

Receba nossa Ebook de LÓGICA DE PROGRAMAÇÃO

© Didox Business & Technology - CNPJ: 12.127.195/0001-14