Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Point
# Initialisiere unsere Klassen-Instanzvariablen in der Klassendefinition selbst
@n = 0 # Wie viele Punkte wurden erzeugt?
@totalX = 0 # Summe aller x-Koordinaten
@totalY = 0 # Summe aller y-Koordinaten
def initialize(x,y) # Initialize-Methode
    @x,@y = x, y # Setzen der initialen Werte für Instanzvariablen
end
def self.new(x,y) # Klassenmethode zum Erzeugen neuer Point-Objekte
    # Verwende die Klassen-Instanzvariablen in dieser Klasse, um die Daten zu
    # sammeln
    @n += 1 # Zählen, wie viele Punkte erzeugt wurden
    @totalX += x # Die Koordinaten aufsummieren
    @totalY += y
    super # Die eigentliche Definition von new aufrufen, um einen Point
     # zu erzeugen (später mehr)
end
# Eine Klassenmethode, um die gesammelten Daten auszugeben
def self.report
    # Hier verwenden wir die Klassen-Instanzvariablen in einer Klassenmethode.
    puts "Anzahl der erzeugten Punkte: #@n"
    puts "Mittelwert x-Koordinate: #{@totalX.to_f/7n}"
    puts "Mittelwert y-Koordinate: #{@totalY.to_f/7n}"
end
end
    Da es sich bei Klassen-Instanzvariablen einfach um Instanzvariablen von Klassenobjekten handelt, können wir
attr
,
attr_reader
und
attr_accessor
nutzen, um Akzessormethoden für sie zu erzeugen. Der Trick ist dabei allerdings, diese Metaprogrammierungsmethoden im richtigen Kontext aufzurufen. Denken Sie daran, dass man Klassenmethoden über die Syntax
class << self
definieren kann. Dieselbe Syntax ermöglicht uns, Attributakzessormethoden für Klassen-Instanzvariablen zu definieren:
class << self
attr_accessor :n, :totalX, :totalY
end
    Mit den auf diese Weise definierten Akzessoren können wir auf unsere Daten via
Point.n
,
Point.totalX
und
Point.totalY
zugreifen.

7.2 Sichtbarkeit von Methoden: public, protected, private
    Instanzmethoden können public, private oder protected (öffentlich, privat oder geschützt) sein. Wenn Sie schon mit anderen objektorientierten Sprachen gearbeitet haben, werden Ihnen diese Begriffe vertraut sein. Allerdings müssen Sie ein wenig aufpassen, da diese Worte in Ruby teilweise eine etwas andere Bedeutung haben als in anderen Sprachen.
    Methoden sind normalerweise öffentlich, sofern sie nicht explizit als privat oder geschützt deklariert werden. Eine Ausnahme ist die Methode
initialize
, die immer implizit privat ist. Eine andere Ausnahme sind alle »globalen« Methoden, die außerhalb einer Klassendefinition deklariert wurde — solche Methoden sind als private Instanzmethoden von
Object
definiert. Eine öffentliche Methode kann von überall aus aufgerufen werden – es gibt keine Einschränkungen bei ihrer Verwendung.
    Eine private Methode gilt in der Implementierung einer Klasse als intern und kann nur von anderen Instanzmethoden der Klasse aufgerufen werden (oder, wie wir später sehen werden, in ihren Subklassen). Private Methoden werden implizit für
self
aufgerufen und lassen sich nicht explizit für ein Objekt aufrufen. Wenn
m
eine private Methode ist, müssen Sie sie im funktionalen Stil als
m
aufrufen. Sie können nicht
o.m
oder auch nur
self.m
schreiben.
    Eine geschützte Methode ist wie eine private Methode – sie kann nur innerhalb der Implementierung einer Klasse oder ihrer Subklassen aufgerufen werden. Sie unterscheidet sich von einer privaten Methode darin, dass sie explizit für jede Instanz der Klasse aufgerufen werden kann und nicht auf den impliziten Aufruf via
self
beschränkt ist. Eine geschützte Methode kann zum Beispiel genutzt werden, um einen Akzessor zu definieren, mit dem die Instanzen einer Klasse einen gemeinsamen Zustand nutzen, die Anwender der Klasse aber nicht darauf zugreifen können.
    Geschützte Methoden werden am seltensten verwendet und sind auch auch am schwersten zu verstehen. Die Regel, wann sich eine geschützte Methode aufrufen lässt, kann formeller wie folgt beschrieben werden: Eine geschützte Methode, die durch eine Klasse
C
definiert ist, kann für ein Objekt
o
in einem Objekt
p
nur genau dann aufgerufen werden, wenn die Klassen von
o
und
p
Subklassen von
C
sind oder
C
entsprechen.
    Die Methodensichtbarkeit wird durch drei Methoden
public
,
private
und
protected
deklariert. Dabei handelt es sich um Instanzmethoden der Klasse
Module
. Alle Klassen sind Module und innerhalb einer Klassendefinition (aber außerhalb der Methodendefinition) bezieht sich
self
auf die definierte Klasse. Daher können
public
,
private
und
protected
so verwendet werden, als ob es sich um Schlüsselwörter der Sprache handelt. Tatsächlich handelt es sich aber um

Weitere Kostenlose Bücher