סיכום - מחשבון צורות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-GDScript של Coddy. שיעור 25 מתוך 65.
אתגר
בינוניבנה מחשבון צורות שמטפל בצורות ממשיות, באובייקט דמוי־צורה שמחוץ להיררכיה ובאובייקטים שאינו יכול למדוד.
Shapeהיא מחלקה מופשטת, עם המתודות המופשטותarea() -> float,perimeter() -> floatו-shape_name() -> String. המתודה הרגילה שלהdescribe()מחזירהNAME: area A, perimeter Pעם שתי ספרות אחרי הנקודה העשרונית.Circle(radius),Rectangle(width,height) ו-Triangle(הצלעותa,b,c) יורשות מ-Shape. שמותיהן הםCircle,Rectangleו-Triangle. שטח של מעגל הואPI * r * rוההיקף שלו הוא2 * PI * r. עבור המשולש, השתמש בנוסחת הרון: כאשרs = (a + b + c) / 2, השטח הואsqrt(s * (s - a) * (s - b) * (s - c)).CustomShapeאינה יורשת מ-Shape. יש להcustom_nameו-size;area()היאsize * size,perimeter()היא4 * size, ו-describe()משתמשת באותו פורמט כמוShape, עם השם המותאם אישית שלה.- ל-
ShapeCalculatorיש שתי פונקציות סטטיות.process(thing)מחזירה[Shape]ואחריוdescribe()עבורShape,[Duck]ואחריוdescribe()עבור כל אובייקט אחר שיש לו מתודהdescribe(), ואתCannot measure this objectאחרת.total_area(things)מחברת את התוצאות שלarea()עבור כל אובייקט שיש לו מתודהarea().
הקוד שסופק קורא כמה אובייקטים מופיעים בהמשך, ואז אובייקט אחד בכל שורה: circle R, rectangle W H, triangle A B C, custom NAME SIZE או unknown (אובייקט RefCounted רגיל). הוא מדפיס את process() עבור כל אחד מהם ואת השטח הכולל. עבור circle 5, custom Hexa 3 ו-unknown הוא מדפיס:
[Shape] Circle: area 78.54, perimeter 31.42
[Duck] Hexa: area 9.00, perimeter 12.00
Cannot measure this object
Total area: 87.54הקוד שלך נמצא בקבצים shape.gd, circle.gd, rectangle.gd, triangle.gd, custom_shape.gd ו-shape_calculator.gd. main.gd מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.
נסו בעצמכם
extends Node
func _ready():
# קוד הקלט/פלט שסופק: השאירו אותו כפי שהוא
var count := int(OS.read_string_from_stdin())
var things := []
for i in count:
var p := OS.read_string_from_stdin().split(" ")
if p[0] == "circle":
things.append(Circle.new(float(p[1])))
elif p[0] == "rectangle":
things.append(Rectangle.new(float(p[1]), float(p[2])))
elif p[0] == "triangle":
things.append(Triangle.new(float(p[1]), float(p[2]), float(p[3])))
elif p[0] == "custom":
things.append(CustomShape.new(p[1], float(p[2])))
else:
things.append(RefCounted.new())
for thing in things:
print(ShapeCalculator.process(thing))
print("Total area: %.2f" % ShapeCalculator.total_area(things))
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח selfמתודותמאפייניםבנאי (_init)חזרה – מחשבון פשוט4פולימורפיזם
חזרה על דריסת מתודותטיפוס ברווזמחלקות ומתודות אבסטרקטיותתכנון ממשקיםסיכום - מחשבון צורות2מאפייני מחלקה
משתני מופע לעומת משתנים סטטייםפונקציות סטטיותקובעי מאפייניםמאחזרי מאפייניםפרטיים לפי מוסכמהסיכום – מנהל חשבון בנק5כימוס
איברים ציבוריים ופרטייםאימות באמצעות Settersהסתרת מידעמאפיינים לקריאה בלבדסיכום – מערכת לניהול רשומות תלמידיםתרגלו בעצמכם: קומפיילר GDScript אונליין