Menu
CoddyTech

מבוא ל-OOP

חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 2 מתוך 65.

תכנות מונחה עצמים (OOP) מארגן תוכנית סביב אובייקטים. אובייקט מאגד נתונים (משתנים) עם הפונקציות שפועלות על הנתונים האלה. מחלקה מתארת מה האובייקטים שלה מכילים ועושים, ואתה יוצר ממנה כמה אובייקטים שאתה צריך.

ב-GDScript כל קובץ סקריפט הוא מחלקה. תן לה שם באמצעות class_name והצהר על המשתנים שכל אובייקט מכיל:

# car.gd
class_name Car
extends RefCounted

var brand: String = "Generic"
var wheels: int = 4

extends RefCounted גורם ל-Godot לשחרר בעצמו אובייקט Car ברגע שאף משתנה אינו מפנה אליו עוד. השתמשו בו בכל מחלקה שמכילה נתונים ואינה צומת. גם סקריפט ללא שורת extends יורש מ-RefCounted.

יש לקרוא ל־new() במחלקה כדי ליצור אובייקט, ואז לגשת למשתנים שלו באמצעות נקודה:

# main.gd
var my_car := Car.new()
print(my_car.wheels) # 4
print(my_car is Car) # true

האופרטור is בודק מאיזו מחלקה נוצר אובייקט. הדפסת האובייקט עצמו מציגה רק מזהה כמו <RefCounted#-9223372009860233781>, לכן הדפס את המשתנים שלו במקום זאת.

המחלקה היא התוכנית, וכל אובייקט הוא דבר נפרד שנבנה ממנה: קריאה ל־Car.new() פעמיים נותנת לך שתי מכוניות.

challenge icon

אתגר

קל

צרו את המחלקה Car בקובץ car.gd:

  • שם המחלקה שלה הוא Car והיא יורשת מ־RefCounted
  • משתנה String בשם brand שמתחיל בערך "Generic"
  • משתנה int בשם wheels שמתחיל בערך 4

הקוד שסופק קורא כמה מכוניות לבנות ויוצר כל אחת באמצעות Car.new(). הוא מדפיס את מספר המכוניות ואת מספר הגלגלים הכולל שלהן. אם נבנתה לפחות מכונית אחת, הוא קורא מותג עבור המכונית הראשונה ומדפיס את המותגים של המכונית הראשונה והאחרונה. עבור הקלט 3 ו־Tesla הוא מדפיס:

Cars: 3
Wheels: 12
First car: Tesla
Last car: Generic

הקוד שלכם ייכתב בקובץ car.gd. הקובץ main.gd מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.

נסו בעצמכם

extends Node

func _ready():
	# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
	var count := int(OS.read_string_from_stdin())
	var garage: Array[Car] = []
	for i in count:
		garage.append(Car.new())
	var total := 0
	for car in garage:
		total += car.wheels
	print("Cars: %d" % garage.size())
	print("Wheels: %d" % total)
	if count > 0:
		garage[0].brand = OS.read_string_from_stdin()
		print("First car: %s" % garage[0].brand)
		print("Last car: %s" % garage[-1].brand)
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר GDScript אונליין