Різниця між типами методів private and protected у Ruby

У Ruby існують три основні рівні доступу до методів: public, protected та private. Розглянемо детально відмінності між private і protected методами.

  1. Область видимості:
  • Private: Метод доступний лише всередині класу або модуля, де він оголошений. Не можна викликати метод ззовні класу або з іншого екземпляра класу.
  • Protected: Метод доступний всередині класу, де він оголошений, а також у підкласах. Метод може бути викликаний іншими екземплярами того ж класу або підкласів.
  1. Спосіб виклику:
  • Private: Метод може бути викликаний лише неявно, тобто без вказання приймача (неможливо використовувати self або ім’я іншого об’єкта перед ім’ям методу).
  • Protected: Метод може бути викликаний як неявно, так і явним чином (з використанням self або іншого об’єкта того ж класу чи підкласу).
  1. Приклад використання:
class Example
  private
  def private_method
    "This is a private method"
  end
end

ex = Example.new
ex.private_method # виклик ззовні класу, призведе до помилки

class Example
  protected
  def protected_method
    "This is a protected method"
  end

  def call_protected(other)
    other.protected_method  # правильний виклик
  end
end

ex1 = Example.new
ex2 = Example.new
ex1.call_protected(ex2)  # виклик можливий, тому що метод protected
ex1.protected_method  # виклик ззовні класу, призведе до помилки

  1. Спадкування:
  • Private: Не можуть бути викликані з підкласів явним чином. Виклик можливий лише неявно всередині класу.
  • Protected: Можуть бути викликані з підкласів як неявно, так і явним чином.
  1. Інкапсуляція:
  • Private: Забезпечують високий рівень інкапсуляції, оскільки обмежують доступ до методу лише поточним об’єктом.
  • Protected: Забезпечують менший рівень інкапсуляції, дозволяючи доступ з інших екземплярів того ж класу або підкласів.

Висновок

Private методи є більш обмеженими та приховують деталі реалізації краще, ніж protected методи, оскільки protected методи можуть бути викликані іншими екземплярами того ж класу або його підкласів, що робить їх більш доступними в межах ієрархії класів.

1 Вподобання