Die reale Welt ist voller Objekte und wir können sie klassifizieren. Zum Beispiel sagt ein sehr junges Kind wahrscheinlich "wow wow", wenn es einen Hund sieht, unabhängig von der Rasse; Wir sehen die Welt tatsächlich in Kategorien.
In der Terminologie der objektorientierten Programmierung wird die Kategorie eines Objekts "Hund" eine Klasse genannt, und einige spezifische Objekte, die zu einer Klasse gehören, werden Instanzen dieser Klasse genannt.
Um ein Objekt in Ruby oder einer anderen Sprache zu erstellen, definieren Sie normalerweise zuerst die Eigenschaften der Klasse und instanziieren sie dann. Um den Vorgang zu veranschaulichen, definieren wir eine einfache Klasse * Hund *.
ruby> class Dog | def speak | print "Bow Wow\n" | end | end nil
In Ruby ist eine Klassendefinition ein Codeblock zwischen den Schlüsselwörtern * class * und * end *. Eine * def * -Anweisung innerhalb dieses Bereichs beginnt die Definition einer Klassenmethode, die wir im vorherigen Kapitel besprochen haben und die dem spezifischen Verhalten eines Objekts dieser Klasse entspricht.
Wir haben jetzt eine definierte Klasse * Hund * und können diese verwenden, um einen Hund zu erstellen:
ruby> pochi = Dog.new #<Dog:0xbcb90>
Wir haben eine neue Instanz der Klasse * Dog, * erstellt und sie * pochi * genannt. Die Methode * new * einer beliebigen Klasse erstellt eine neue Instanz. Da * pochi * gemäß unserer Klassendefinition * Hund * ist, hat es die Eigenschaften, die es unserer Meinung nach haben sollte. Da unsere Idee für die Klasse einfach war, gibt es nur einen Trick, um den wir pochi bitten können.
ruby> pochi.speak Bow Wow nil
Das Erstellen einer neuen Instanz einer Klasse wird manchmal als Instanziieren dieser Klasse bezeichnet. Wir müssen den Hund erschaffen, bevor wir ihn bitten, etwas zu tun; Wir können die Klasse * Hund * nicht bitten, für uns zu bellen.
ruby> Dog.speak ERR: (eval):1: undefined method `speak' for Dog:class
Es macht keinen Sinn, als würde man versuchen, das Konzept eines Sandwiches anstelle des Sandwichs selbst zu essen.
Wenn wir hingegen die Stimme eines Hundes ohne emotionale Bindung hören möchten, können wir einen ephemeren, temporären Hund erstellen (instanziieren), der ein wenig Lärm macht, bevor er verschwindet.
ruby> (Dog.new).speak # or more commonly, Dog.new.speak Bow Wow nil
"Warte", sagst du, "heißt das, dass dieser arme Kerl danach verschwindet?" Ja, es stimmt: Wenn wir ihm keinen Namen geben (wie bei pochi ), wird Rubys automatischer Müllsammler ihn für einen streunenden Hund halten und ihn gnadenlos loswerden. Es ist eigentlich in Ordnung, wissen Sie, wir können alle Hunde machen, die wir wollen.