السمات (Traits)
السمة هي عقد يُلزم الصنف بتنفيذ مجموعة من الدوال. تُستخدم لتعدد الأشكال (Polymorphism) ومشاركة السلوك المشترك.
تعريف سمة بسيطة
sad
سمة قابل_للطباعة
دالة إلى_نص()
نهايةتنفيذ سمة
sad
صنف نقطة نفّذ قابل_للطباعة
متغير س
متغير ص
باني(س، ص)
هذا.س = س
هذا.ص = ص
نهاية
دالة إلى_نص()
ارجع "(" + هذا.س + "، " + هذا.ص + ")"
نهاية
نهاية
متغير ن = جديد نقطة(3، 4)
اطبع_سطر(ن.إلى_نص()) # (3، 4)سمات متعددة
صنف واحد يمكنه تنفيذ عدة سمات:
sad
سمة قابل_للسرد
دالة طول()
دالة العنصر_في(فهرس)
نهاية
سمة قابل_للمقارنة
دالة يساوي(آخر)
دالة أقل_من(آخر)
نهاية
صنف قائمة_مرتّبة نفّذ قابل_للسرد، قابل_للمقارنة
باني()
هذا.البيانات = []
نهاية
دالة أضف(عنصر)
هذا.البيانات = هذا.البيانات + [عنصر]
نهاية
# تنفيذ سمة قابل_للسرد
دالة طول()
ارجع طول(هذا.البيانات)
نهاية
دالة العنصر_في(فهرس)
ارجع هذا.البيانات[فهرس]
نهاية
# تنفيذ سمة قابل_للمقارنة
دالة يساوي(آخر)
ارجع هذا.طول() == آخر.طول()
نهاية
دالة أقل_من(آخر)
ارجع هذا.طول() < آخر.طول()
نهاية
نهايةالسمات مع تنفيذ افتراضي
يمكن للسمة أن توفر تنفيذاً افتراضياً لبعض دوالها:
sad
سمة مسجّل
دالة احصل_على_الاسم() # مجردة — يجب تنفيذها
دالة سجّل(رسالة) # لها تنفيذ افتراضي
اطبع_سطر("[" + هذا.احصل_على_الاسم() + "] " + رسالة)
نهاية
دالة سجّل_خطأ(رسالة)
اطبع_سطر("[خطأ][" + هذا.احصل_على_الاسم() + "] " + رسالة)
نهاية
نهاية
صنف خدمة_بيانات نفّذ مسجّل
دالة احصل_على_الاسم()
ارجع "خدمة_بيانات"
نهاية
نهاية
متغير خ = جديد خدمة_بيانات()
خ.سجّل("بدأ التحميل") # [خدمة_بيانات] بدأ التحميل
خ.سجّل_خطأ("فشل الاتصال") # [خطأ][خدمة_بيانات] فشل الاتصالاستخدام السمات لتعدد الأشكال
sad
سمة شكل
دالة مساحة()
دالة محيط()
نهاية
صنف مربع نفّذ شكل
متغير ضلع
باني(ضلع)
هذا.ضلع = ضلع
نهاية
دالة مساحة()
ارجع هذا.ضلع ** 2
نهاية
دالة محيط()
ارجع هذا.ضلع * 4
نهاية
نهاية
صنف دائرة نفّذ شكل
متغير نصف_قطر
باني(نصف_قطر)
هذا.نصف_قطر = نصف_قطر
نهاية
دالة مساحة()
ارجع 3.14159 * هذا.نصف_قطر ** 2
نهاية
دالة محيط()
ارجع 2 * 3.14159 * هذا.نصف_قطر
نهاية
نهاية
# دالة تعمل مع أي شكل
دالة اطبع_معلومات(ش)
اطبع_سطر("المساحة: " + ش.مساحة())
اطبع_سطر("المحيط: " + ش.محيط())
نهاية
اطبع_معلومات(جديد مربع(5)) # المساحة: 25
اطبع_معلومات(جديد دائرة(3)) # المساحة: 28.27...ملاحظات مهمة
| الملاحظة | التفصيل |
|---|---|
سمة كلمة سياقية | تعمل كمُعرّف عادي خارج سياقها |
نفّذ و نفذ | كلاهما مقبول (بشدة أو بدونها) |
| تنفيذ متعدد | يفصل بفاصلة: نفّذ سمة1، سمة2 |
| التنفيذ الافتراضي | السمة يمكنها توفير دوال مع جسم |
السابق: الوراثة ←