← strona głównaProgramowanie (Програмування)

Kontrola widoczności w Ruby (public, private i protected)

Kontrola widoczności w Ruby (public, private i protected). Jak działają metody public, private i protected?

Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
W Ruby dostęp do metod jest kontrolowany za pomocą trzech słów kluczowych: public, private i protected. Słowa kluczowe te są używane do kontrolowania widoczności metod w klasie (enkapsulacji).

Public (Metody publiczne)

Jeśli chodzi o metody publiczne - należy zapamiętać kilka podstawowych kwestii. Metody zadeklarowane jako publiczne mogą być wywoływane przez każdego - zarówno wewnątrz, jak i na zewnątrz klasy. Domyślnie wszystkie metody w klasie są publiczne. Można wskazać, że metoda jest publiczna, ale dla skrócenia i uproszczenia kodu tego się nie robi.
class MyClass
  def public_method_name
    # Ta metoda jest domyślnie publiczna
  end

  public :public_method_name  # Wyraźnie wskazujemy ją jako publiczną, ale można tego nie robić
end
class MyClass
  def public_method_name
    # Ta metoda jest domyślnie publiczna
  end
end
Przykłady są technicznie identyczne - public_method_name to metoda publiczna. 

Private (Metody prywatne)

Metody zadeklarowane jako prywatne mogą być wywoływane tylko wewnątrz tej klasy, w której są zdefiniowane. Nie można ich wywołać z zewnątrz klasy, nawet z instancji tej klasy.
class MyClass
  private # wszystkie metody, które idą po tej linii - są prywatne

  def private_method_name
    # Ta metoda jest prywatna
  end
end

Protected (Metody chronione)

Metody zadeklarowane jako protected (chronione) mogą być wywoływane tylko wewnątrz tej samej klasy lub instancji jej podklas. Podobnie jak w przypadku dostępu prywatnego, ale zapewnia dostęp dla podklas.
class MyClass
  protected # wszystkie metody, które idą po tej linii - są chronione

  def protected_method
    # Ta metoda jest chroniona
  end
end
Pytania dotyczące public, private i protected często pojawiają się na rozmowach kwalifikacyjnych. Najlepiej ta informacja jest przyswajana, gdy uczy się na przykładach / ćwiczeniach. Na przykład:

Ćwiczenie na naukę metod public, private i protected

Utwórz klasę "Użytkownik" (User):
  • Utwórz klasę User z następującymi właściwościami: imię (name) i wiek (age).
  • Wszystkie właściwości powinny być prywatne.
Dodaj metody:
  • Dodaj metodę witać się (greet), która wyświetla wiadomość: "Cześć, jak leci?"
  • Dodaj metodę dostęp_do_wieku (access_age), która zwraca wiek użytkownika.
Zmień poziomy dostępu:
  • Uczyń metodę greet publiczną.
  • Uczyń metodę access_age chronioną.
Utwórz podklasę "Administrator" (Admin):
  • Utwórz podklasę Admin, która dziedziczy po klasie User.
Sprawdź działanie:
  • Utwórz obiekt klasy User i obiekt klasy Admin.
  • Wywołaj metodę greet na obiektach obu klas.
  • Spróbuj uzyskać dostęp do wieku za pomocą metody access_age na obiekcie klasy User i spróbuj to samo na obiekcie klasy Admin.
Zapisz swoje obserwacje:
  • Zapisz, które metody wywołałeś pomyślnie, a które spowodowały błąd.
  • Określ, które metody można wywołać z zewnątrz klasy, a które nie.
Optymalizuj kod (refaktoryzacja)
  • zorganizuj kod
  • zmień nazwy metod na bardziej zrozumiałe (access_age -> age)
Oto szkielet kodu, który może ci trochę pomóc w orientacji:
class User
  def initialize(name, age)
    @name = name
    @age = age
  end

  def greet
    puts "Cześć, jak leci?"
  end

  def access_age
    @age
  end

  private

  def private_method
    puts "To jest metoda prywatna"
  end

  protected

  def protected_method
    puts "To jest metoda chroniona"
  end
end

class Admin < User
  # Admin dziedziczy wszystkie właściwości i metody z User
end

# Tworzenie obiektów
user = User.new("Użytkownik", 25)
admin = Admin.new("Administrator", 30)

# Wywołanie metody publicznej
user.greet
admin.greet

# Próba wywołania metody chronionej
# user.protected_method  # Spowoduje błąd

# Próba wywołania metody prywatnej
# user.private_method  # Spowoduje błąd

# Wyjście wieku
puts "Wiek użytkownika: #{user.access_age}"
puts "Wiek administratora: #{admin.access_age}"
Jeśli to ćwiczenie wydaje się trudne - wróć do niego za jakiś czas. Powtórz, jak działają klasy, co to jest initialize, co to jest instancja klasy itd.

🔥 Więcej postów

Wszystkie wpisy
Programowanie (Програмування)7 gru '23 08:25

Czym jest OOP (programowanie obiektowe)?

Czym jest OOP (programowanie obiektowe)? Jakie są zalety OOP? Jakie języki wspierają paradygmat OOP?