סיכום – מחשבון צורות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 33 מתוך 87.
אתגר
קלבואו נבנה מחשבון צורות שמשלב את כל מושגי הפולימורפיזם שלמדת בפרק הזה. תיצור מחלקה מופשטת 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) לצורך העיצוב
}
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותשדות (מאפיינים)מתודת הבנאיהעמסת בנאיםחזרה – מחשבון פשוט4ירושה
ירושה בסיסית (extends)מילת המפתח superדריסת מתודות (@Override)שרשור בנאיםהמחלקה Objectירושה יחידה ורב־רמתיתלמה אין ירושה מרובה של מחלקותסיכום – היררכיית עובדים7מתודות מיוחדות ומחלקת Object
מתודת toString()equals() ו-hashCode()מתודת clone()compareTo() ו-Comparableהממשק Comparatorסיכום – מיון מותאם אישית2מצייני גישה ואנקפסולציה
סקירה של רמות הגישהמתודות Getter ו-Setterהסתרת מידעמילת המפתח finalסיכום – מנהל חשבון בנק5פולימורפיזם
יסודות העמסת מתודותדריסת מתודות (בזמן ריצה)המרה כלפי מעלה וכלפי מטההאופרטור instanceofמחלקות ומתודות מופשטותסיכום – מחשבון צורות8מושגי OOP מתקדמים
הרכבה מול ירושהאגרגציה מול הרכבהמחלקות פנימיות, מקוננות ואנונימיותEnums ומתודות של EnumRecords (Java 16+)מחלקות חתומות (Java 17+)3מאפייני מחלקה וחברים סטטיים
משתני מופע לעומת משתנים סטטייםמתודות סטטיותבלוקים סטטייםקבועים (static final)סיכום — מונה ומחלקת עזר6ממשקים ומחלקות מופשטות
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםמתודות ברירת מחדל וסטטיות בממשקמחלקות מופשטות לעומת ממשקיםממשקים פונקציונלייםסיכום – מערכת תשלומיםתרגלו בעצמכם: קומפיילר Java אונליין