الفئات مقابل الكائنات
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 3 من 65.
يحتفظ الصنف وكائناته بأشياء مختلفة. ينتمي const في الصنف إلى الصنف نفسه: توجد قيمة واحدة، وتقرأها من خلال اسم الصنف دون إنشاء كائن.
# dog.gd
class_name Dog
extends RefCounted
const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"print(Dog.SPECIES) # Canis familiarisتصف أسطر var ما يحتفظ به كل كائن. يحصل كل كائن يُنشأ باستخدام new() على نسخة خاصة به من هذه المتغيرات، وتبدأ بقيمها الافتراضية:
var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # Unnamedتغيير dog1 يُبقي dog2 كما كان. ويمكن للكائن أيضًا قراءة الثابت: dog1.SPECIES له القيمة نفسها التي لـ Dog.SPECIES.
لا يحتوي الكائن إلا على المتغيرات التي يصرّح بها صنفه. يتسبب dog1.color = "brown" في إيقاف البرنامج مع ظهور خطأ، لأن Dog ليس لديه متغير color. يوضع كل متغير يحتاج إليه الكائن في الصنف.
التحدي
سهلأكمل الصنف Student في student.gd:
- SCHOOL بقيمة
"Godot High School"، مشترك بين الصنف بأكمله - متغير
Stringباسمstudent_name - متغير
Stringباسمgradeيبدأ بالقيمة"N/A"
يقرأ الكود المُقدَّم عدد الطلاب الذين ستُدخَل بياناتهم، ثم سطرًا واحدًا لكل طالب: اسمًا، يتبعه اختياريًا مسافة وعلامة تقدير. ينشئ كائنًا من Student لكل سطر، ويضبط اسمه، ولا يضبط علامة التقدير إلا إذا احتوى السطر عليها. ثم يطبع Student.SCHOOL وكل طالب. بالنسبة إلى السطرين Alice A وBob، تكون المخرجات:
School: Godot High School
Alice has grade A
Bob has grade N/Aضع الكود في student.gd. يحتوي main.gd على كود الإدخال/الإخراج المُقدَّم، ولا يمكن تعديله.
جرّب بنفسك
extends Node
func _ready():
# كود الإدخال/الإخراج المقدَّم: اتركه كما هو
var count := int(OS.read_string_from_stdin())
var students: Array[Student] = []
for i in count:
var parts := OS.read_string_from_stdin().split(" ", false)
var student := Student.new()
student.student_name = parts[0]
if parts.size() > 1:
student.grade = parts[1]
students.append(student)
print("School: %s" % Student.SCHOOL)
for student in students:
print("%s has grade %s" % [student.student_name, student.grade])
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصنافتدرّب بنفسك: مترجم GDScript عبر الإنترنت