Composition Over Inheritance?

בפעם הראשונה שבניתי פרוייקט (ובמקרה הוא היה בג’אווה), הוא ככל הנראה היה הפרוייקט הכי שאפתני שלי; ניסיתי למפות את גוף האדם. ההשראה נבעה מהיכולת של Inheritance, שאיפשרה לי ליצור קשרים ויחסים בין אובייקטים.

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

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

מאז השרשתי את המושג הרכבה מעל ירושה- במקום ליצור קשר בין אובייקטים בעזרת ירושה, אפשר בעזרת הרכבה (לשתול רפרנס של “היחס” בתור אובייקט כפרופרטי במחלקה). זה מאפשר גמישות כשאתה רוצה לשנות את היחס, ופלוס קטן הוא שאפשר להחביא את הגישה לאובייקט, כלומר encapsulate, יתרון שאין לנו בירושה (לא תוכל להחביא את הגישה ל-human בירושה כשאתה משתמש באובייקט של person).

פגשתי מתכנתים שנשבעים לא להשתמש בירושה בכלל- ולא בטוח שזאת גישה נכונה. לירושה יש את היתרונות שלה, במיוחד במניעת חזרה על הקוד.

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

לטעון תגובות?