בעל חנות כולבו מעוניין למכור את מוצריו גם באופן מקוון (אונליין). בשלב הראשון החליט להתחיל למכור באופן מקוון רק חולצות ומכנסיים. לשם כך נבנו המחלקות: Clothing (המייצגת בגד), Shirt (המייצגת חולצה), Pants (המייצגת זוג מכנסיים). הניחו שיש פעולות get ו-set בעבור התכונות בכל המחלקות.
בעל חנות כולבו מעוניין למכור את מוצריו גם באופן מקוון (אונליין). בשלב הראשון החליט להתחיל למכור באופן מקוון רק חולצות ומכנסיים. לשם כך נבנו המחלקות: Clothing (המייצגת בגד), Shirt (המייצגת חולצה), Pants (המייצגת זוג מכנסיים). הניחו שיש פעולות get ו-set בעבור התכונות בכל המחלקות.
public class Clothing {
private int id; // מספר זיהוי של המוצר
private String fabric; // סוג הבד
private String color; // צבע הבגד
private double price; // מחיר
}
public class Shirt extends Clothing {
private String size; // (S, M, L, XL, XXL) מידה
}
public class Pants extends Clothing {
private int length; // אורך באינצ'ים
private int width; // רוחב באינצ'ים
}
המחלקה Cart מייצגת סל קניות. למחלקה שלוש תכונות: name (שם הקונה), arr (מערך המכיל גם חולצות וגם מכנסיים), current (מספר המוצרים הנוכחי בקנייה). (1) כתבו את כותרת המחלקה Cart ואת התכונות שלה. (2) סרטטו תרשים ירושה המתאר את הקשר בין המחלקות: Clothing, Shirt, Pants, Cart (יש לסמן ירושה באמצעות החץ והכלה באמצעות סימן היהלום).
בשלב השני החליט בעל החנות למכור באופן מקוון גם ספרים. נבנתה המחלקה Book (id, bookName, author, price, עם get/set). כדי שהמערך arr ב-Cart יוכל להכיל גם ספרים, נעשו השינויים: הוגדרה מחלקה Product (מוצר); טיפוס המערך arr ב-Cart שונה ל-Product; נכתבו מחדש התכונות המתאימות (כולל Book) ביחסי הורשה חדשים בין ובין המחלקה Product; חלק מן התכונות שהופיעו עד עכשיו בכמה מהמחלקות האחרות (כולל Book) הועברו למחלקה Product, בהתאם לעקרונות תכנות מונחה עצמים. (1) סרטטו תרשים ירושה/הכלה מעודכן: Clothing, Shirt, Pants, Book, Product, Cart. (2) כתבו את כותרת המחלקה Product ותכונותיה. (3) כתבו מחדש את המחלקה Clothing שחל בה שינוי בעקבות ההוספה של Product.
בשלב האחרון החליט בעל החנות להכריז על מבצע זמני: ברכישה מקוונת, כל המוצרים יימכרו בהנחה של 10%. ממשו פעולה זו במחלקה Product (החזרת המחיר לאחר ההנחה, בהתאם לכל מוצר). אין להשתמש בפעולת instanceof/is ובפעולות המחלקה Object, ואין לשנות את תכונות המחלקה.
public double getDiscountPrice()
ובעבור רכישת בגדים (חולצות ומכנסיים) תהיה הנחה נוספת של 10 שקלים (הניחו שהמחיר שהתקבל לאחר הנחה זו נשאר חיובי). הוסיפו פעולה במחלקה המתאימה כדי לבצע את הנדרש, מבלי לפגוע במימוש הפולימורפי של סעיף ג ומבלי להשתמש ב-instanceof/is.
public double getDiscountPrice() // @Override בתוך Clothing
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.