Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Sichtbarkeitskontrolle in Ruby (public, private und protected)

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

Wie ändere ich die Sprache in Steam auf Ukrainisch?

meme code
meme code@memecode
24. Jul, 12:01 Uhr

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

meme code
meme code@memecode
24. Jul, 12:17 Uhr

Wie man Counter-Strike: GO in Ubuntu im Vollbildmodus startet, ohne das Spiel zu starten?

meme code
meme code@memecode
20. Nov, 19:35 Uhr

Wie kann ich eine gelöschte Datei (Trix), die auf Amazon S3 gespeichert war, wiederherstellen?

meme code
meme code@memecode
29. Nov, 08:47 Uhr

Was ist der Unterschied zwischen var und let in Javascript?

meme code
meme code@memecode
07. Dez, 07:42 Uhr

Was ist Kapselung (Encapsulation) in der OOP?

meme code
meme code@memecode
07. Dez, 08:25 Uhr

Was ist OOP (objektorientierte Programmierung)?

meme code
meme code@memecode
09. Dez, 12:00 Uhr

Was ist Vererbung in Ruby? Beispiele für schlechtes und gutes Vererben.

meme code
meme code@memecode
09. Dez, 12:15 Uhr

Was ist eine Best Practice in der Programmierung?

meme code
meme code@memecode
09. Dez, 12:21 Uhr

Was ist Polymorphismus? Ein Beispiel für die Verwendung von Polymorphismus in Ruby.

meme code
meme code@memecode
09. Dez, 12:46 Uhr

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

meme code
meme code@memecode
10. Dez, 14:03 Uhr

Was ist ein Entwurfsmuster in der Programmierung?

meme code
meme code@memecode