Orientação a Objetos - Herança

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.

assinaturaAssine nossa Comunidade

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.

Orientação a Objetos - Herança

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.

Próximas Aulas:
assinaturaAssine nossa Comunidade

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.