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

Polimorfismo e Overload


Sobrescrita, Sobreposição ou Override

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.

Aula Prática

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
      
    



Próximas Aulas


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

Nesta aula iremos aprender como implementar Interface, Abstração e cla...

Metaprogramming - RunTime

Nesta aula iremos aprender o inicio da metaprogramação, veremos como o...

Metaprogramming - Modulo

Nesta aula iremos aprender como programar orientado a objetos por comp...

Metaprogramming - Dinâmicos

Nesta aula iremos aprender como criar métodos de forma dinâmica, iremo...

Metaprogramming - Eval para Classes e instâncias

Nesta aula iremos aprender como abrir uma classe, com os comandos inst...

Metaprogramming - Classes e métodos dinâmicos

Nesta aula iremos aprender como definir classes e métodos em runtime, ...

Metaprogramming - Alias para métodos e atributos

Nesta aula iremos aprender a renomear ou duplicar métodos de forma din...

Metaprogramming - Hooks

Nesta aula iremos aprender os conceitos de hooks, veremos como utiliza...



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