Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

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

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.
Якщо всі методи матимуть модифікатор доступу public, це призведе до того, що всі інші класи та компоненти програми матимуть безперешкодний доступ до цих методів.
Це може призвести до непередбачуваних конфліктів у програмі.
З іншого боку, це може полегшити взаємодію між класами та сприяти швидкої розробці, але такий підхід не завжди є безпечним і може породжувати проблеми зі збереженням даних та конфіденційністю.
24 lip 11:47

Jak zmienić język w Steam na ukraiński?

meme code
meme code@memecode
24 lip 12:01

Co to jest "Przetwarzanie shaderów Vulkan" w Steam?

meme code
meme code@memecode
24 lip 12:17

Jak ustawić Counter-Strike: GO w Ubuntu na pełny ekran bez uruchamiania gry?

meme code
meme code@memecode
20 lis 19:35

Jak przywrócić usunięty plik (Trix), który był przechowywany na Amazon S3?

meme code
meme code@memecode
29 lis 08:47

Czym różni się var od let w Javascript?

meme code
meme code@memecode
7 gru 07:42

Czym jest enkapsulacja (encapsulation) w OOP?

meme code
meme code@memecode
7 gru 08:25

Czym jest OOP (programowanie obiektowe)?

meme code
meme code@memecode
9 gru 12:00

Czym jest dziedziczenie w Ruby? Przykłady złego i dobrego dziedziczenia.

meme code
meme code@memecode
9 gru 12:15

Czym są najlepsze praktyki w programowaniu?

meme code
meme code@memecode
9 gru 12:21

Czym jest polimorfizm? Przykład użycia polimorfizmu w Ruby.

meme code
meme code@memecode
9 gru 12:46

Що таке патерн/шаблон проєктування?

meme code
meme code@memecode
10 gru 14:03

Czym jest wzorzec projektowy w programowaniu?

meme code
meme code@memecode