שיחה:פולימורפיזם (מדעי המחשב)

תוכן הדף אינו נתמך בשפות אחרות.
מתוך ויקיפדיה, האנציקלופדיה החופשית

הי ! אני ויקפד ירוק יחסית .. ניראה לי שאני רוצה לאמץ את הערך הזה .. אולי העלתי אותו קצת מוקדם מידי לאויר .. חסר לי קצת ידע לגבי: - איך לשייך לקטגוריות. - איך לכתוב קוד C++ באנגלית שיופיע בצד שמאל יפה. - איך לכתוב C++ כך שה- ++ היה לפני ה - C. - בכלל קצת שיפשוף וקפדי לגבי איפה לשים קישורים ואיפה לו.

למה אני מספר את כל זה ?

א. כדי להתנצל קצת.

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

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

בברכת עולם חופשי - אורי מוסנזון 03:37, 13 דצמ' 2004 (UTC)

פעלת בסדר גמור. למידה תוך כדי כתיבה היא שיטה מקובלת כאן. חסר לי קישור של הערך לתכנות מונחה עצמים. דוד שי 04:05, 13 דצמ' 2004 (UTC)
ראשית, ערך יפה מאוד, אם כי חסר לי פירוט גדול יותר של דוגמאות למימוש בפועל של פולימורפיזמים בתכנות. שנית, שיניתי קצת את הניסוח של האלגוריתמים, כדי שלא יהיה לא בלשון זכר ולא בלשון נקבה. זאת כי א) נראה די צורם שזה בלשון נקבה (למרות הכוונות הטובות) כשסגנון הפנייה המקובל בויקיפדיה הוא בלשון זכר דווקא, וב) לטעמי האישי הכי טוב להימנע מפנייה מינית מפורשת כשאין בכך צורך, ודיבור בלשון רבים ציווי פותר את הבעיה. אתה מוזמן לתקן חזרה אם זה מפריע לך (או לומר לי ואני אתקן חזרה). גדי אלכסנדרוביץ' 05:13, 13 דצמ' 2004 (UTC)
אני חושב שהאינטואיציה שלך לגבי פניה למינים היא נכונה, נסיתי להיות קצת פוסט פמיניסטי אבל זה לא היה לעניין.
כן, אני רוצה להוסיף דוגמאות מעשיות וקוד קונקרטי , ראה "הצילו" להבין מה מונע אותי .. אורי מוסנזון 19:24, 13 דצמ' 2004 (UTC)

לא רמות הפשטה אלא מערכות הפשטה[עריכת קוד מקור]

