עוד שאלה על עקרון ההחלפה של ליסקוב

אולי אני נותנת יותר מדי משקל לעיקרון הזה, שלא בצדק, אבל שואלת בכל זאת -
האם העיקרון הזה רלוונטי גם למחלקות שיורשות מ-abstract?
למשל בדוגמא של החיות בתחילת מחברת 2:
אני מניחה שבתחילת הדוגמא, לפני הבאת הרעיון של abstract - העיקרון עובד, ולא היינו משתמשים בזה (אם אני מבינה נכון),
אבל מה קורה אחרי הבאת הרעיון של abstract?

אני ממש חוששת שיש לי פספוס של הבנת העיקרון הזה עד הסוף…
יש מישהו\י לענות לי?

לא כ"כ הבנתי את השאלה :slight_smile:
יש מצב לניסוח טיפה שונה?

יש את הדוגמא של החיות בתחילת מחברת 2.
לכאורה, על פי מחברת 1 הייתי אומרת שאי אפשר לעשות כמו שעשית במחברת, עם מחלקת animal שיורשת ממנה גם מחלקת cow וגם מחלקת dog.
למה? כי cow לא יכולה לרשת מ-dog ולהיפך.
שאלה מספר 1 - האם אני צודקת בדבריי בכלל?
שאלה מספר 2 - האם העיקרון הזה עובד גם כש-animal היא מחלקה אבסטרקטית?
תודה רבה

הכוונה במחברת היא שאם B ו־C יורשות מ־A, אז כל פעם שכתוב בקוד את השם “A” (מחלקת־העל) צריך שיהיה אפשר להשתמש ב־B או ב־C (תתי המחלקות) במקום.
זה לא עובד על מחלקות “אחיות”. המשפט הוא “אם A יורש מ־B, כל פעם שכתוב B צריך שיהיה אפשר להחליף אותו ב־A”.

עכשיו אני לא מספיק מבינה. תוכל אולי להסביר שוב?
תודה

לפי מה שהבנתי - עיקרון ההחלפה לא אומר שcow ו dog צריכות להיות מסוגלות להחליף אחת את השניה.
הוא אומר ש cow (ו dog) צריך לתפקד בתור animal, כלומר לא יהיה בהן משהו ש’ישבור’ את הצורה שבה animal מתפקדת

2 לייקים

נגדיר “תת¯מחלקה” כמחלקה שיורשת ממחלקת¯על.
תתי¯המחלקות בדוגמה שהבאת הם Dog ו¯Cow. מחלקת¯העל היא Animal.
עקרון ההחלפה של ליסקוב טוען שהקוד אמור להמשיך לתפקד אם בכל מקום שכתוב את שם מחלקת¯העל, נרשום במקום את השם של תת¯המחלקה.
דהיינו: אם נעבור על הקוד, ובכל פעם שכתוב Animal נחליף את המילה Animal ב¯Dog או ב¯Cow, הקוד אמור להמשיך לתפקד ולא לזרוק שגיאה.
החוק לא מחייב מחלקות שלא יורשות אחת מהשנייה, כמו המצב בין Cow לבין Dog. המחלקות הללו יורשות מאותה מחלקת¯על, אבל אין ביניהן קשר של ירושה.

לייק 1

תודה רבה!
עכשיו הבנתי הרבה יותר טוב.
כנראה זה אומר שגם טעיתי בתרגילים במחברת 1 בצורה כלשהי, אבל לא נורא.
תודה על החידוד.