מבוא ל-OOP
חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 2 מתוך 65.
תכנות מונחה עצמים (OOP) מארגן תוכנית סביב אובייקטים. אובייקט מאגד נתונים (משתנים) עם הפונקציות שפועלות על הנתונים האלה. מחלקה מתארת מה האובייקטים שלה מכילים ועושים, ואתה יוצר ממנה כמה אובייקטים שאתה צריך.
ב-GDScript כל קובץ סקריפט הוא מחלקה. תן לה שם באמצעות class_name והצהר על המשתנים שכל אובייקט מכיל:
# car.gd
class_name Car
extends RefCounted
var brand: String = "Generic"
var wheels: int = 4extends 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() פעמיים נותנת לך שתי מכוניות.
אתגר
קלצרו את המחלקה 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)
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידיםתרגלו בעצמכם: קומפיילר GDScript אונליין