Objekt

Aus Scientia
Wechseln zu: Navigation, Suche

Beschreibung

Was ist ein Objekt?

Objekte sind Instanzen von Klassen. Das bedeutet, dass alle Klassen in Objekte gefasst werden können - sie müssen nicht zwangsläufig.

Beispiel:

class Mensch
 ...
end
klaus = Mensch.new

Ein Objekt representiert eine Klasse.
Wenn man einer Variablen eine Klasse zuweist, dann wird diese Variable zu einer Instanz der Klasse.
Gleichzeitig wird die Variable dabei zu einem Objekt. Alle Methoden die in der Klasse definiert wurden, werden in dieses eine Objekt übertragen, so dass das Objekt nun etwas wie ein Dubel der Klasse ist.
Das Objekt ist nun eigenständig und benötigt die Klasse aus der es Stammt nicht mehr.
Es können beliebig viele Objekte von einer Klasse abgeleitet werden, so dass es sich anbietet z.B. eine Klasse für einen Gegner zu schreiben und viele Objekte von dieser Klasse abzuleiten, die dann viele Gegner von einer Sorte darstellen.
Wenn ein Objekt verändert wird, dann verändert es weder seine Stammklasse noch die anderen davon abgeleiteten Klassen und Objekte mit.

Ein bildliches Beispiel

Die Autofirma BMW produziert den "BMW Z4" serienmäßig und benutzt als Vorlage einen Bauplan.
Nun produziert BMW viele, viele "BMW Z4", die alle ein paar individuelle Eigenschaften haben, wie z.B. die Farbe oder die Innenausstattung.
Nun kann der schlussendliche Besitzer des Autos immer noch die Farbe seines Wagens ändern oder ihn ganz individuell tunen.
Als RGSSscript sieht das dann so aus:

class BMW_Z4                                      #Hier beginnt der allgemeine Bauplan des BMW Z4
 attr_reader     :laenge                             #die Länge des autos ist vom Anwender unveränderbar (=attr_reader)
 attr_reader     :breite                             #die Breite auch
 attr_reader     :hoehe                              #genau wie die Höhe
 attr_reader     :bodenabstand                       #und der Bodenabstand
 attr_reader     :nummernschild                      #und das Nummernschild 
 attr_accessor   :farbe                              #die Farbe des Autos lässt sich aber ganz easy ändern, also kann's auch der Anwender
 def initialize(nummernschild, farbe)                #Hier steht, was zu tun ist, wenn das auto gebaut wird. (Nummernschild und Farbe darf der Anwender entscheiden)
  @laenge = 4.11                                        #die Länge beträgt 4.11m
  @breite = 1.78                                        #die Breite 1.78m
  @hoehe = 1.30                                         #die Höhe 1.30m
  @bodenabstand = 0.30                                  #der Bodenabstand 30cm
  @nummernschild = nummernschild                        #das Nummernschild wird zu dem Nummernschild, was der Anwender haben will
  @farbe = farbe                                        #die Farbe wird zu der Lieblingsfarbe des Anwenders
 end                                                 #Hier endet die Erklärung, was bei der Herstellung zu beachten ist
 def tieferlegen(differenz)                          #Hier steht, was das Auto zu tun hat, wenn es tiefergelegt wird
  @bodenabstand -= differenz                            #es verringert den Bodenabstand um die Differenz, die der Anwender bestimmt
  @hoehe -= differenz                                   #es verändert auch seine Gesamthöhe um die Differenz
 end                                                 #Jetzt weiß das Auto, was es machen muss, wenn's tiefergelegt wird
end                                               #Hier endet der Bauplan
mein_BMW = BMW_Z4.new("HH ER 340", "rot")         #jetzt kaufe ich mir diesen angeblich so tollen "BMW Z4" und gebe ihm das Nummernschild "HH ER 340" und die Farbe "rot"
mein_BMW.tieferlegen(0.05)                        #Ich bin unzufrieden: Das Auto sieht nicht sportlich aus, also lasse ich es 5cm tieferlegen
mein_BMW.farbe = "blau"                           #Ich hab' 'ne neue Lieblingsfarbe also: Farbe kaufen und Blau anmahlen

Objekt definieren

Damit man ein Objekt definieren kann, muss eine Klasse existieren, aus der das Objekt gebildet werden soll.

Die Formel zur Definition eines Objektes sieht wie folgt aus:

 ->Objektname<- = ->Klassenname<-.new

Als Namenszeichen für Objekte stehen die Zeichen A-Z, a-z, 0-9, und "_" zur Verfügung, wobei das erste Zeichen nur a-z oder "_" sein darf.

Variablen und Objekte

Instanzvariablen

Instanzvariablen sind nur innerhalb eines Objektes gültig.

Klassen Variablen

Klassen Variablen sind in allen Objekten einer Klasse gültig.

Globale Variablen

Globale Variablen sind überall gültig, das heißt sowohl innerhalb als auch außerhalb von allen Objekten.

Vordefinierte Klassen

In RGSS gibt es zwar keine vordefinierten Objekte, aber ein paar vordefinierte Klassen, aus denen wir Objekte bilden können.
(Vordefiniert bedeutet, dass man eine Klasse nicht selber definieren muss, sondern dass diese schon definiert wurde) Z.B. "Sprite" oder "Win23API" sind vordefinierte Klassen.