Menu
Coddy logo textTech

חזרה – מחשבון צורות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 49 מתוך 110.

challenge icon

אתגר

קל

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

תארגנו את הקוד שלכם בשלושה קבצים:

  • shape.dart: הגדירו כאן את מחלקת הבסיס המופשטת ואת הממשק:
    • מחלקה מופשטת Shape עם מאפיין String name ובנאי. כללו את המתודות המופשטות double calculateArea() ו-double calculatePerimeter(). הוסיפו מתודה רגילה describe() שמדפיסה את [name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()]
    • מחלקה Drawable עם מתודה draw() שמדפיסה את Drawing shape...
  • shapes.dart: ייבאו את shape.dart וצרו את מחלקות הצורות הקונקרטיות:
    • מחלקה Rectangle שמרחיבה את Shape ומממשת את Drawable. הוסיפו את המאפיינים double width ו-double height. חשבו את השטח באמצעות width * height ואת ההיקף באמצעות 2 * (width + height). המתודה draw() צריכה להדפיס את Drawing rectangle [width]x[height]
    • מחלקה Circle שמרחיבה את Shape ומממשת את Drawable. הוסיפו מאפיין double radius. השתמשו ב-3.14159 עבור pi. חשבו את השטח באמצעות pi * radius * radius ואת ההיקף (היקף המעגל) באמצעות 2 * pi * radius. המתודה draw() צריכה להדפיס את Drawing circle with radius [radius]
  • main.dart: ייבאו את shapes.dart והדגימו את מחשבון הצורות שלכם:
    • צרו Rectangle בשם 'Rectangle' עם רוחב 5.0 וגובה 3.0
    • צרו Circle בשם 'Circle' עם רדיוס 4.0
    • עבור כל צורה, קראו ל-draw() ולאחר מכן ל-describe()
    • הדפיסו שורה ריקה בין שתי הצורות

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

הפלט הצפוי:

Drawing rectangle 5.0x3.0
Rectangle - Area: 15.0, Perimeter: 16.0

Drawing circle with radius 4.0
Circle - Area: 50.26544, Perimeter: 25.13272

נסו בעצמכם

import 'shapes.dart';

void main() {
  // TODO: ליצור Rectangle בשם 'Rectangle' עם רוחב 5.0 וגובה 3.0
  
  // TODO: ליצור Circle בשם 'Circle' עם רדיוס 4.0
  
  // TODO: עבור המלבן, לקרוא ל־draw() ואז ל־describe()
  
  // TODO: להדפיס שורה ריקה
  
  // TODO: עבור העיגול, לקרוא ל־draw() ואז ל־describe()
}

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

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