חזרה: מחשבון צורות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 30 מתוך 70.
אתגר
קלבואו נבנה מחשבון צורות שמשלב את כל מה שלמדת על ממשקים ופולימורפיזם. תיצור מערכת שבה ניתן לעבד צורות שונות באופן אחיד באמצעות ממשק משותף, ולהדגים את העוצמה של פולימורפיזם בזמן ריצה.
תארגן את הקוד שלך בארבעה קבצים:
IShape.cs: הגדר ממשק בשםIShapeבמרחב השמותShapes. כל צורה צריכה להיות מסוגלת לחשב את השטח שלה ולתאר את עצמה. הצהר על שתי מתודות:CalculateArea()שמחזירהdouble, ו-GetDescription()שמחזירהstring.Circle.cs: צור מחלקה בשםCircleבמרחב השמותShapes, שמממשת אתIShape. למעגל יש מאפייןRadiusמסוג double, שנקבע באמצעות הבנאי שלו. נוסחת השטח היאMath.PI * Radius * Radius. התיאור צריך להחזיר את"Circle with radius {Radius}".Rectangle.cs: צור מחלקה בשםRectangleבמרחב השמותShapes, שמממשת אתIShape. למלבן יש מאפייניWidthו-Height(שניהם מסוג double), שנקבעים באמצעות הבנאי שלו. השטח הוא פשוט רוחב כפול גובה. התיאור צריך להחזיר את"Rectangle {Width}x{Height}".Program.cs: בקובץ הראשי שלך, צור מעגל ומלבן באמצעות ערכי קלט, ואז אחסן אותם במערך של הפניות מסוגIShape. עבור על המערך, ועבור כל צורה, הדפס את התיאור שלה ואחריו את השטח שלה מעוגל לשתי ספרות אחרי הנקודה העשרונית. כך תדגים איך אפשר לעבד צורות שונות לחלוטין באמצעות אותו ממשק!
תקבל שלושה ערכי קלט:
- רדיוס המעגל (double)
- רוחב המלבן (double)
- גובה המלבן (double)
הדפס את הפלט בפורמט הזה עבור כל צורה:
{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}לדוגמה, אם ערכי הקלט הם 5, 4, ו-6, הפלט צריך להיות:
Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00שים לב שהלולאה שלך לא צריכה לדעת אם היא מטפלת במעגל או במלבן — היא פשוט קוראת למתודות של הממשק ונותנת לפולימורפיזם לטפל בשאר. זהו היתרון האלגנטי של תכנות באמצעות ממשקים!
נסו בעצמכם
using System;
using Shapes;
class Program
{
public static void Main(string[] args)
{
// קראו את ערכי הקלט
double circleRadius = Convert.ToDouble(Console.ReadLine());
double rectWidth = Convert.ToDouble(Console.ReadLine());
double rectHeight = Convert.ToDouble(Console.ReadLine());
// TODO: צרו אובייקט Circle עם הרדיוס הנתון
// TODO: צרו אובייקט Rectangle עם הרוחב והגובה הנתונים
// TODO: צרו מערך של IShape המכיל את שתי הצורות
// TODO: עברו על המערך, ועבור כל צורה:
// - הדפיסו את התיאור באמצעות GetDescription()
// - הדפיסו "Area: " ואחריו את התוצאה של CalculateArea() מעוגלת ל-2 ספרות אחרי הנקודה העשרונית
}
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמרחבי שמות והנחיותמבוא למחלקות ולאובייקטיםמילת המפתח 'this'מתודות ופרמטריםשדות לעומת מאפייניםבנאיםאתחול אובייקטיםסיכום – מחשבון פשוט4ירושה
תחביר ירושה בסיסית (:)מילת המפתח 'base'מילות המפתח Virtual ו-Overrideמחלקות Sealedמחלקת הבסיס 'object'סיכום – היררכיית עובדים7תכונות מתקדמות
העמסת אופרטוריםאינדקסרים (this[])דריסת ToString()מתודות הרחבהסיכום – רשימה מותאמת אישית2מאפיינים וחברים סטטיים
מאפיינים במימוש אוטומטימאפיינים לקריאה בלבד ולכתיבה בלבדשדות ומתודות סטטייםמחלקות סטטיותחברים עם גוף ביטוי5פולימורפיזם וממשקים
פולימורפיזם בזמן קומפילציה לעומת בזמן ריצהממשק לעומת מחלקה מופשטתממשקים מרוביםממשקים מפורשיםהמרה כלפי מעלה והמרה כלפי מטהחזרה: מחשבון צורות8מושגים מתקדמים בתכנות מונחה עצמים
קומפוזיציה במקום ירושהGenerics (מחלקות ומתודות)נציגים ואירועיםמאפיינים ורפלקציהIDisposable והצהרת usingיסודות הזרקת תלויותתרגלו בעצמכם: קומפיילר C# אונליין