Реальний світ наповнений об'єктами, і ми можемо їх класифікувати. Наприклад, дуже маленька дитина, ймовірно, скаже "гав-гав", коли побачить собаку незалежно від породи; ми ж насправді бачимо світ у термінах категорій.
У термінології об'єктно-орієнтованого програмування категорія об'єкта "dog" називається класом, і деякі конкретні об'єкти, що належать класу, називаються екземплярами цього класу.
Як правило, щоб зробити об'єкт в Ruby або в будь-якій іншій мові, спочатку необхідно визначити характеристики класу, а потім створити екземпляр. Проілюструємо процес, давайте визначимо простий клас * Dog *.
ruby> class Dog | def speak | print "Bow Wow\n" | end | end nil
У Ruby визначення класу є блоком коду між ключовими словами class та end . Оператор def всередині цього регіону починає визначення методу класу, які ми обговорили у попередньому розділі, який відповідає певній поведінці об'єкта цього класу.
Зараз ми маємо певний клас Dog, і ми можемо використовувати його, щоб створити собаку:
ruby> pochi = Dog.new #<Dog:0xbcb90>
Ми створили новий екземпляр класу Dog, і дали йому ім'я pochi . Метод new будь-якого класу створює новий екземпляр. Оскільки pochi є Dog відповідно до нашого визначення класу, то вона має ті властивості, які повинна мати на нашу думку. Оскільки наша задумка класу була простою, то є лише один трюк, який ми можемо попросити pochi зробити.
ruby> pochi.speak Bow Wow nil
Створення нового екземпляра класу іноді називають інстанціями цього класу. Ми повинні створити собаку до того, як попросимо її щось зробити; Ми не можемо попросити клас Dog гавкати для нас.
ruby> Dog.speak ERR: (eval):1: undefined method `speak' for Dog:class
Це не має сенсу, як якщо намагатися з'їсти концепцію бутерброду замість самого бутерброду.
З іншого боку, якщо ми хочемо почути голос собаки без емоційної прихильності, ми можемо створити (інстанціювати) ефемерного, тимчасового собаку, який трохи пошумить перш, ніж зникне.
ruby> (Dog.new).speak # or more commonly, Dog.new.speak Bow Wow nil
"Зачекайте", скажіть ви, "Це означає, що цей бідолаха зникає після цього?". Так, це правда: Якщо ми не дамо йому ім'я (як це було з pochi ), то автоматичний збирач сміття Ruby вирішить що це бродячий собака і безжально позбудеться його. Насправді це нормально, ви ж знаєте, що ми можемо зробити всіх собак, яких захочемо.