המתכנתת אוּמָה כתבה זה עתה את המחלקה MyCar המציגה פרטים של
מכוניות שונות. להלן המחלקה וכן דוגמא לשימוש במחלקה:
public
class MyCar
{
public
static
final
int
LAMBORGHINI = 2;
public
static
final
int
SUSITA
= 4;
public
static
final
int
RENAULT = 5;
private
int type;
public
MyCar(int type)
{
this.type =
type;
}
public String
getManufacturerName(){
switch (type) {
case
LAMBORGHINI:
return "LAMBORGHINI";
case
RENAULT:
return "RENAULT";
case
SUSITA:
return "SUSITA";
}
return "Manufacturer
Unknown";
}
public
int
getNumOfDoors(){
switch (type) {
case
LAMBORGHINI:
return
LAMBORGHINI;
case
RENAULT:
return
RENAULT;
case
SUSITA:
return
SUSITA;
}
return
-1;
}
}
דוגמא לשימוש במחלקה:
public
class MyCarDemo
{
public
static
void main(String[]
args) {
MyCar bimba = new
MyCar(MyCar.LAMBORGHINI);
System.out.println("bimba was
manufactured by " +
bimba.getManufacturerName());
System.out.println("bimba has
"
+ bimba.getNumOfDoors() +
"
door" +
(bimba.getNumOfDoors() == 1 ? "" : "s"));
}
}
השאלות הבאות מתייחסות למחלקה MyCar:
א.
1) צייני את הבעיה הגדולה ביותר לדעתך במחלקה. אם יש בעיות נוספות צייני גם אותן. מדוע לדעתך הקוד של אומה לוקה בבעיות שציינת?
2) עזרי לאומה לשכתב את המחלקה בעזרת ירושה בשני אופנים שונים כדי לפתור את הבעיות שציינת בסעיף הקודם.
i. מימוש אחד צריך למזער את כמות הקוד ע"י הגדרה של מחלקת אב אשר מחזיקה מידע
ii. המימוש האחר צריך למזער את הזיכרון הדרוש למופעי
המחלקה ע"י דריסה (overriding)
ב.
1) צייני את הבעיה הגדולה ביותר העולה מפתרון הסעיף הקודם בעזרת ירושה. אם יש בעיות נוספות צייני גם אותן. מדוע ירושה במקרה זה גורמת לבעיות שציינת?
2) עזרי לאומה לשכתב את המחלקה ע"י שימוש במחלקה אחת בלבד (ללא
ירושה) כדי לפתור את הבעיות שציינת בסעיף הקודם. ממשי בקוד את המחלקה
במלואה.
מימוש נאיבי הוא על ידי הגדרת מתודות לבניית מודלים שונים של מכונית. שימו לב שפיתרון זה סובל מחלק מהבעיות שצוינו בתשובה לשאלה א1.
ג. שכתבי את
המחלקה ע"י הגדרתה כ-enum.
ד. (10 נקודות) האם קיימות נסיבות
(כגון אילוצים על המחלקה, הקשרי שימוש, דרישות עיצוב של המערכת וכו') שבהן יש העדפה
לאסטרטגיית מימוש מסוימת על פני אחרות (מבין 5 הגישות לעיל כפי שעולה מהמחלקה המקורית ו-4 החלופות)? דוני בקצרה במקרים
השונים.