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