Menu
Coddy logo textTech

סיכום – מחשבון צורות

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 33 מתוך 87.

challenge icon

אתגר

קל

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

הקוד שלך יחולק בין ארבעה קבצים:

  • Shape.java: צור מחלקה מופשטת שתשמש בסיס לכל הצורות. לכל צורה יש שדה name (String). כלול בנאי לאתחול שלו, מתודת getter בשם getName(), ומתודה מופשטת בשם getArea() שמחזירה double. הוסף גם מתודה בשם describe() שמחזירה: [name]: [area] (כאשר השטח מעוצב עם 2 ספרות אחרי הנקודה העשרונית באמצעות String.format("%.2f", getArea())).
  • Circle.java: צור מחלקה קונקרטית שיורשת מ-Shape. לצורות עיגול יש שדה radius (double). השתמש ב-super כדי להעביר את "Circle" כשם. ממש את getArea() כך שתחזיר את השטח באמצעות Math.PI * radius * radius.
  • Rectangle.java: צור מחלקה קונקרטית נוספת שיורשת מ-Shape. למלבנים יש שדות width ו-height (שניהם double). העבר את "Rectangle" כשם לבנאי של מחלקת האב. ממש את getArea() כך שתחזיר את width כפול height.
  • Main.java: בנה מחשבון צורות שמדגים פולימורפיזם בפעולה. תקבל שלושה קלטים: רדיוס העיגול, רוחב המלבן וגובהו.

    צור Circle ו-Rectangle, ואז אחסן אותם במערך של הפניות מסוג Shape. עבור על המערך, ועבור כל צורה הדפס את התיאור שלה באמצעות המתודה describe().

    לאחר הלולאה, חשב והדפס את השטח הכולל של כל הצורות בפורמט: Total area: [sum] (גם הוא מעוצב עם 2 ספרות אחרי הנקודה העשרונית). השתמש בלולאה נפרדת או בצובר כדי לסכם את השטחים באמצעות קריאה ל-getArea() בכל הפניה לצורה.

תקבל שלושה קלטים: רדיוס העיגול (double), רוחב המלבן (double) וגובה המלבן (double).

הפלט שלך צריך לכלול שלוש שורות - תיאור אחד לכל צורה ולאחריו השטח הכולל. שים לב איך אפשר להתייחס לצורות שונות באופן אחיד באמצעות הטיפוס המופשט Shape, בעוד שכל צורה מחשבת את השטח שלה בדרך משלה!

נסו בעצמכם

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // קרא את נתוני הקלט
        double radius = scanner.nextDouble();
        double width = scanner.nextDouble();
        double height = scanner.nextDouble();
        
        // TODO: צור אובייקט Circle באמצעות radius
        
        // TODO: צור אובייקט Rectangle באמצעות width ו-height
        
        // TODO: צור מערך של הפניות ל-Shape ואחסן בו את שתי הצורות
        
        // TODO: עבור על המערך בלולאה והדפס את התיאור של כל צורה באמצעות describe()
        
        // TODO: חשב את השטח הכולל של כל הצורות
        // השתמש בלולאה או במשתנה צובר כדי לסכם את השטחים באמצעות קריאה ל-getArea() עבור כל צורה
        
        // TODO: הדפס את השטח הכולל בפורמט: "Total area: [sum]"
        // השתמש ב-String.format("%.2f", totalArea) לצורך העיצוב
    }
}

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

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