ההגדרה של הערך והדוגמאות מתייחסים ל-"הכללה" המושגת בדרך-כלל בתכנות מונחה-עצמים על-ידי ירושה. אומנם יש כאן רב-צורתיות אולם מסוג מסיום בלבד - "הינו" או "IS A" - המתייחס ליחס ירושה (extends ב-java). פולימורפיזם מתייחס לרב-צורתיות של העצם בהתייחס למערכות הפשטה שונות. פולימורפיזם מושג על-ידי ירושה מרובית ו/או מימוש של מספר מימשקים. בצורה זו העצם יכול לשאת תפקיד שונה במערכות יחסים שונות על-ידי כך שהוא עוטה עליו את המימשק המתאים. למשל עצם מסוג Car העונה גם למימשק UIControl משתלב במערכת ה-GUI (מצייר את עצמו וכו"), עונה למימשק Serializable ומקבל שרותים כגון שמירה לקובץ והעברה בין נדבכים (tiers) מרכיבים תשתיתיים, וכיוצא באלה.

לפיכך בהגדרה המקורית הייתי מציע להחליף "רמות הפשטה" ב-"מערכות הפשטה".

הייתי שמח מאד לקבל פידבק על הערך. אני יודע שהוא עדיין חסר מאד ומתלבט מה להוסיף. החלטתי כבר להוסיף הסבר על מימוש של פולימורפיזם בזמן ריצה ע"י virtual table בתוספת איורים סכמטיים, אבל מה עד ? דוגמאות בשפות אחרות ? האם זה חשוב או שהרעיון חוזר על עצמו ? אורי מוסנזון 11:21, 1 פבר' 2005 (UTC)

"פולימורפיזם (בעברית: "רב צורתיות") הוא מנגנון המאפשר הפעלה של פונקציה מתוך התייחסות מופשטת לאובייקט. הפונקציה שמופעלת אופיינית לסוג האובייקט המסויים אליו התייחסו", לפני כניסה לערך הקורא צריך לצלוח את המשפטים האלו, וזו משימה לא קלה. הייתי גם מוותר על הדוגמה מתהליך גרהם שמידט. ההסבר עם המכונית והחלפת הגלגל מצוין. שש"ז 12:20, 1 פבר' 2005 (UTC)
לטעמי (אם כי אני סטודנט למתמטיקה) הדוגמא של הוקטורים גם היא מצויינת, ויותר מזה - מדגימה גם מקום שבו ייתכן שימוש מעשי בפולימורפיזמים. בשום פנים ואופן לא להוריד (מה גם שרוב הסטודנטים למדעי המחשב ידעו מהו וקטור ומהו תהליך גרהאם שמידט). גדי אלכסנדרוביץ' 12:27, 1 פבר' 2005 (UTC)
אני חולק מאוד על דעתך בעניין גרהם שמיט. סה"כ בניגוד להחלפת הגלגל, זו כן דוגמה שאפשר לעשות בשפת תכנות, ונותנת לערך קשר למשהו אמיתי. eman 12:29, 1 פבר' 2005 (UTC)
אבל לא כל מי שמתעניין מונחה עצמים הוא סטודנט למדעי המחשב... כשמסבירים לדובר עברית מילה באנגלית לא צריך להשתמש באמצע בסינית, לטעמי.
בקשר למשפטים הקשים בהתחלה, יכל להיות ש-שש"ז צודק אבל מצד שני אני חושב שהמשפטים הראשונים בערך אינציקלופדי אמורים להגדיר את המושג ללא כניסה לפרטים. לאחר מכן צריכים לבוא הפרטים והאינטואיציות. לא מצאתי דרך לעשות זאת ע"י משפטים אחרים בהתחלה. אנשטיין אמר פעם שכל דבר יש להסביר באופן הפשוט ביותר אבל לא באופן פשטני (אין לי את הציטוט המדויק). אם יש לכם הצעות להעביר את הרעיון בצורה פשוטה יותר אבל לא פשטנית, אשמח לראות. בקשר לדוגמת גרהם שמידט, אני מסכים עם גדי ו - eman . לדעתי טוב שיהיו דוגמאות ממיספר תחומים שונים. עם קוראים מסויימים חסרים את הרקע להבין את חלקן, זה לא נורא. אולי כדאי להוסיף הערה, שהדוגמה רק ממחישה את הרעיון ואיננה הכרחית להבנת המושג. אורי מוסנזון 20:36, 1 פבר' 2005 (UTC)
לפי דעתי כל סטודנט במדעי הטבע או ההנדסה בשנה א' צריך להיתקל במושג הזה בקורס לאלגברה ברמה כלשהי בשנה א'. eman 22:54, 1 פבר' 2005 (UTC)

על ההבדל בין פולימורפיזם והמנגנונים להשגתו[עריכת קוד מקור]

אורי היקר, כל הכבוד על היוזמה הברוכה!

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

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

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

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

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

keep on the good work!

--דן צפריר 16:06, 13 אפר' 2005 (UTC)

ברוך הבא יקירי, טוב לראות אותך כאן! שים לב שויקיפדיה היא ויקי - כל אחד יכול לערוך את הערך. הפיסקה הראשונה אותה ביקרת הוספה ע"י מלח השמים ובדף השיחה שלו תמצא התנגדות שכתבתי לפיסקה זו (דומה לשלך).נסה לבדוק את "גרסאות קודמות" שם תמצא פיסקה אלטרנטיבית שלי. יש גם מנגנון diff בין גרסאות. בויקי כמו בויקי, כל אחד יכל לערוך, גם אתה. אשמח עם תשנה את הפיסקה הראשונה. אני עצמי מתלבט קשות בקשר אליה. אורי מוסנזון 16:18, 13 אפר' 2005 (UTC)
קשלה לי להאמין שזה יקרה :) נדמה לי שאסתפק בהערתי זו ואשאיר את היתר בידך... --דן צפריר 10:49, 17 אפר' 2005 (UTC)
ניתן לכתוב פולימורפיזם כאשר מה שמשתנה זה הפקודות. למשל יש לך טיפוס של מסמך ואילו הפקודות עליו משתנות ע"י הורשה. טרול רפאים 16:24, 13 אפר' 2005 (UTC)
בפולימורפיזם, "מה שמשתנה" זה תמיד "הפקודות". כל העניין בפולימורפיזם זה לדעת מה הן הפקודות הנכונות אותן יש להפעיל (וכשאני אומר "לדעת", אני מתכוון שהמנוע של השפה צריך לדעת). ברם, "הפקודות", לדג' של המסמך עליו אתה מדבר, משתנות כיוון שהטיפוס של המסמך משתנה. אתה מדמיין שאתה כותב: ref.function, מה שלמעשה קרה הוא שקראת ל- function עם ארגומנט אחד (ref), וע"פ הטיפוס *האמיתי* של ref, המנוע של השפה יודע להכריע לאיזו function בדיוק יש לקרוא. במילים אחרות, this הוא הארגומנט הראשון של כל פונקציה וירטואלית, אשר לפי טיפוסו (האמיתי, הקונקרטי) השפה יודעת להכריע לאיזה פונקציה לקרוא. שורה תחתונה: הפקודות משתנות בגלל שהטיפוס משתנה ואין דבר כזה "הפקודות עליו משתנות" --- לא, הטיפוס השתנה ולכן הפקודות השתנו בהתאמה. --דן צפריר 10:49, 17 אפר' 2005 (UTC)
אגב, אורי, מן הסתם יש להבהיר אי הבנה זו כבר בהגדרה: אנשים תמיד שוכחים ש- this הוא הארגומנט הראשון ולפי טיפוסו נקבע לאיזה פונקציה קוראים.--דן צפריר 10:49, 17 אפר' 2005 (UTC)
האמירה שזה מגנון הכללה איננה מדויקת, ב-Perl אינך צריך לעשות דבר בשביל לקבל פולימורפיזם, למעשה אין הפרדה ב-Perl בין האובייקטים השונים ולכן מקבלים את התוצאה הזאת. טרול רפאים 16:24, 13 אפר' 2005 (UTC)
"האמירה" מדיוקת ביותר! וגם ב- Perl עליך (או על מי שכתב את האוביקטים בהם אתה משתמש) לעשות הרבה יותר מאשר "שום דבר". אין קסם ב- Perl. פולימורפיזם ב- Perl עובד בדיוק כמו בירושה של Java או ++ C (כלומר ע"י פוינטרים לפונקציות). עליך (או על הכותב של הספרייה) לממש גירסה של פעולה לכל טיפוס --דן צפריר 10:49, 17 אפר' 2005 (UTC)
זה לא נכון, אין ב-Perl טבלת פוינטרים כמו שיש ב-C++. מה שקורא זה שהקומפלייר עושה חיפוש טקטסטואלי על רשימת הפונקציות שהוא מחזיק (ולא רק על אלו שקשורות לאובייקט). התהליך הוא גלובלי, לא מקומי. טרול רפאים 16:10, 17 אפר' 2005 (UTC)
מה יהיה איתך, טרול? ראשית, אתה טועה בקשר ל- perl שבהחלט עובדת עם פוינטרים לפונקציות (לדג', נניח שיש לך סברוטינה בשם f אזי fref = \&f$ זה הפוינטר שלה ואתה יכול להפעילה כך: ()<-fref$ ; ראה פרק 6 ב- "perl programming" ספר הגמל). ודאי שפולימורפיזם ב- perl ממומש כך (ולא ע"י חיפוש טקסטואלי) שכן יוצרי השפה הם בחורים די אינטליגנטים (ראה את קוד המקור של perl שכתוב ב- C ובו רפרנס לסברוטינה של perl מתרגם במיידי לפוינטר לפונקציה של C).
אבל שנית, והרבה יותר חשוב, גם אם היית צודק בטענתך, זה רק היה מחזק את ההגדרה הנ"ל של פולימורפיזם: זהו מנגנון הכללה המאפשר לך לכתוב אלגוריתם אחד שעובד בעבור הרבה צורות (טיפוסים). ואין זה משנה איך בדיוק העסק ממומש (פוינטר לפונקציה או חיפוש טקסטואלי בזמו ריצה, אוtemplate, או void*). כל אלו הם *אמצעים* להשגת *המטרה*: שהיא, כאמור, כתיבת אלגוריתם מוכלל פעם אחת בלבד, במקום שיכפול הקוד בעבור כל צורה.--דן צפריר 10:17, 20 אפר' 2005 (UTC)
ולכל המפקפקים: ההגדרה של Bjarne Stroustroup (עמ' 347 ב- "The C++ Programming Language 3rd. ed"):
Code implementing the template is identical for all parameter types, as is most code using the template. An abstract class defines an interface. Much code for different implmentations of the abstract class can be shared in class heirarchies, and most code using the abstract class doesn't depend on its implementation. From a design perspective, the two approaches are so close that they deserve a common name. Since both allow an algorithm to be expressed once and applied to a variety of types, people sometimes refer to both as polymorphic. To distinguish them, what virtual functions provide is called run-time polymorphism, and what templates offer is called compile-time polymorphism
--דן צפריר 11:07, 20 אפר' 2005 (UTC)
השאלה היא מה ה-Key של הפונקציה, כמובן שב-Perl לא מחפשים בטקסט עצמו אלא בטבלת הפונקציות (במיוחד שהתוכנית מקומפלת בהתחלה!). ה-Key שם הוא טקסטואלי ובוודאי שזה עובד ככה שעושים ירושה ב-Perl. טרול רפאים 16:12, 2 מאי 2005 (UTC)

תודה, מלח[עריכת קוד מקור]

ושוב אני נפעם לגלות את רמת הדיסלקציה שלי. טוב שיש אנשים כמוך. מי ייתן והם יקבלו את ההכרה לה הם ראויים.אורי מוסנזון 16:03, 5 מאי 2006 (IDT)

מצטער, לא מצליח להתאפק. זה כנראה עדיין בוער בעצמותיאורי מוסנזון 16:04, 5 מאי 2006 (IDT)
האם לא סימנתי את עריכתי כעריכה משנית? מלח השמים שיחה 19:26, 5 מאי 2006 (IDT)

תהיה לגבי התיקון[עריכת קוד מקור]

"מבחינת זיכרון, כאשר ל-Class יש לפחות פונקציה פולימורפית (וירטואלית) אחת, כל אובייקט מסוגו (וכמובן מסוג יורשיו) יכיל מצביע virtual table pointer."

התוספת הייתה הערת הסוגריים על היורשים.

לי זה בכלל לא מובן. נניח שאנחנו ב-CPP. מה קורה אם היורש מכריז על הפונקציה הזו אצלו כלא-וירטואלית? האם היא עדיין תופיע בטבלה? מדוע? גדי אלכסנדרוביץ' - שיחה 15:50, 28 בפברואר 2008 (IST)[תגובה]

גדי, ככל שזכור לי אין אפשרות ב- ++C להצהיר על פונקציית יורש כלא וירטואלית אם הוגדרה כוירטואלית אצל אב קדמון. גם אם לא מציינים אותה כ - virtual היא עדיין וירטואלית ולכן התוספת נראית לי בסדר. אגב, ישנם שפות (כמו Java) שבכלל לא קיימות פונקציות לא וירטואליות.אורי מוסנזון - שיחה 01:40, 18 באפריל 2008 (IDT)[תגובה]

האם הערך מתאים להיות ערך מומלץ?[עריכת קוד מקור]

אם כן, מה הפרוצדורה להעמיד אותו להצבעה? אם לא, מה עדיין חסר או טעון תיקון?אורי מוסנזון - שיחה 15:56, 30 במאי 2009 (IDT)[תגובה]

הערות שקשורות לתוכן[עריכת קוד מקור]

  1. "כתיבת תוכנה ברמות הפשטה שונות".
    1. ההגדרה הזאת מטעה לדעתי, פולימורפיזם מאפשר להתייחס לכל רמות ההפשטה כאילו כולן באותה רמה. ההגדרה לא צריכה להסביר מה נובע מהמנגנון אלא מה הוא עושה.
    2. המילה הפשטה מקשרת לערך שלא קשור לעולם המחשבים. לדעתי אפשר ליצור את הערך הפשטה (תוכנה) או להוסיף פרק בנושא הפשטה בערך הקיים.
  2. הערך לא מוסר מידע אלא יש בו בעיקר דוגמאות והסברים עליהן, שיטת העברת מידע כזו מצוינת ללימוד אך אינה טובה לערך אנציקלופדי. לאחרונה הרהרתי ברעיון לכתוב ספר על תכנות מונחה עצמים עבור ויקיספר והערך הזה בהחלט יכול להשתלב שם בתור פרק.
  3. בכל הערך אין התייחסות לירושה ולהבדל שבין פולימורפיזם להעמסה (Overloading).
  4. אין התייחסויות היסטוריות.
  5. אין הסבר על סוגים של פולימורפיזם (מבני נתונים פולימורפיים מול שגרות פולימורפיות).
  6. איזה שפות תומכות בפולימורפיזם?

הערות צורה וסגנון[עריכת קוד מקור]

  1. המבוא ושתי הפסקאות שאחריו אומרות בדיוק את אותו דבר בארבע דרכים שונות. צריך לקצץ, לאחד ולהרחיב את המבוא.
  2. הערך מלא בשיפוט ערכי (POV), הוא מדבר על הכח של המגנון, כמה הוא טוב וכמה הוא חשוב. לדעתי אפשר לוותר על התיאורים האלה לטובת העברת מידע יבש.
  3. הדוגמא להחלפת גלגל ברכב צריכה לבוא אחרי הסבר כלשהו מה זה בכלל המגנון (בניגוד לכל הפסקאות שרק מספרות מה אפשר לעשות עם זה). אין התייחסות לירושה בכלל ככה שקשה להבין את הדוגמא.
  4. מצביע מסוג מופשט, המצביע לאובייקט קונקרטי. - האם מדובר כאן על אובייקטים פורמליים ואובייקטים אקטואלייים?
  5. אני לא מבין למה צריכים דוגמאות שכוללות קוד ואי-אפשר להסתפק בפסואודו קוד. אני יודע לתכנת במספר לא קטן של שפות אבל דווקא בC++ לא - איך הדוגמא עוזרת לי? מה עם מי שיודע לתכנת באפס שפות, האם הדוגמאות עוזרות לו?
    1. ב C לעומת זאת אני שולט היטב והדוגמא עדיין לא עוזרת לי בלי להשקיע מאמץ בהבנתה (כידוע, קוד C קשה לקריאה לכל אחד).
  6. פולימורפיזם בזמן ריצה הוא מנגנון חזק יותר מפולימורפיזם בזמן קומפילציה - למרות היכרותי עם התחום לא הצלחתי להבין מה זה פולימורפיזם בזמן קומפילציה.
  7. פולימורפיזם בשפת C הוא פעולת האק ואינו נתמך באופן ישיר בשפה. לפיכך התייחסות אליו היא סוג של מחקר מקורי.
  8. הערך דורש עריכה לשונית: יש בו מינוחים לא אחידים (פולימורפיזם <--> polymorphism, הפשטה <--> אבסטרקציה), שימוש בגוף ראשון (העובדה שהצלחנו) ומשפטים לא לגמרי ברורים ("מצביע מסוג מופשט, המצביע לאובייקט קונקרטי") תומר א. - שיחה 12:21, 10 באוגוסט 2009 (IDT)[תגובה]

תשובות להערות של תומר[עריכת קוד מקור]

הי תומר. העלת הרבה דברים. אנסה להתחיל להתייחס אבל אשאיר קצת לימים הבאים.
  • "..פולימורפיזם מאפשר להתייחס לכל רמות ההפשטה כאילו כולן באותה רמה.." - אני לא מסכים. המנגנון מאפשר לך לבחור את רמת האבסטרקציה שבה אתה רוצה לכתוב. אתה יכל לכתוב קוד למכוניות, אתה יכל לכתוב קוד למשאיות ואתה יכל לכתוב קוד לאוטוביאנקי שנת 73. כמה שתכתוב ברמת אבסטרקציה יותר נמוכה, הגבלת הכלליות תאפשר לך יותר פעולות.
  • "..המילה הפשטה מקשרת לערך שלא קשור לעולם המחשבים.." - אני רואה טעם לקשר להפשטה במובנה הכללי. פולימורפיזם הוא הדרך לממש הפשטה בתכנות. כדאי לדעת מה היא הפשטה בהקשר הכללי ובהקשרים ספציפיים אחרים.
  • "..הערך לא מוסר מידע אלא יש בו בעיקר דוגמאות והסברים עליהן.." - פה אני חושב שאני צריך ממך דוגמה. למה אתה קורה מסירת מידע בהקשר הזה.
  • "..בכל הערך אין התייחסות לירושה..". כן.. כנראה שצריך להוסיף.. למרות שאין הכרח בירושה לקיום פולימורפיזם, הדוגמאות בקוד אכן מתייחסות לירושה.
  • "אין התייחסות..להבדל שבין פולימורפיזם להעמסה (Overloading).." - אולי צריך להוסיף משהו בגלל שהבילבול בינהם נפוץ. אישית נראה לי שמדובר בשני נושאים שהקשר בינהם אינו חזק. overloading מתבסס על העובדה שזיהוי פונקציה לא נעשה רק ע"י שמה אלא גם ע"י רשימת הטיפוסים הסדורה של הפרמטרים שלה. אין כאן מימוש של אבסטרקציה, רק שידוך בזמן קומפילציה לפונקציה המתאימה.
  • "..אין התייחסויות היסטוריות.." כן, נכון, כדאי להוסיף.
  • "..אין הסבר על סוגים של פולימורפיזם..(מבני נתונים..שגרות..)" - לא נראה לי שאתה מדבר על סוגים. קוד פולימורפי מערב בדרך כלל מבני נתונים עם התיחסות אבסטרקטית. לא הייתי מדבר פה על שני דברים נפרדים. אולי כדאי להדגיש יותר את העניין של מבני נתונים הטרוגניים.
  • "..איזה שפות תומכות בפולימורפיזם.." - כדאי אולי להוסיף משהו לגבי השפות המרכזיות. יש יותר מדי שפות איזוטריות לרשימה ממצה.
  • לגבי שאר ההערות.. בהמשך...

אורי מוסנזון - שיחה 04:07, 11 באוגוסט 2009 (IDT)[תגובה]

נמשיך..
  • "המבוא ושתי הפסקאות שאחריו אומרות בדיוק את אותו דבר בארבע דרכים שונות" - אולי.. אני צריך לחשוב על זה שוב. לדעתי יש טעם בביקור מחודש מכמה זוויות שונות כשמדובר בנושא בעל עומק וקושי בתפיסה. אולי צריך לעשות זאת אחרת.
  • "הערך מלא בשיפוט ערכי (POV)" - אני לא חושב ככה. נדמה לי שכל איש פיתוח יסכים שלמנגנון יש כוח וחשיבות רבה. זה דומה להסכמה הכללית שיש בקרב המתמטיקאים לגבי הכוח של ההפשטה.
  • "הדוגמא להחלפת גלגל ברכב צריכה לבוא אחרי הסבר כלשהו מה זה בכלל המגנון" - שוב, אני צריך הסבר ממך למה אתה רואה כהסבר. אני רואה בדברים שכתבתי הסבר למהות המנגנון. אני מסכים שחסר הסבר על ירושה להבנת הקוד.
  • "מצביע מסוג מופשט, המצביע לאובייקט קונקרטי. - האם מדובר כאן על אובייקטים פורמליים ואובייקטים אקטואלייים?" - לא. מדובר על מצביע מטיפוס *B שמצביע לאובייקט מסוג *D (כאשר B זה הבסיס ו D זה היורש). מקרה פרטי יכל להיות בהעברה של כתובת האובייקט כפרמטר לפונקציה וקבלתו ע"י הפונקציה כפרמטר מסוג *B. עדיין, לא מדובר פה על ההבדל בין המשתנה בתוך הפונקציה לזה שהיה מיחוץ לה.
  • "אני לא מבין למה צריכים דוגמאות שכוללות קוד ואי-אפשר להסתפק בפסואודו קוד" - בדרך כלל אני מעדיף פסאודו קוד אבל כאן זה לא נראה לי מתאים. איך אפשר להכנס לפרטי המנגנון בפסאודו קוד? אני יכל להבין הסברים על אלגוריתמים המשתמשים בלולאות, התניות ומערכים אבל איך עושים את זה עם פולימורפיזם?

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

  • C לעומת זאת אני שולט היטב והדוגמא עדיין לא עוזרת לי בלי להשקיע מאמץ בהבנתה (כידוע, קוד C קשה לקריאה לכל אחד)" - כן זה דורש מאמץ. אני חושב שהמאמץ הזה אינהרנטי לרעיון המוצג שם. כמו שאיינשטין אמר (תרגם חופשי): דברים צריכים להיות מוצגים בצורה הפשוטה ביותר האפשרית אבל לא פשוטה יותר (כי אז זו פשטנות). אני לא יודע להציג את הרעיון בצורה פשוטה יותר מבלי לזלוג לפשטנות. אני לא מסכים שקוד C בהכרח קשה לקריאה. זה תלוי איך כותבים אותו.
  • "למרות היכרותי עם התחום לא הצלחתי להבין מה זה פולימורפיזם בזמן קומפילציה" - אני שואל את אצמי למה. אולי זה בגלל שהנושא לא מוסבר כמו שצריך. אולי בגלל שהרעיון חדש לך. נסה בבקשה לקרוא שוב.. לי נראה שאפשר להבין. מדובר על קוד שהוא כללי מבחינת הטיפוס שעליו הוא עובד. הוא מפעיל פונקציות (מטודות) של אובייקט מסויים בלי להתחייב על הטיפוס ועל הקוד הספציפי שיופעל. ההחלטה איזה קוד באמת יופעל תתבצע בזמן קמפילציה ולא בזמן ריצה. המנגנון חלש יותר כי הוא מחייב מבנה נתונים הומוגני ולא מאפשר שיהיה הטרוגני (כמו שמאפשר פולימורפיזם של זמן ריצה)
  • "הערך דורש עריכה לשונית: יש בו מינוחים לא אחידים (פולימורפיזם <--> polymorphism, הפשטה <--> אבסטרקציה),שימוש בגוף ראשון (העובדה שהצלחנו) ומשפטים לא לגמרי ברורים ("מצביע מסוג מופשט, המצביע לאובייקט קונקרטי")" - אנא עזור לי.. לי הדברים נראים יחסית בסדר. אשמח לראות שינויים שלך עם ניסוחים משופרים.

תודה רבה על העיון המעמיק וההערות המפורטת. אני מקווה שנוכל יחד לשפר את הערך ולהביא אותו לרמה הדרושה למומלצות. אני מבין שיכל להיות שלאחדם מאיתנו הוא נראה רחוק עדיין מהרמה הדרושה. לי הוא לא נראה ככה.אורי מוסנזון - שיחה 12:22, 11 באוגוסט 2009 (IDT) מכיוון שאני קצר בזמן אתייחס בינתיים לכמה סעיפים, ננסה לעבוד עליהם ואז נמשיך. אשמח לסייע בהפיכת הערך למומלץ.[תגובה]

  1. "..פולימורפיזם מאפשר להתייחס לכל רמות ההפשטה כאילו כולן באותה רמה.." - אתה צודק, הניסוח שלי איננו טוב. זה נובע מכך שכתבתי אותו כהערה בדף השיחה ולא כפתיח הערך. יחד עם זאת, אין זה מבטל את טענתי, המנגנון אמנם מאפשר כתיבת תוכנה ברמות הפשטה שונות אך זאת לא המהות שלו. המהות היא היכולת להתייחס לרמות הפשטה שונות כאילו היו אותה רמה. ראה גם סעיף 2.
  2. הפשטה - מקבל, אם כי הייתי מוסיף שם פרק הנוגע להפשטה בהנדסת תוכנה. מי שלא יודע מה הכוונה במשפט "כתיבת תוכנה ברמות הפשטה שונות" לא ילמד מהלחיצה על הלינק דבר. פולימורפיזם אינו (!) הדרך לממש הפשטה בתכנות. הוא בסה"כ כלי שמקל את החיים. הכלי המרכזי המאפשר הפשטה הוא כימוס, עדה 83 היה שפת תכנות מונחה עצמים (=משתמשת בהפשטה) אך לא היה בה פולימורפיזם.
  3. בעולם המעשה ירושה ופולימורפיזם הם שני כלים משלימים שמקורם במבנה האחיד של האובייקט עליו הם פועלים, לו הייתי אני כותב את הערך הייתי מתייחס לדואליות הזו. השיטה שלך הבאה מהמקום התיאורטי-אקדמי לגיטימית אך עדיין יש לבנות את התשתית בערך. אתה כותב "אין הכרח בירושה לקיום פולימורפיזם" - במה כן יש הכרח? אין משמעות להסבר המושג ללא הסבר הסביבה שבה הוא קיים. מה הוא מאפשר? למה הוא מאפשר את זה? למה זה שווה את המאמץ? איזה בעיות זה פותר. כל זה חסר בערך (ולדעתי אפילו במבוא). לדברים אלה אני מתכוון באומרי "תשתית". תומר א. - שיחה 13:03, 11 באוגוסט 2009 (IDT)[תגובה]

שבירה[עריכת קוד מקור]

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

האלגוריתם שאני כותב נכון לכולם אבל מקבל משמעות שונה עבור כל מקרה ספציפי. בספר של Stroustrup מופיע המשפט:

"abstruction is a selective ignorance"

המשך יבוא.. אורי מוסנזון - שיחה 19:34, 11 באוגוסט 2009 (IDT)[תגובה]

אנחנו מדברים על אותו דבר וגם מסכימים על העובדות (כנראה מתוקף העובדה ששנינו יודעים מה זה פולימורפיזם) נשאר רק לנסח את זה בערך. אתה כותב שאתה יכול לכתוב קוד המתייחס לאובייקטים שונים באותה רמת הפשטה אבל למשפט הזה אין ביטוי בערך, בערך כתוב שה"מנגנון המאפשר כתיבת תוכנה ברמות הפשטה שונות". הוא אכן מאפשר את זה אך זוהי רק תוצאת לוואי שלו (התייחסות לאובייקטים שונים באותה רמת הפשטה). תומר א. - שיחה 19:58, 12 באוגוסט 2009 (IDT)[תגובה]
עיינתי מעט בערך האנגלי שאיננו כל כך ארוך. לדעתי כדאי לתרגם ממנו חלקים, במיוחד את ההגדרה וההקדמה, ואת החלוקה בין סוגים שונים של פולימורפיזם. אפי ב. • התחברו לרגשותיכם20:33, 12 באוגוסט 2009 (IDT)[תגובה]

קוד סי++ רע[עריכת קוד מקור]

אני מצטער, אבל אם רוצים לכתוב בסי++ אז צריך לכתוב בסי++. הקוד כפי שכתוב כעת הוא קוד סי++ רע. בסי++ לא משתמשים במערכים, בשביל זה יש את ה class vector של stl. חוץ מזה, מקצים פה זיכרון בלי לשחרר אותו, ובכלל, עדיף לעבוד עם רפרנסים במקום עם מצביעים. 129.241.61.254 16:22, 11 באוגוסט 2009 (IDT)[תגובה]

למרות שאינני אוהב את השפה במיוחד, כתבתי בה המון וקראתי הרבה ספרים אודותיה. אני ממש לא מסכים עם הקביעה שב ++C לא משתמשים במערכים. נכון ש - vector הוא פתרון טוב להרבה בעיות אבל לא לכולן. שימוש ב vector כרוך בעליות בזכרון ובזמן חישוב. הרבה פעמים העלויות האלה זניחות אבל לא תמיד.
בדרך כלל אמירות גורפות מהסוג של "בשפה X אסור תמיד לעשות Y" מעידות על רדידות. בדרך כלל נכון להגיד "אם אתה יודע מה אתה עושה, אתה יכל לעשות מה שאתה רוצה".
לגבי שיחרור זכרון: המטרה היא לכתוב חתיכות קוד קצרות בלי להכנס לפרטים שאינם קשורים לנושא. אין כאן שיחרור זכרון, זה מוצהר וזה בסדר.
האמירה "עדיף לעבוד עם רפרנסים במקום עם מצביעים" היא עוד דוגמה לטענה גורפת רדודה. זה ממש לא תמיד נכון.
הכותרת של הפסקה עושה עוול לקוד שבערך.אורי מוסנזון - שיחה 19:20, 11 באוגוסט 2009 (IDT)[תגובה]
כאן אני מסכים עם אורי. אין הכרח להצמד למבנה השפה ואפשר אפילו לסלוח על שגיאות סינטקטיות לצורך הבהירות. שאר הדיון (מה מותר או אסור לעשות עם איזה שפה ומה מידת הקשיחות של קביעות כאלה) חורג מדף השיחה של ערך זה ואתם יכולים ללבן אותו בפקולטה להנדסת תוכנה הקרובה למקום מגוריכם. תומר א. - שיחה 20:01, 12 באוגוסט 2009 (IDT)[תגובה]
תמיההעודד (Damzow)שיחהיש לך משנה ויקיפדית? 13:29, 13 באוגוסט 2009 (IDT)[תגובה]
עודד, שאלתך לא ברורה, אנא נסח מחדש . תומר א. - שיחה 13:46, 13 באוגוסט 2009 (IDT)[תגובה]

בהגדרה ישנה חזרה משולשת על מושג ה"הפשטה", בלי תוספת הרחבה או הסבר. אפשר לרכז ולתמצת את ההגדרה. לדעתי יש לתקוף את המושג מנקודות הסברה נוספות, תוך הסבר קצר על מיקומו במתודולוגיה של תכנות מונחה עצמים. בנוסף כדאי היה לתת דוגמה משפת תכנות נוספת. אפי ב. • התחברו לרגשותיכם08:50, 12 באוגוסט 2009 (IDT)[תגובה]

איפה היה כדאי לתת את הדוגמא הזאת? בפתיח או בערך? בכל מקרה, אתה מוזמן להצטרף לדיון המתקיים שתי פסקאות למעלה. תומר א. - שיחה 20:02, 12 באוגוסט 2009 (IDT)[תגובה]
אתם גם מוזמנים לשנות את הערך עצמו (צריך להגיד את זה בויקיפדיה?). אני מניח שיש משהו במה שאתה אומר, אפי. אני מתכוון להמשיך לעבוד על הערך בעקבות ההערות ששמעתי כאן. אבל זה יקרה כאשר יהיה לי יותר זמן פנוי, כלומר - לא יודע מתי.אורי מוסנזון - שיחה 15:02, 13 באוגוסט 2009 (IDT)[תגובה]
ברור. אני אני מתכוון לעשות זאת כשאמצא שעה פנויה רצופה. תומר א. - שיחה 15:04, 13 באוגוסט 2009 (IDT)[תגובה]
ניסיתי לשפר קצת את הערך. מצאתי כמועיל את הקטע שמתייחס לפולימורפיזם בערך תכנות מונחה עצמים. לדעתי יש לצייר סכימה של עץ של מנועים, ממעבורת חלל ועד אופנוע בכדי להמחיש את הערך. אפי ב. • התחברו לרגשותיכם09:46, 14 באוגוסט 2009 (IDT)[תגובה]
הי אפי! שמחתי לראות את התרומות הרבות לערך. עוד לא הספקתי להכנס לעומקם של דברים. עץ המנועים נראה מאוד נחמד ובאמת היה צורך בדוגמה היררכית\קטגורית. למרות זאת, תרומה אחת נראית לי בעייתית. לדעתי העמסת פונקציות (מה שנקרא בערך העמסת פרמטרים), העמסת אופרטורים והצללה אינם שייכים הנה. לא מדובר במנגנונים המאפשרים הפשטה כלל. בשניים הראשונים אפשר לראות ממתקים תחבריים ובשלישי התנהגות שאינה מונחת עצמים שקיימת רק משיקולי יעילות השפה (חיסכון במצביע לטבלה ווירטואלית).אורי מוסנזון - שיחה 23:47, 16 באוגוסט 2009 (IDT)[תגובה]
שלום אורי. יתכן שאתה צודק, אבל כאשר לימדו אותי תכנות מונחה עצמים (ואני מודה שזה היה קצת מזמן ואני חלוד בעניין), לימדו אותי שמנגנונים אלו הם חלק מהרב צורתיות. מה יותר רב צורתי מכך שאתה למשל יכול לרשת מחלקת מנוע מסויימת, ולשכתב מחדש את פונקציה הדלקת המנוע באותו שם להדלקה שמתאימה לסוג המנוע החדש, כך שתקבל בסופו של דבר שתי פונקציות של הדלקה שכל אחת תתאים למנוע שהיא מתייחסת אליו בדיוק? גם בנוגע להעמסת אופרטורים לדעתי איננה רק ממתק, אלא דרך חדשה שבה עובדת המחלקה החדשה באופן שגם האופרטורים שלה שונים, למשל במקום ש+ יחבר בין שני מספרים, אני גורם לו לעבוד באופן אחר, אם במחלקה החדשה המשתנים הבסיסיים הינם מחרוזות + יגרום לשרשר אותם, שזו פעולה אחרת לגמרי מהראשונה, וצורת שונה של התייחסות. ויתכן שלגבי העמסות אתה צודק, אבל לגבי דריסה והצללה, אני כן חושב שזה שייך, וזה אכן חלק מהרב צורתיות.אפי ב. • התחברו לרגשותיכם12:35, 17 באוגוסט 2009 (IDT)[תגובה]
אני מסכים (כפי שכתבתי למעלה) שהעמסה היא חלק מרב-צורתיות. פולימורפיזם מאפשר לגשת למאפיינים המשותפים של האובייקט והעמסה מאפשרת לגשת למאפיינים היחודיים. במובן הזה העמסה ופולימורפיזם משלימים זה את זה. תומר א. - שיחה 17:27, 17 באוגוסט 2009 (IDT)[תגובה]

מרשימת ההמתנה למומלצים[עריכת קוד מקור]

הועבר מהדף ויקיפדיה:ערכים מומלצים/הוספה למומלצים/רשימת המתנה

ערך ותיק שנראה לי שהגיע לבשלות יחסית. יש עוד דברים שאפשר להוסיף על אופן המימוש של פולימורפיזם בירושה מרובה (דורש סוג של dictionary) אבל גם ככה יכל להיות שהערך נכנס עמוק מדי לפרטים. אשמח למערבות.אורי מוסנזון - שיחה 11:15, 7 באוגוסט 2009 (IDT)[תגובה]

נחמד מאוד. אם כי לא כדאי לשנות את שם הערך לפי הנוסח העברי "רב צורתיות" ולעשות הפנייה מ"פולימורפיזם". גם בקורסים משתמשים לפעמים בשם"רב צורתיות" כי זה יותר ברור. מה אתה אומר? --Galoren.com - שיחה 18:48, 7 באוגוסט 2009 (IDT)[תגובה]
אישית, אף פעם לא חבבתי את הצליל של "רב צורתיות". רב האנשים איתם יוצא לי לדבר, מדברים על "פולימורפיזם" ולא על "רב צורתיות". בדרך כלל אני מעדיף להשתמש במונחים עבריים אבל פה זה נראה לי איכשהו מאולץ.אורי מוסנזון - שיחה 21:18, 7 באוגוסט 2009 (IDT)[תגובה]
מסכים עם אורי לגבי השם, לא שמעתי את השם רב-צורתיות מחוץ לאקדמיה. תומר א. - שיחה 21:19, 7 באוגוסט 2009 (IDT)[תגובה]
הערך כתוב טוב אך אני חושש שלא כל כך מתאים יתקבל כערך מומלץ, משום שהנושא צר מדי ו"תכנותי" מידי. נראה לי שההצבעה תהיה דומה להצבעה על תמונת הרמב"ם רק שכאן הציטוטים הרבים הם קטעי קוד שלא אומרים הרבה לרוב הקוראים. אמיר. כבר ביקרת היום בפורטל להט"ב ?! 03:02, 8 באוגוסט 2009 (IDT)[תגובה]
יש דברים בגו, אם כי אני בעד הערך באופן כללי.--Galoren.com - שיחה 23:39, 8 באוגוסט 2009 (IDT)[תגובה]

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

סוגי ערכים

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

זה נראה לי הגיוני. כשאדם מגיע לערך מומלץ הוא רואה בזה תו איכות לחומר המוגש בפניו, לא טענה שהנושא פופלארי.אורי מוסנזון - שיחה 01:29, 9 באוגוסט 2009 (IDT)[תגובה]

כל מילה בסלע.--Galoren.com - שיחה 02:09, 9 באוגוסט 2009 (IDT)[תגובה]
אני לרגע לא טענתי שהערך לא ראוי להיות מומלץ או שאינו עומד בקריטריונים. נהפוך הוא, הוספתי אותו כמומלץ פורטל בפורטל המחשבים. אני רק טוען שמנסיוני הקצר בדיוני המלצות אני חושש שתתקל בהרבה מתנגדים שיטענו משהו בסגנון:
  1. הערך "תוכניתי" מידי. בדיוק כמו שכל ערך מתמטי שיש בו כמה נוסחאות ישר גורם להרבה אנשים להתנגד בטענה שזה ירתיע אנשים שאינם מבינים "מתמטית", כך ערך שבו שורות קוד רבות עשוי לזכות לתגובות דומות.
  2. הערך קצר מידי וממוקד יותר מידי כמו שהראתי בדיון על תמונת הרמב"ם.
אני כאמור בעד הערך וכשתגיע העת אני גם אצביע בעדו. אני רק אומר שתהיה מוכן לתגובות בסגנון זה והלוואי ואני אתבדה. אמיר. כבר ביקרת היום בפורטל להט"ב ?! 02:57, 9 באוגוסט 2009 (IDT)[תגובה]
אני מבין מה שאתה אומר, אמיר. אם יעלו טענות כאלה, אני חושב שיהיה יחסית קל להראות שאינן רלוונטיות. קיימות טענות אחרות שאולי יהיו יותר משמעותיות. טענות לגבי שלמות או טענות לגבי סגנון הצגת הנושא. האמת שאין לי נסיון בתהליך הזה. איך אני יכל למצוא רשימה של מומלצים בתחום התכנות? האם אפשר בכלל לבצע חיפוש כזה? חיתוך של קטגוריה עם קבוצת המומלצים. מעניין אותי לראות את הדיונים שקדמו להחלטה להפוך אותם למומלצים.אורי מוסנזון - שיחה 15:12, 9 באוגוסט 2009 (IDT)[תגובה]
עיין בערכים מומלצים בנושא מחשבים (אפל - מחשב - מיקרוסופט - מקינטוש - שפת תכנות) במיוחד באחרון.--Galoren.com - שיחה 15:16, 9 באוגוסט 2009 (IDT)[תגובה]
זהו שאין ערכים מומלצים בנושאי תכנות. הערכים היחידים הם הערכים שציין Galoren.com. בכל מקרה, רשימה ממויינת של כל המומלצים לפי נושאים יש כאן. קישור לדיון ההמלצה על ערך מסויים תמצא בדרך כלל בראש דף השיחה של אותו הערך. בהצלחה. אמיר. כבר ביקרת היום בפורטל להט"ב ?! 05:39, 10 באוגוסט 2009 (IDT)[תגובה]
כתבתי הערות בדף השיחה. אני לא חושב שהנושא צר מדי בשביל להיות ערך מומלץ (בכל זאת, נושא מרכזי מאוד בהנדסת תוכנה) אבל אני חושב שהערך כרגע עדיין לא במצב שאפשר להמליץ עליו. תומר א. - שיחה 12:25, 10 באוגוסט 2009 (IDT)[תגובה]
אכן כדאי להתייחס לדבריו.--Galoren.com - שיחה 12:45, 10 באוגוסט 2009 (IDT)[תגובה]

עניתי בדף השיחה לכל ההערות. אני מסכים שיש עוד עבודה לעשות על הערך אבל לא נראה לי שהוא רחוק מהרמה הנדרשת. אשמח מאוד לעזרה.אורי מוסנזון - שיחה 12:25, 11 באוגוסט 2009 (IDT)[תגובה]

סוף העברה עודד (Damzow)שיחהמשתמש זה הוא מובחר! 17:30, 17 באוגוסט 2009 (IDT)[תגובה]

הערך מתייחס אך ורק לתכנות מונחה עצמים[עריכת קוד מקור]

פולימורפיזם הוא לא מאפיין בלבדי של שפות מונחות עצמים, אך בערך מתייחסים אך ורק לכך - כולל התייחסות ממושכת ומפורטת לירושה, שהיא משנית לנושא. לדוגמה, Standard ML היא לא שפה מונחית עצמים, אך מנגנון הפולימורפיזם אצלה נחשב לחזק ביותר, גמיש ונוח יותר מזה של ++C וג'אווה. אני מתכוון להרחיב בנושא קצת, אך זו בעיה מהותית בערך. --אלעזר - שיחה 23:27, 23 באוגוסט 2011 (IDT)[תגובה]

ערכתי קצת. יש עוד המוון עבודה. אין הבדלה בערך בין ירושה כשלעצמה לפולימורפיזם, ובין ירושה (extends בג'אווה) למימוש (implementing בג'אווה). לענייננו, האחרון יותר רלוונטי למשתמש. עוד קצת כדאי להוסיף על שפות בעלות טיפוסיות דינמית. --אלעזר - שיחה 00:40, 24 באוגוסט 2011 (IDT)[תגובה]

דוגמה לפולימורפיזם ברמת המשתנה עצמו[עריכת קוד מקור]

בשפת VB (לא דוט נט) ישנו משתנה מסוג Variant שיכול להשתנות במהלך הריצה לפי סוג הנתונים שמושם לתוכו. אינני יודע לאיזו קטגוריה של פולימורפיזם הוא שייך, אבל הוא יכול להוות דוגמה טובה בערך. משתנה allTypes הופך ממשתנה מחרוזתי, למספרי ואף למערך במהלך השגרה בהתאם לערך שמושם לתוכו. באחד השורות האופרטור + יודע לחבר מחרוזת מספרית לקבוע מספרי. כל הקוד הינו חוקי ופועל אף שהוא נראה קצת משונה. --אפי ב.התחברו ל♥14:18, 7 בספטמבר 2012 (IDT)[תגובה]

Private Sub Command1_Click()

  Dim allTypes As Variant
  Dim intArray(10) As Integer

  allTypes = "3" + "3" ' value = "33"
  allTypes = 3 + 3     ' value = 6
  allTypes = 3 + "3"   ' value = 6
  MsgBox (allTypes) 

  intArray(8) = 100
  allTypes = intArray
  MsgBox (allTypes(8))  ' value = 100

End Sub

מתודה גנרית ב- #C[עריכת קוד מקור]

מתודות גנריות ומחלקות גנריות קיימות ב- #C משנת 2005. 46.116.183.120 09:09, 5 בדצמבר 2013 (IST)[תגובה]

זה נכון. הערך תוקן; הרחבה נוספת תתקבל בברכה. --אלעזר - שיחה 09:29, 5 בדצמבר 2013 (IST)[תגובה]

דבר שלדעתי יש לבאר בפסקת הפתיחה:[עריכת קוד מקור]

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

מה פירוש בעזרת ממשק אחיד?, השפה היא שפה הרי - לא ממשק. אם אני נכנס עכשיו ל-Notepad++ אני יכול לכתוב שם בערך מה שבא לי... הממשק שלי הוא Notepad++ ולא השפה עצמה - אם זוהי מסקנתי, מה פספסתי ביחס לפתיח? תודה, ‏Ben-Yeudith‏ • שיחה 22:01, 21 בינואר 2016 (IST)[תגובה]

ניכר שאתה מגיע עם אוריינטציה שונה ביותר ממה שמדובר עליו בערך. כשאתה מדבר בתכנות על טיפוסים או מחלקות, הכוונה בממשק היא הפעולות שאפשר לבצע איתם/בהם. כמו אופרטורים ומתודות.
פולימורפיזם הוא מנגנון שבו קטע קוד מסוים מבצע מניפולציות על טיפוס (או מחלקה) כלשהו, והוא "אדיש" לזהות המדויקת של הטיפוס שבו הוא מטפל. כל מה שקטע הקוד הזה דורש הוא שאותו טיפוס יהיה בעל ממשק שאיתו הוא יודע לעבוד. R.G. - שיחה 01:40, 22 בינואר 2016 (IST)[תגובה]
אני לא הגעתי עם שום דבר כי אני לא הכרתי את המונח כלל. ניסיתי להכיר ע"י קריאת הפסקה הראשונה בפתיח אך לא צלח בעדי; לדעתי יש להרחיב עוד קצת את הפסקה הזו במילים פשוטות כך שתהפוך לפסקת הכרות גם לאנשים שלא מכירים את המונח כלל. אני לא בטוח שזו תהיה מטלה פשוטה, אך לדעתי שווה שהעוסקים בתכנות מונחה עצמים (עדיין לא יצא לי לדאבוני) שעורכים את הערך ינסו לעשות זאת, בפרט ביחס לשאלה שהצגתי למעלה. ‏Ben-Yeudith‏ • שיחה 03:00, 22 בינואר 2016 (IST)[תגובה]
אני לא רואה צורך לתת את כל התורה על רגל אחת כבר במשפט הפתיחה - המידע מופיע בהמשך הערך. מה שבלבל את Ben-Yeudith הוא המילה "ממשק", שאצלו מתפרשת כממשק משתמש, ואילו כאן מדובר בממשק בין שני רכיבי תוכנה. דוד שי - שיחה 06:48, 22 בינואר 2016 (IST)[תגובה]
לא הכל על רגל אחת כמובן, רק לבאר ברמת ההערות סוגריים (למקרה שזה אולי יחסוך למישהו בקריאה הראשונית ניווט לערכים אחרים) בכדי ששני המונחים יהיו ברורים יותר כבר בפסקה הראשונה; נניח, טיפוס (הגדרה למשתנה אילו ערכים הוא יכול לקבל) ומה זה ממשק בין שני רכיבי תוכנה... אני מניח שאפשר להגדיר את זה ב-4 מילים בערך ברמה ראשונית בפרט כי כרגע אין לנו ערך על זה... ‏Ben-Yeudith‏ • שיחה 11:39, 22 בינואר 2016 (IST)[תגובה]
זו בעיה חוזרת בהנגשת ערכים הנוגעים למדעים מדויקים. יש מושגים שאין טעם לבאר מבלי להניח תשתית בסיסית של ידע רלוונטי בתחום. אני חושב שלא סביר לצפות להסבר מהו טיפוס בערך על המונח פולימורפיזם בתכנות, כפי שלא סביר לצפות להסבר מהו מספר ממשי בערך פונקציה הולומורפית. R.G. - שיחה 02:24, 23 בינואר 2016 (IST)[תגובה]
ברמת הכלל אנ מסכים, אבל מנסיוני זה בהמון מקרים אכן אפשרי; במקרה הזה זה לדעתי עוד יותר נדרש משום שאין לנו עדיין ערך על התממשקות בין שני רכיבי תוכנה בקוד נתון (לי אישית גם אין תחזית מתי ייכתב הערך). ‏Ben-Yeudith‏ • שיחה 12:17, 23 בינואר 2016 (IST)[תגובה]