← StartseiteProgrammierung (Програмування)

Sichtbarkeitskontrolle in Ruby (public, private und protected)

Sichtbarkeitskontrolle in Ruby (public, private und protected). Wie funktionieren public, private und protected Methoden?

InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In Ruby wird der Zugriff auf Methoden durch drei Schlüsselwörter gesteuert: public, private und protected. Diese Schlüsselwörter werden verwendet, um die Sichtbarkeit von Methoden in einer Klasse zu steuern (Kapselung).

Public (Öffentliche Methoden)

Bezüglich öffentlicher Methoden sollten einige grundlegende Punkte beachtet werden. Methoden, die als öffentlich deklariert sind, können von jedem aufgerufen werden - sowohl innerhalb als auch außerhalb der Klasse. Standardmäßig sind alle Methoden in einer Klasse öffentlich. Es kann angegeben werden, dass eine Methode öffentlich ist, aber um den Code zu verkürzen und zu vereinfachen, wird dies nicht getan.
class MyClass
  def public_method_name
    # Diese Methode ist standardmäßig öffentlich
  end

  public :public_method_name  # Wir geben sie ausdrücklich als öffentlich an, aber es ist nicht notwendig
end
class MyClass
  def public_method_name
    # Diese Methode ist standardmäßig öffentlich
  end
end
Die Beispiele sind technisch identisch - public_method_name ist eine öffentliche Methode.

Private (Private Methoden)

Methoden, die als privat deklariert sind, können nur innerhalb der Klasse aufgerufen werden, in der sie definiert sind. Sie können nicht von außerhalb der Klasse aufgerufen werden, selbst nicht von einer Instanz dieser Klasse.
class MyClass
  private # alle Methoden, die nach dieser Zeile kommen - privat

  def private_method_name
    # Diese Methode ist privat
  end
end

Protected (Geschützte Methoden)

Methoden, die als protected (geschützt) deklariert sind, können nur innerhalb derselben Klasse oder von Instanzen ihrer Unterklassen aufgerufen werden. Ähnlich wie beim privaten Zugriff, aber es ermöglicht den Zugriff für Unterklassen.
class MyClass
  protected # alle Methoden, die nach dieser Zeile kommen - geschützt

  def protected_method
    # Diese Methode ist geschützt
  end
end
Fragen zu public, private und protected kommen ziemlich häufig in Vorstellungsgesprächen vor. Am besten wird diese Information verinnerlicht, wenn man anhand von Beispielen / Übungen lernt. Zum Beispiel:

Übung zum Lernen von public, private und protected Methoden

Erstellen Sie eine Klasse "Benutzer" (User):
  • Erstellen Sie die Klasse User mit den folgenden Eigenschaften: Name (name) und Alter (age).
  • Alle Eigenschaften sollten privat sein.
Fügen Sie Methoden hinzu:
  • Fügen Sie eine Methode greet hinzu, die die Nachricht ausgibt: "Hallo, wie geht's?"
  • Fügen Sie eine Methode access_age hinzu, die das Alter des Benutzers zurückgibt.
Ändern Sie die Zugriffslevel:
  • Mach die Methode greet öffentlich.
  • Mach die Methode access_age geschützt.
Erstellen Sie eine Unterklasse "Administrator" (Admin):
  • Erstellen Sie die Unterklasse Admin, die von der Klasse User erbt.
Überprüfen Sie die Funktionalität:
  • Erstellen Sie ein Objekt der Klasse User und ein Objekt der Klasse Admin.
  • Rufen Sie die Methode greet auf den Objekten beider Klassen auf.
  • Versuchen Sie, auf das Alter über die Methode access_age auf dem Objekt der Klasse User zuzugreifen und versuchen Sie dasselbe auf dem Objekt der Klasse Admin.
Notieren Sie Ihre Beobachtungen:
  • Notieren Sie, welche Methoden Sie erfolgreich aufgerufen haben und welche zu einem Fehler geführt haben.
  • Bestimmen Sie, welche Methoden von außerhalb der Klasse aufgerufen werden können und welche nicht.
Optimieren Sie den Code (Refactoring)
  • Organisieren Sie den Code
  • Ändern Sie die Methodennamen in verständlichere (access_age -> age)
Hier ist ein Codegerüst, das Ihnen helfen kann, sich zurechtzufinden:
class User
  def initialize(name, age)
    @name = name
    @age = age
  end

  def greet
    puts "Hallo, wie geht's?"
  end

  def access_age
    @age
  end

  private

  def private_method
    puts "Das ist eine private Methode"
  end

  protected

  def protected_method
    puts "Das ist eine geschützte Methode"
  end
end

class Admin < User
  # Admin erbt alle Eigenschaften und Methoden von User
end

# Objekterstellung
user = User.new("Benutzer", 25)
admin = Admin.new("Administrator", 30)

# Aufruf der öffentlichen Methode
user.greet
admin.greet

# Versuch, eine geschützte Methode aufzurufen
# user.protected_method  # Führt zu einem Fehler

# Versuch, eine private Methode aufzurufen
# user.private_method  # Führt zu einem Fehler

# Ausgabe des Alters
puts "Alter des Benutzers: #{user.access_age}"
puts "Alter des Administrators: #{admin.access_age}"
Wenn diese Übung schwierig erscheint, kehren Sie nach einer Weile dazu zurück. Wiederholen Sie, wie Klassen funktionieren, was initialize ist, was eine Instanz einer Klasse ist usw.

🔥 Weitere Beiträge

Alle Beiträge
Computer und Technologien (Комп'ютери та технології)24. Jul '23, 12:01 Uhr

Was ist "Vulkan-Shader-Verarbeitung" in Steam?

Was ist "Vulkan-Shader-Verarbeitung" in Steam? Warum ist die Vulkan-Shader-Verarbeitung notwendig?