Els objectes en Ruby es poden classificar en tres:
- Públics -> Públic
- Privats -> Private
- Protegits -> Protected
El alcanç d’una variable o d’un mètode, conegut en anglés com scope fa referència a des d’on es pot manar cridar una variable.
Els mètodes públics són mètodes de classe. Es poden cridar des de qualsevol lloc. Des de dins o fora de la classe.
Els mètodes privats poden cridar-se únicament des de dins de la classe. A diferència d’altres llenguatges una classe filla sí que hereta els mètodes privats de la classe. Es poden cridar des de dins de la classe o des de dins d’una classe filla, però no des de fora.
Els mètodes progegits pot cridar-se des d’altres classes sempre que siguen del mateix tipus.
class Humano
def initialize
self.publico
end
def publico
puts "Soy público"
end
end
class Tutor < Humano
end
Humano.new
Tutor.new.publico
Output
Soy público
Soy público
Soy público
D’aquesta manera un mètodo privat donarà una herrada si el cridem des de fora de la classe:
class Humano
def initialize
self.publico
end
def publico
puts "Soy público"
end
private
def privado
puts "Soy privado"
end
end
class Tutor < Humano
def initialize
self.public
end
end
Humano.new.privado
Output
Soy público
scope.rb:23:in `<main>': private method `privado' called for #<Humano:0x00000001dac090> (NoMethodError)
Fem la classe constructora privada:
class Humano
def initialize
privado
end
def publico
puts "Soy público"
end
private
def privado
puts "Soy privado"
end
end
class Tutor < Humano
def initialize
self.public
end
end
Humano.new
Output
Soy privado
3. Mètode protegit
class Humano
def initialize
privado
end
def publico
puts "Soy público"
end
private
def privado
puts "Soy privado"
end
protected
def protegido
puts "Soy protegido"
end
class Tutor < Humano
def initialize
@iner =Humano.new
end
def llamar_protegido
@inner.protegido
end
end
class Alien
def initialize
@inner = Humano.new
end
def llamar_protegido
@inner.protegido
end
end
tutor = Tutor.new
alien = Alien.new
puts tutor.is_a?(Humano)
puts alien.is_a?(Humano)