Objekt
Inhaltsverzeichnis
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.