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

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

לצורך העניין, בהרבה דברים (כמו משפטים גיאומטריים למיניהם) - הם עדיין דומים.

נראה לי שזה בעיקר הזהרה מירושה מוגזמת - יש דרכים אחרות להשתמש באותו קוד לכמה מטרות שאינו ירושה.
החשש הוא מיצירת קוד שצפוי ממנו ביצוע אחד אך מתקבל משהו אחר, או שנשבר עקב שינויים שקשה לקרוא אותם (כי הם נמצאים במקום אחר / רחוק).
אני חושבת שדוגמת המלבן והריבוע היא נהדרת בדיוק בגלל שבאינטואיציה טבעית (ומבחינות שאינן קוד) אנחנו מצפים לירושה הזו (בדיוק כמו שאמרת) אבל מבחינת קוד זה מקרה שלא מתאים לירושה.
לפי מה שהבנתי מקריאה בנושא יש איזו אסכולה עם התנגדות גורפת ועקרונית לירושה.
יש גם סרטון נהדר וגם כתבה מקסימה על הפחד משכפול קוד באיזה מקום בפורום.

2 לייקים

א. תודה.
ב. עדיין, אם למשל במלבן יש משפט מתמטי שהייתי רוצה ‘להוריש’ גם לריבוע, איך הייתי עושה את זה בלי לשכפל קוד? נותנת תכונה לריבוע שהיא מלבן ו’שואבת’ ממנו?

עושה לו מיקסין למשפט (;


מה זה? משהו שעוד לא הגעתי אליו בחומר או בדיחה שלא הבנתי?

לייק 1

זה מתוך המחברת השנייה. :slight_smile:

לייק 1