الصنف Class
في روبي
< Ruby
تُعدُّ الأصناف كائناتٍ من الدرجة الأولى (first-class objects) في روبي، وتعدُّ جميعها نُسخٌ من الصنف Class
.
يمكن عادةً إنشاء صنف جديد بالشكل التالي:
class Name
# تكتب هنا الشيفرة التي تعرف سلوك الصنف
end
عندما يُنشَأ صنف جديد، يهيَّأ كائن من النوع Class ويسند إلى ثابت عام (global constant) (هو Name في المثال السابق). عند استدعاء Name.new لإنشاء كائن جديد، يُنفَّذ التابع new الخاص بالصنف Class بشكل افتراضي. يمكن إثبات ذلك من خلال إعادة تعريف التابع new في الصنف Class:
class Class
alias old_new new
def new(*args)
print "Creating a new ", self.name, "\n"
old_new(*args)
end
end
class Name
end
n = Name.new
ناتج تنفيذ الشيفرة السابقة هو:
Creating a new Name
تكون الأصناف والوحدات (modules) والكائنات مترابطةً مع بعضها بعضًا. في الرسم التوضيحي التالي، تمثل الأسهم الرأسية الوراثة (inheritance)، أما الأقواس فتمثل الأصناف metaclass
. وجميع الأصناف metaclass
هي نُسخ (instances) من الصنف Class
.
+---------+ +-...
| | |
BasicObject-----|-->(BasicObject)-------|-...
^ | ^ |
| | | |
Object---------|----->(Object)---------|-...
^ | ^ |
| | | |
+-------+ | +--------+ |
| | | | | |
| Module-|---------|--->(Module)-|-...
| ^ | | ^ |
| | | | | |
| Class-|---------|---->(Class)-|-...
| ^ | | ^ |
| +---+ | +----+
| |
obj--->OtherClass---------->(OtherClass)-----------...