Polymorphism

i d a n s t

New member
Polymorphism

שלום, ניסיתי לקרוא על Polymorphism באינטרנט ועל השימושים של זה בתכנות OOP אבל לא הבנתי מזה עושה ואיך ניתן ליישם את זה בתוכנית...אודה אם מישהו יוכל להסביר לי בצורה פשוטה על זה ויראה לי אולי קטע קוד שמבהיר את העניין. ואם זה מיושם באופן שונה בNET? תודה!
 

האזרחק

New member
רב-צורתיות

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

ייוניי

New member
זה לא מדוייק

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

האזרחק

New member
זה בדיוק מה שהצגתי

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

ייוניי

New member
זה בסדר רק שים לב

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

בטיטi

New member
לא בדיוק

דוגמא לפולימופריזם לא יודע אם היא אמיתית() : לדפדפן יש מערך של כל האובייקטים שצריכים להתרנדר על המסך (input, text, link כו'), הוא עובר על כולם בלולאה, אך אין לו צורך לדעת בכל איטרציה איזה אובייקט בדיוק הוא מחזיק כרגע, הוא רק יודע שכולם מממשים ממשק מסויים, וכל אובייקט מממש בצורה שלו את Draw (למשל). לכן הוא פשוט קורא לפונקציה Draw של כל אובייקט, שממומש בצורה שונה עבור כל אחד.
 
אז ככה../images/Emo26.gif

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

i d a n s t

New member
אוקי

אני עושה עכשיו לדוגמה פרוייקט 5 יח"ל לביהס בvb.net ..זה בעיקרון נהיול מידע עם access וזה..אבל לא ברמה גבוהה במיוחד... עדיין לא הבנתי בדיוק מזה..אפשר אולי דוגמה תיאורתית למה זה טוב? תודה
 

yairov

New member
תגובה

בוא נדמה את המצב לעולם האמיתי. נניח ויש לך 2 מכוניות: האחת Porche והשניה Ford. לשתיהן מאפיינים משותפים כמו: מהירות, נפח מנוע, יצרן וכו'... לכן ניתן לומר שאפשר ליצור מחלקה אחת אבסטרקטית (Car) שתאפיין מכונית ושאין אפשרות ליצור ממנה מופעים. מכונית מיצרן Porch זו בעצם המחלקה האמיתית וממנה אפשר ליצור מופעים (Porche 911, Porche GT) מכונית מיצרן Ford זו בעצם מחלקה שניה, הנה דוגמא למימוש:
public abstract class Car { public string model; public int topGear; public abstract void Fix(); } public class Porche : Car { public override void Fix() { // implement fix for porche } } public class Ford : Car { public override void Fix() { // implement fix for ford } }​
את המכוניות הללו צריך לפעמים להכניס למוסך. אפשר כמובן ליצור לכל סוג מכונית את המוסך שלה אבל איזה כיף היה אם היה מוסך אחד לכולם. אז הנה המוסך:
public class Garage { public static void Fix(Car car) { car.Fix(); } }​
 

i d a n s t

New member
תודה הבנתי מהדוגמה אני חושב

בעצם אני משתמש ברב צורתיות באמצעות הפעולות override? או שזו רק אופציה לשימוש פרטי? אני עובד עם vb.net ורק ליתר ביטחון, אתה משתמש בabstract זה בעצם Overrideable בVB.NET או אני טועה? אם לא הייתי מגדיר את המחלקה car כאבסטרקטית לא היה ניתן לעשות מה שעשית? תודה
 

dino_din

New member
הוספת האבסטרקטיות

מציינת שאי אפשר ליצור מופע של המחלקה. כלומר אי אפשר ליצור מופע של מחלקה "רכב" אלא רק מופע של פורש או למבורגיני.
 
למעלה