2.3.3. החלק הדינאמי של אובייקטנחלק את האובייקטים לשני סוגים:
איך לקוח מתקשר עם העצמים השונים? הלקוח: מסוגל לשלוח הודעות לאובייקט כדי לקבל מידע על המצב שלו, או לבקש ממנו לשנות אותו. ללקוח אין גישה ישירה אל מאפייני האובייקט. העברת הודעות: דרך התקשורת בין הלקוח אל האובייקט. מינוח בשפת C++: מתודות והודעות מכונות function members בשפת C++. הלקוח: יכול לשלוח הודעה. הודעה היא שם סימבולי + ארגומנטים במידת הצורך. אובייקט: מפעיל מתודה בתגובה להודעה, יכול להחזיר במקרה הצורה תשובה ללקוח. ההבדל בין הודעה לשיטה: הודעה – פעולה מופשטת שאנחנו רוצים לבצע. מתודה – המימוש של הפעולה. דוגמא להודעה היא אפילו האופרטור +. משתנים מסוגים שונים יתנהגו בצורה שונה כאשר נחבר ביניהם. יתר על כן – בשפת C++ ניתן לחפוף אופרטורים ולהגדיר אפילו עבור מחלקות שאנחנו כותבים את האופרטור, ובכך לראות בצורה טובה את ההבדל בין ההודעה "+" לפעולה, המתודה, המבוצעת בהתאם. נגיד שולחים לאובייקט הודעה, אם איננו יודעים מאיזה סוג הוא, איננו יודעים (ולא מעניין אותנו) איזה מתודה תבוצע. היכולת להפריד בין ההודעה למתודה מושג על ידי תכונת הפולימורפיזם בתכנות מונחה עצמים. ניקח לדוגמא את האובייקט צורה ואת הפעולה סיבוב. עבור צורה כללית, אם הזווית היא לא נעשה כלום, ואחרת נסובב אותה בזווית המבוקשת. עבור עיגול, עבור כל זווית אין צורך לבצע כל פעולה. עבור מלבן, סיבוב ב- או ב- אינו מצריך פעולה. כל אחד מהאובייקטים יגיב בצורה שונה להודעה "סובב את עצמך". |
תוכן העניינים:
קישורים רלוונטיים:שיתוף: |
Borland style vptr
לפי מה שאני מכיר:"חסרון בגישה זו: גם כאשר איננו משתמשים ב-dynamic binding – אנחנו משלמים במקום"
לא נכון , עבור מחלקה A שאין לה מתודות דינמיות לא יווצר כלל המצביע, ולמשל עבור מחלקה B שיורשת מA פשוט נוסיף בהתחלה את המצביע, ואחרי הבלוק של A את שאר האינפורמציה של B . וככה לא משלמים על מה שלא משתמשים ועקרונות C++ נשמרים.
מה שכן באמת הcasting קצת יותר מסובך....