В Ruby классы являются важным строительным блоком объектно-ориентированного программирования. Они предоставляют способ организации и инкапсуляции кода, обеспечивая модульность и повторное использование кода. Внутри класса существуют различные уровни доступа, которые контролируют видимость методов и переменных. В этой статье мы рассмотрим различные уровни доступа внутри класса в Ruby и приведем примеры для каждого.
- Публичный доступ:
Публичные методы и переменные доступны откуда угодно, как внутри класса, так и за его пределами. По умолчанию все методы Ruby являются общедоступными, если не указано иное.
class MyClass
def public_method
puts "This is a public method."
end
end
obj = MyClass.new
obj.public_method
- Частный доступ:
Доступ к частным методам и переменным возможен только внутри самого класса. Их нельзя вызывать извне класса, включая экземпляры подкласса.
class MyClass
private
def private_method
puts "This is a private method."
end
end
obj = MyClass.new
obj.private_method #=> NoMethodError: private method `private_method' called
- Защищенный доступ:
Доступ к защищенным методам и переменным возможен внутри класса и его подклассов. Их также можно вызывать с помощью одного и того же экземпляра класса или его подклассов.
class MyClass
protected
def protected_method
puts "This is a protected method."
end
end
class MySubclass < MyClass
def call_protected_method(other)
other.protected_method
end
end
obj1 = MyClass.new
obj2 = MySubclass.new
obj1.protected_method #=> NoMethodError: protected method `protected_method' called
obj2.call_protected_method(obj1) #=> This is a protected method.
- Модификаторы доступа:
Ruby предоставляет модификаторы доступа для явного определения уровня доступа к методам и переменным. Эти модификаторы можно использовать для изменения уровня доступа внутри класса в любой момент.
class MyClass
def public_method
puts "This is a public method."
end
private
def private_method
puts "This is a private method."
end
protected
def protected_method
puts "This is a protected method."
end
end
Понимание уровней доступа к классам имеет решающее значение для разработки хорошо структурированных и безопасных программ Ruby. Используя публичный, приватный и защищенный уровни доступа, вы можете контролировать видимость и доступность методов и переменных в ваших классах. Это способствует инкапсуляции и обеспечивает правильное использование вашего кода.