ירושת מחלקות בC++
שלום רב!
אני מתרגל כעת בC++, ולכן ניסיתי לפתור מבחן בC++ שבו נדרשים לממש מחלקות שונות שפורסם באינטרנט.
ראשית אציג את השאלה, ואחריה את שאלותי על הפיתרון.
קראו את הקטע שלפניכם:
לחברת משלוחים בינ"ל יש צי רכב הכולל ספינות, מטוסים, אופנועים, משאיות ועוד.
הנהלת החברה החליטה למחשב את צי הרכב שלה, כך שניתן יהיה לטפל במידע הרלוונטי לגביו בצורה יעילה.
היות ומבנה צי הרכב עשוי להשתנות; בכלים מסוגים אחדים ייתכן ויפסיקו להשתמש בעתיד ובמקומם ישתמשו בכלי-רכב מסוגים אחרים, הוחלט לכתוב את התוכנה בצורה מבנית ומסודרת בשיטת תכנות מונחה עצמים.
משימה זו הוטלה עליכם (כל אחד בנפרד...).
המידע שהתקבל מהלקוח:
לכל כלי-רכב יש מספר סידורי ייחודי (מספר שונה לכל רכב, אשר יתקבל בצורה אוטומאטית ע"י המערכת או שיוכנס ע"י המשתמש) ומשקל מקסימלי של סחורה שהוא מסוגל לשאת בק"ג.
לספינות יש גם שם.
לגבי המטוסים יש לפרט כמה מנועים יש למטוס.
לכלים יבשתיים יש לציין את מספר הגלגלים (ברירת המחדל היא 2 עבור אופנועים ו-4 עבור כל רכב גלגלי אחר).
עבור כל מחלקה יש לבנות בנאי ברירת מחדל ובנאי המקבל נתונים ומתודות get ו-set לתכונות הרלוונטיות.
כמו-כן, לכל כלי רכב יש להוסיף מתודה אחת המדפיסה את כל הנתונים שלו ומתודה אחרת אשר מדפיסה האם הוא נע בים, באוויר או ביבשה. עבור אופנועים – היא תדפיס גם כי כלי זה מסוגל לנוע בקלות בתוך העיר.
עד כאן השאלה, וכעת לשאלותי על הפיתרון הנדרש:
ההיררכיה הטבעית של המחלקות הוא מחלקת אב אבסטרקטית בשם רכב, כאשר יירשו ממנו באופן ישיר 3 מחלקות: רכב יבשתי (אבסטרקטית), אונייה, מטוס
ואילו ממחלקת רכב יבשתי יירשו 2 מחלקות: אופנוע, משאיות.
הבעייה במימוש הזה הוא שאין דרך טבעית להפוך את מחלקת רכב יבשתי לאבסטרקטית, וזה משום שיש לו רק תכונה אחת והיא מספר גלגלים, כאשר יוגדרו לתכונה זאת פונקציות set,get לא וירטואליות טהורות.
בנוסף, קשה ליצור בנאי ריק למחלקת רכב יבשתי, בגלל שברירת המחדל עבור התכונה היחידה שלו שהיא מספר גלגלים , תלוייה במחלקות שיורשות ממנה.
שלום רב!
אני מתרגל כעת בC++, ולכן ניסיתי לפתור מבחן בC++ שבו נדרשים לממש מחלקות שונות שפורסם באינטרנט.
ראשית אציג את השאלה, ואחריה את שאלותי על הפיתרון.
קראו את הקטע שלפניכם:
לחברת משלוחים בינ"ל יש צי רכב הכולל ספינות, מטוסים, אופנועים, משאיות ועוד.
הנהלת החברה החליטה למחשב את צי הרכב שלה, כך שניתן יהיה לטפל במידע הרלוונטי לגביו בצורה יעילה.
היות ומבנה צי הרכב עשוי להשתנות; בכלים מסוגים אחדים ייתכן ויפסיקו להשתמש בעתיד ובמקומם ישתמשו בכלי-רכב מסוגים אחרים, הוחלט לכתוב את התוכנה בצורה מבנית ומסודרת בשיטת תכנות מונחה עצמים.
משימה זו הוטלה עליכם (כל אחד בנפרד...).
המידע שהתקבל מהלקוח:
לכל כלי-רכב יש מספר סידורי ייחודי (מספר שונה לכל רכב, אשר יתקבל בצורה אוטומאטית ע"י המערכת או שיוכנס ע"י המשתמש) ומשקל מקסימלי של סחורה שהוא מסוגל לשאת בק"ג.
לספינות יש גם שם.
לגבי המטוסים יש לפרט כמה מנועים יש למטוס.
לכלים יבשתיים יש לציין את מספר הגלגלים (ברירת המחדל היא 2 עבור אופנועים ו-4 עבור כל רכב גלגלי אחר).
עבור כל מחלקה יש לבנות בנאי ברירת מחדל ובנאי המקבל נתונים ומתודות get ו-set לתכונות הרלוונטיות.
כמו-כן, לכל כלי רכב יש להוסיף מתודה אחת המדפיסה את כל הנתונים שלו ומתודה אחרת אשר מדפיסה האם הוא נע בים, באוויר או ביבשה. עבור אופנועים – היא תדפיס גם כי כלי זה מסוגל לנוע בקלות בתוך העיר.
עד כאן השאלה, וכעת לשאלותי על הפיתרון הנדרש:
ההיררכיה הטבעית של המחלקות הוא מחלקת אב אבסטרקטית בשם רכב, כאשר יירשו ממנו באופן ישיר 3 מחלקות: רכב יבשתי (אבסטרקטית), אונייה, מטוס
ואילו ממחלקת רכב יבשתי יירשו 2 מחלקות: אופנוע, משאיות.
הבעייה במימוש הזה הוא שאין דרך טבעית להפוך את מחלקת רכב יבשתי לאבסטרקטית, וזה משום שיש לו רק תכונה אחת והיא מספר גלגלים, כאשר יוגדרו לתכונה זאת פונקציות set,get לא וירטואליות טהורות.
בנוסף, קשה ליצור בנאי ריק למחלקת רכב יבשתי, בגלל שברירת המחדל עבור התכונה היחידה שלו שהיא מספר גלגלים , תלוייה במחלקות שיורשות ממנה.