الفرق بين المراجعتين ل"Ruby/Class"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: الصنف <code>Class</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby Method تصنيف: Ruby Class')
 
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Class]]
 
[[تصنيف: Ruby Class]]
 +
تُعدُّ الأصناف كائناتٍ من الدرجة الأولى (first-class objects) في روبي، وتعدُّ جميعها نُسخٌ من الصنف <code>Class</code>.
 +
 +
يمكن عادةً إنشاء صنف جديد بالشكل التالي:<syntaxhighlight lang="ruby">
 +
class Name
 +
 +
# تكتب هنا الشيفرة التي تعرف سلوك الصنف
 +
 +
end
 +
 +
 +
</syntaxhighlight>عندما يُنشَأ صنف جديد، يهيَّأ كائن من النوع Class ويسند إلى ثابت عام (global constant) (هو Name في المثال السابق).
 +
 +
عند استدعاء Name.new لإنشاء كائن جديد، يُنفَّذ التابع new الخاص بالصنف Class بشكل افتراضي. يمكن إثبات ذلك من خلال إعادة تعريف التابع new في الصنف Class:<syntaxhighlight lang="ruby">
 +
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
 +
</syntaxhighlight>ناتج تنفيذ الشيفرة السابقة هو:<syntaxhighlight lang="ruby">
 +
Creating a new Name
 +
 +
 +
 +
</syntaxhighlight>تكون الأصناف والوحدات (modules) والكائنات مترابطةً مع بعضها بعضًا. في الرسم التوضيحي التالي، تمثل الأسهم الرأسية الوراثة (inheritance)، أما الأقواس فتمثل الأصناف <code>metaclass</code>. وجميع الأصناف <code>metaclass</code> هي نُسخ (instances) من الصنف <code>Class</code>.<syntaxhighlight lang="ruby">
 +
 +
                        +---------+            +-...
 +
                        |        |            |
 +
        BasicObject-----|-->(BasicObject)-------|-...
 +
            ^          |        ^            |
 +
            |          |        |            |
 +
          Object---------|----->(Object)---------|-...
 +
            ^          |        ^            |
 +
            |          |        |            |
 +
            +-------+  |        +--------+    |
 +
            |      |  |        |        |    |
 +
            |    Module-|---------|--->(Module)-|-...
 +
            |      ^  |        |        ^    |
 +
            |      |  |        |        |    |
 +
            |    Class-|---------|---->(Class)-|-...
 +
            |      ^  |        |        ^    |
 +
            |      +---+        |        +----+
 +
            |                    |
 +
obj--->OtherClass---------->(OtherClass)-----------...
 +
</syntaxhighlight>
 +
 +
== توابع الصنف العامة (Public Class Methods) ==
 +
 +
== توابع الكائن الخاصة (Public Instance Methods) ==
 +
 +
== مصادر ==
 +
* [http://ruby-doc.org/core-2.5.1/Class.html صفحة الصنف Class في توثيق روبي الرسمي.]

مراجعة 14:32، 12 سبتمبر 2018

تُعدُّ الأصناف كائناتٍ من الدرجة الأولى (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)-----------...

توابع الصنف العامة (Public Class Methods)

توابع الكائن الخاصة (Public Instance Methods)

مصادر