Nesta aula iremos aprender as marcações public, private, protected e veremos as diferenças entre elas.
Privada: Fica restrita ao escopo da classe.
Protegida: Fica restrita ao escopo da classe e ás classes que herdam ela.
Pública: Fica com acesso livre.
Exemplos de acesso.
class Carro
protected
def Danilo
# método protegida
end
end
Na situação acima caso fizéssemos: Carro.new.Danilo
, não funcionaria pois o método está protegido.
Importante notar que:
Uma vez definido o acesso ele será aplicado a todo código abaixo, tendo que ser mudado explicitamente para outro modo caso necessário.
Você pode utilizar um método protegido dentro de um público e assim exibir o valor protegido.
E ao utilizar um método sem informar o acesso, ele será público por padrão.
class Carro
def mostrar
# método público
end
private
def olhar
# método privado
end
protected
def ver
# método protegido
end
end
Fazendo um método publico receber o protegido por herança é uma forma de ter acesso ao método protected de outra classe:
class Carro
protected
def Danilo
# método protegido
end
end
class Fiesta < Carro
def mostrar
# método publico
Danilo
end
end
Fiesta.new.mostrar
Lembrando que se o método Danilo
fosse privado não seria possível fazer o processo acima, um
método privado não pode ser herdado.
Como de praxe copie o arquivo padrão da aula anterior 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 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} - #{algo_mais}"
end
private
def algo_mais
"este é um método privado para retornar algo a mais"
end
end
Uma diferença entre o acesso do privado e o protegido é que o privado não pode ser acessado diretamente nem dentro ou fora da classe, já com o protegido não é possível criar uma nova instância para acessa-lo.
Mais testes:
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} - #{algo_mais}"
end
private
def algo_mais
"este é um método privado para retornar algo a mais"
end
def algo_mais2
"este é um método privado para retornar algo a mais"
end
public
def algo_mais
"este é um método público para retornar algo a mais"
end
protected
def algo_mais_protected
"este é um método protegido para retornar algo a mais"
end
end
Utilizando método privado com herança.
class Fiesta < Carro
def mostrar_privado
algo_mais
Danilo
end
end
Fiesta.mostrar_privado
Se fosse criada uma nova instância de Carro
nosso código não funcionaria.
class Fiesta < Carro
def mostrar_privado
algo_mais
Danilo
end
end
Carro.new.algo_mais
Utilizando um método protegido.
class Fiesta < Carro
def mostrar_privado
algo_mais
Carro.new.algo_mais
end
def mostrar_protegido
algo_mais_protected
end
end
Nesta aula iremos aprender como fazer polimorfismo no Ruby, também ire...
Nesta aula iremos aprender como implementar Interface, Abstração e cla...
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...
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.