Menu
CoddyTech
flag Ar iconالعربيةdown icon

الوراثة الأساسية

جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 15 من 65.

يتيح الوراثة لفئةٍ ما أن ترث المتغيرات والطرائق من فئة أخرى. تُسمّى الفئة التي تنقلها الفئة الأب، وتُسمّى الفئة التي ترثها الفئة الابن.

إليك صنفًا أبًا في ملفه الخاص:

# animal.gd
class_name Animal
extends RefCounted

var animal_name: String

func _init(n: String) -> void:
	animal_name = n

func info() -> void:
	print("I am ", animal_name, ", an animal")

تُحدّد الفئة الابنة فئتها الأم بعد extends. إنّ class_name الخاص بالفئة الأم عام، لذا لا يحتاج dog.gd إلى سطر import:

# dog.gd
class_name Dog
extends Animal

هذا Dog ليس لديه أي شيفرة خاصة به، ومع ذلك لديه animal_name وinfo() ومُنشئ Animal:

var creature := Animal.new("Creature")
var buddy := Dog.new("Buddy")
creature.info()
buddy.info()
I am Creature, an animal
I am Buddy, an animal

يمكن للعنصر الابن إضافة أساليبه الخاصة إلى جانب الأساليب الموروثة. تعمل المتغيرات الموروثة داخل هذه الأساليب كما لو أن العنصر الابن قد أعلن عنها:

# dog.gd
class_name Dog
extends Animal

func bark() -> void:
	print(animal_name, " says Woof!")
var buddy := Dog.new("Buddy")
buddy.info()
buddy.bark()
I am Buddy, an animal
Buddy says Woof!

يسير التوريث في اتجاه واحد. لا يحصل Animal على ما يضيفه Dog، لذا فإن استدعاء bark() على كائن Animal يُعدّ خطأً.

كانت الأصناف التي كتبتها حتى الآن تقول extends RefCounted: وكانت أصنافًا فرعية من RefCounted، وهو صنف مضمّن في Godot.

challenge icon

التحدي

سهل

أنشئ فئة أب وفئة ابن.

  • في vehicle.gd، أضف إلى Vehicle متغيرين من النوع String، هما brand وmodel. يخزّن المُنشئ وسيطيه فيهما، وتُرجع info() القيمة Vehicle: BRAND MODEL.
  • يحتوي car.gd بالفعل على extends Vehicle. اكتب الدالة honk() فيه: تُرجع BRAND MODEL says Beep beep! باستخدام المتغيرات التي ترثها Car.

لا تحتاج Car إلى مُنشئ: إذ تستخدم Car.new("Honda", "Civic") المُنشئ الموجود في Vehicle.

يقرأ الكود المُقدَّم عدد المركبات التالية، ثم سطرًا لكل مركبة: vehicle أو car، ثم علامة تجارية وطرازًا. يطبع info() لكل مركبة، وكذلك honk() للسيارة. عند إدخال vehicle Toyota Corolla وcar Honda Civic، تكون المخرجات:

Vehicle: Toyota Corolla
Vehicle: Honda Civic
Honda Civic says Beep beep!

ضع الكود في vehicle.gd وcar.gd. يحتوي main.gd على كود الإدخال/الإخراج المُقدَّم، ولا يمكن تعديله.

جرّب بنفسك

extends Node

func _ready():
	# شيفرة الإدخال/الإخراج المقدَّمة: اتركها كما هي
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "car":
			var car := Car.new(parts[1], parts[2])
			print(car.info())
			print(car.honk())
		else:
			var vehicle := Vehicle.new(parts[1], parts[2])
			print(vehicle.info())
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجّه

تدرّب بنفسك: مترجم GDScript عبر الإنترنت