09-08-2006, 19:22
|
|
|
חבר מתאריך: 26.06.05
הודעות: 74
|
|
אני אנסה...
בג'אווה (ובשפות מונחות עצמים אחרות) יש כלי מאוד חזק שנקרא ירושה. אם אובייקט A יורש את אובייקט B אז כל הפונקציות של B קיימות באובייקט A. מצד שני אפשר להוסיף פונקציות ל- A או לשכתב פונקציות של B כדי שיתאימו ל- A
זה טריק מאוד נחמד אבל בירושה יש הרבה יותר - אפשר להתיחס לאב כאילו הוא הבן, כלומר להחזיק מצביע B אבל בעצם להחזיק את A.
לדוגמה: יש לנו מחלקת אב Animal וממנה יורשות Dog, Cat and Bird.
אני מחזיק מצביע לאב:
אבל בעצם אני יכול להצביע לכל אחד מהבנים
קוד PHP:
animal = new Dog(); animal = new Cat(); animal = new Bird();
לדבר הזה יש מגבלה אחת: אם הוספנו פונקציונליות לאחד ממחלקות הבן, אי אפשר לגשת אליהם דרך מצביע לאב. כלומם אם ל Animal יש פונקציה makeSound() אז אפשר לכתוב
קוד PHP:
animal = new Bird(); animal.makeSound();
אבל אם ל- Bird יש פונקציה fly() ול Animal אין, אז אי אפשר לכתוב:
קוד PHP:
animal = new Bird(); animal.fly();
המנגנון הזה מאוד חזק כי (אחת הסיבות) הוא חוסר הרבה תנאים (if) - במקום לשאול כל פעם מי האובייקט - פשוט להחזיק פויינטר אל האב
לדוגמה - אפשר להחזיק מערך של Animal ובכל תא לשים בזמן ריצה סוג חיה אחר. אז לעבור על כל תא, לקרוא לפונקציה makeSound() וכל חיה תישם את הפונקציה בדרך אחרת (בלי פולימורפיזם היה צריך לשאול כל פעם איזה חיה זאת)
אני מקווה שהבנת - אם לא... תשאל באופן יותר ספציפי
|