הכרנו קצת מהן פונקציות וירטואליות.
יישום מאוד שימושי וחזק של פונקציות וירטואליות הוא כתיבת Template methods.
Template method זו בעצם מתודה רגילה, הקוראת למתודות אחרות של האובייקט שלנו.
הTwist פה הוא שחלק מהמתודות אותן הTemplate method מפעילה, הן מתודות וירטואליות.
לדוגמה, נניח שיש לנו מחלקה כזאת:
|
|
זו מחלקה אבסטרקטית (עם עיצוב נאיבי) המייצגת מכונת שתייה. יש פה הרבה פונקציות שצריך לממש.
כעת נוכל לכתוב בעזרת פונקציות אלה מימוש לקנייה של מוצר:
|
|
מה שיפה פה זה שלמרות המימוש של הפונקציות האלה טרם נכתב, אנחנו כן יכולים לכתוב שלד לפונקציה, המבצע את המבוקש.
כעת מי שירש מהמחלקה שלנו, יקבל אוטומטית מימוש לפונקציה BuyDrink.
הדבר הזה מאוד חזק.
הוא מאפשר מספר דברים טובים:
- מניעת שכפול קוד – במקום שכל אחד יממש בעצמו את הפונקציה הזאת, היא ממומשת פעם אחת בBase.
- שינוי התנהגות של המחלקה ע"י ירושה ודריסה.
- נקודות כניסה מוגבלות – במקום שהTemplate Method יהיה וירטואלי וכל אחד ידרוס אותו, אנחנו יכולים להגביל אותו, ולאפשר לדרוס רק את הפונקציות שהוא משתמש בהן.
המשך טיוטת יום וירטואלי טוב.