Nesta aula iremos aprender como implementar Interface, Abstração e classe Singleton, de uma forma muito simples no Ruby.
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".
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.
Essa classe não permite criar uma nova instância, porém ela tem uma instância única.
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.
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.
Nesta aula iremos aprender como criar métodos de forma dinâmica, iremo...
Nesta aula iremos aprender como abrir uma classe, com os comandos inst...
Nesta aula iremos aprender como definir classes e métodos em runtime, ...
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.