Menu
CoddyTech

מחלקות לעומת אובייקטים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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. כל משתנה שאובייקט זקוק לו נכנס למחלקה.

challenge icon

אתגר

קל

השלימו את המחלקה 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])
quiz iconבחנו את עצמכם

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

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

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