Nesta aula iremos aprender como implementar Interface, Abstração e classe Singleton, de uma forma muito simples no Ruby.

Interface, Abstração e Singleton


Interface

Classe sem implementação, deve ser implementada em uma classe filha através da herança. Você não conseguirá criar uma instância a partir dela. Pode ser vista como uma "ideia".

Abstrata

Classe com algumas implementações, deve ser implementada as classes que requerem numa classe filha através da herança. Você não conseguirá criar uma instância a partir dela. Pode ser vista como uma "ideia" com alguns métodos já implementados, mas não todos.

Singleton

Essa classe não permite criar uma nova instância, porém ela tem uma instância única.

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 'interface'
        require_relative 'abstrata'
        require_relative 'klass'

        debugger

        x = "" 
      
    

Para o arquivo interface.rb faça:

      
        class Interface
          def initialize
            raise "Classe não pode ser instânciada, somente herdada, e implementada"
          end

          def test1
           raise "Método para ser implementado"
          end

          def test2
          raise "Método para ser implementado"
          end
        end
      
    

Para o arquivo klass.rb faça:

      
        class Klass < Interface
          def initialize
          end

          def test1
            "implementado"
          end

          def test2
            "implementado"
          end
        end
      
    

Para o arquivo abstrata.rb faça:

      
        class Abstrata < Interface
          def initialize
            raise "Classe não pode ser implementada, somente herdada"
          end

          def test1
            raise "Classe não pode ser implementada"
          end

          def test2
            "este é o teste 2"
          end
        end
      
    

Para o arquivo klass.rb mudaremos algumas coisas:

      
        class Klass < Abstrata
          def initialize;end
        end
      
    

Neste ponto se tentarmos instanciar a classe Abstrata receberemos um erro, já na Klass, conseguimos implementar através da herança, mas apenas o método test2, visto que o test1 está sinalizado para não ser implementado na Abstrata.


Singleton

O Ruby tem um Singleton próprio para utilizarmos.

Aqui criamos outro diretório(pasta) para testar.

Para o arquivo aula.rb mudaremos algumas coisas:

      
        require 'byebug'

        require_relative 'instancia_unica'

        instancia = InstanciaUnica.instance

        debugger

        puts InstanciaUnica.new

        x = ""
      
    

Para o arquivo instancia_unica.rb:

      
        require 'singleton'
        
        class InstanciaUnica
          include Singleton

          def test1
            "Esse é o test 1"
          end

          def test2
            "Esse é o test 2"
          end
        end
      
    

Agora é só rodar com ruby aula.rb, se tentar criar uma instância de InstanciaUnica não conseguirá, apenas utilizará com InstanciaUnica.instance.

Observe que o endereço de memória será sempre o mesmo, a menos que reiniciar o script ele não irá mudar.




Próximas Aulas


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...

Metaprogramming - Missings

Nesta aula iremos aprender a utilizar os comandos const_missing e meth...



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