מחלקות לעומת אובייקטים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-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יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידיםתרגלו בעצמכם: קומפיילר GDScript אונליין