
Car מגדיר פונקציה אבסטרקטית GetCarDetails שמחזירה טקסט. אי אפשר ליצור ממנו אובייקט.Car, ומממשות את GetCarDetails עם הפרטים שלהן.if נפרד, ולכל אחד נכתבת קריאה נפרדת. הדבר מוביל לקוד ארוך מאוד.Car selectedCarItem = new RacingCar(); חוקי, כי מכונית מירוץ היא סוג של Car. כך אותו משתנה מחזיק כל סוג רכב.selectedCarItem.GetCarDetails() פעם אחת, ללא בדיקה נוספת לכל סוג.new בעורך מוצעות רק מחלקות שאפשר ליצור מהן, ולכן Car לא מופיע ברשימה כי הוא אבסטרקטי.Car selectedCarItem = new RacingCar();string details = selectedCarItem.GetCarDetails();Car מטפל באותה צורה בכל סוגי הרכבים. להוספת סוג חדש מספיק ליצור מחלקה חדשה שיורשת מ-Car.הטקסט המלא של הדקות הראשונות בהרצאה «תכנות מונחה עצמים - עקרון פולימורפיזם» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם ההרצאה היום תהיה ההרצאה האחרונה בסדרה של יסודות התכנות וכמובן גם ההרצאה האחרונה בנושא הספציפי של Object Oriented Programming אני עומד להסביר בהרצאה הזאת את העיקרון השלישי שעומד בבסיס של Object Oriented Programming שנקרא פולימורפיזם או בעברית ריבוי צורות או הרבה צורות את הדוגמה הזאתי את ההסבר לעיקרון הזה אני עומד להסביר באמצעות דוגמה באמצעות משימה שאני אצטרך לעשות
עכשיו יחד איתכם ואני אראה איך זה קשור בעצם, או איך משתמשים בעיקרון הזה שנקרא פולימורפיזם. אז לפני ההרצאה, לפני שהתחלתי את ההרצאה, יצרתי דף, דף אינטרנט פשוט, עם כל מיני מכוניות שאפשר לרכוש אותן.
יש פה מכונית מרוץ, משאית ומכונית משפחתית. זה למעשה מדמה דף שמשתמש מגיע אליו כדי לרכוש מכוניות. עכשיו אני רוצה, אותו מתכנת כמובן, כאשר המשתמש לוחץ על איזו תמונה מסוימת, אני רוצה שיופיע מצד שמאל פה הטקסט שמתאר את המכונית שהוא בחר.
זאת אומרת, על כל מכונית שהוא בוחר, אני רוצה שהטקסט פה ישתנה בהתאם למכונית שהוא בוחר. אז בוא ניגש רגע לקוד, סגור את זה. אוקיי, אז לנקודה הזאת אנחנו מגיעים כאשר המשתמש לחץ על אחת מהתמונות, והוא עכשיו מצפה לראות את הפרטים של התמונה.
אז יש לי פה משתנה שנקרא Car Details Result, שמייצג את הפרטים של הרכב שהמשתמש בוחר, ואת הפרטים שנמצאים במשתנה הזה הוא עומד לראות על המסך.
המשתנה השני, קראתי לו Selected Car Name, והמשתנה הזה מייצג את השם של הרכב שהמשתמש בחר. אז בכל מקום, אני רוצה להתחיל ממש מההתחלה, ואני רוצה ליצור קלאס שנקרא לו, כמו בהרצאות הקודמות, נקרא לו Car.
אז אני עומד על השם של הפרויקט פה, פליק ימני עם העכבר, בוחר באפשרות של Add, בוחר באפשרות של קלאס, ואני אקרא עכשיו למטה, אני נותן את השם של הקלאס, קורא לו car והתווסף לclass עכשיו אני רוצה שהclass הזה כמו בהרצאות הקודמות יהיה אבסטרקטי ואני רוצה כרגע בוא
נניח שלקלאס הזה כרגע בוא נניח שיש לו משתנים למרות שכרגע אני לא נותן לו משתנים לצורך הדוגמה כרגע ולצורך ההרצאה זה לא ממש רלוונטי אבל אני כן רוצה לתת לו פונקציה מסוימת ולפונקציה הזאת היא תהיה אבסטרקטית גם תחזיר string והשם שלה יהיה get get car details הפונקציה הזאת תחזיר את הפרטים של הרכב.
עכשיו, מכיוון שcar הוא קלאס שהוא אבסטרקטי ואי אפשר ליצור ממנו אובייקט, זאת אומרת, אין פה שום פרטים של הרכב שאפשר לקבל אותם, אני עומד ליצור עוד שלושה סוגים של קלאסים בהתאם לתמונות שיצרתי, שייצגו רכבים שונים.
אז שוב פעם, פליק ימני, Add, Class. אני עומד ליצור עכשיו קלאס שנקרא משאית והקלאס הזה עומד לרשת מcar, כמובן בגלל שהוא יורש מקאר ולקאר יש לו פונקציה אבסטרקטית אז אני עומד ברגע שאני עושה Override אני כבר
רואה יש לי פה רשימה של פונקציות שאני יכול לעשות להם Override בשביל ההרצאה הזאת כרגע הפונקציות האלה שאתם רואים פה הן לא ממש רלוונטיות לשיעור שלנו אז אני אבחר את הפונקציה הזאת שנקראת Get Car Details וגם השורה הזאת היא לא רלוונטית לשיעור שלנו אתם יכולים להתעלם מזה אוקיי אז כרגע יש לי פה פונקציה שנקראת Get Car Details
והיא כבר רלוונטית כי היא עכשיו פונקציה שאמורה להחזיר את הפרטים של האובייקט מסוג של track. אז אני רוצה עכשיו להחזיר את הנתונים על משאית.
אז אני אציג פה איזה משתנה ואני אקרא לו car details. בוא נגיד שמדובר פה בפרטים של המשאית היא משאית מדגם מדגם 12. המשאית טויוטה מדגם 12 והמחיר שלה הוא חצי מיליון שקל ואני רוצה להחזיר את הפרטים של המשאית.
יפה, עכשיו אני הולך ליצור עוד קלאס ואני אקרא לקלאס הזה racing car וזה הקלאס שייצג מכונית מרוץ כי יש לנו גם אפשרות לרכוש מכונית מרוץ.
הקלאס הזה גם כן יירש מכר וגם הקלאס הזה יעשה Override ואנחנו נקבל עכשיו את הפונקציה הזאת ואני עומד לתת את הקלאס הזה לפונקציה הזאת את הפרטים של המכונית מרוץ ונגיד שזה מכונית מרוץ מדגם פורשה מכונית מרוץ מרוץ פורשה מדגם 145 מה שזה לא יהיה ומחיר 2 מיליון דולר.
נחזיר את הפרטים של המכונית מרוץ הזאת וניצור עוד קלאס אחד ונקרא לו מיני ואן. זה הקלאס שייצג את המכונית המשפחתית. גם הקלאס הזה ילך לרשת מכר וגם פה נקרא תן את הפרטים שלה למכונית המשפחתית.
פרטים מדומים נגיד שזאת מכונית משפחתית רוהן מדגם אחרון משנת 2011 מחיר נגיד 170,000 ש"ח ונחזיר את הפרטים האלה יופי אוקיי אז יש לנו עכשיו יש לנו עכשיו כמה אובייקטים יש לנו את האובייקט car שהוא מייצג רכב כללי לא רכב ספציפי יש לו פונקציה אבסטרקטית ויש לנו עכשיו גם אובייקט שנקרא track מייצג משאית והוא מחזיר פרטים בנוגע למשאית יש לנו קלאס שנקרא racing car
שמייצג מכונית מרוץ והוא מחזיר את הפרטים על מכונית המרוץ ויש לנו קלאס שנקרא מינימבן שמחזיר את הפרטים על מכונית משפחתית. עכשיו מה אני רוצה לעשות כשאני מגיע לפה כשהמשתמש לחץ על תמונה מסוימת אני קודם כל רוצה לדעת על איזה מכונית הוא לחץ כדי לתת לו את הפרטים על המכונית הרלוונטית אז אני צריך להשתמש באיף שלמדנו בתחילת סדרת ההרצאות שלנו אז
אני אבדוק האם המשתנה הזה פה Selected Car Item האם השם של המשתמש שם של הרכב שהוא בחר האם הוא שווה למכונית מרוץ? אם זה שווה למכונית מרוץ, מה שאני רוצה לעשות זה קודם כל ליצור אובייקט מסוג מכונית מרוץ, נקרא לו רייסינג ואני רוצה לקבל את הפרטים של המכונית מרוץ הזאת, אז נקרא לה פונקציה getCarDetails ואת הפרטים
שלה אני רוצה לשים במשתנה הזה CarDetailsResult, יפה. עכשיו אם הוא לא בחר במכונית משפחתית, סליחה במכונית מרוץ אלא במכונית משפחתית, מהשם שהוא בחר זה מכונית משפחתית אני עושה את אותו דבר כמעט כמו שעשיתי במשפט איף הקודם שזה ליצור אובייקט הפעם מסוג של מיני ואן נקרא
לו מיני ולתת את הפרטים של המיני ואן הזה למשתנה car details resort אם הוא לא בחר מכונית משפחתית אלא בחר משאית אז אני רוצה שהוא שניצור אובייקט מסוג של משאית ואני אקבל את הפרטים של אותה משאית ואכניס אותם למשתנה car details reserve אם הוא לא בחר אף מכונית אני רוצה שיופיע לו בפרטים של הרכב שנבחר אני רוצה לשים בפרטים של הרכב שנבחר
הודעה שאומרת לא נבחר אף רכב לא נבחר אף רכב אוקיי אז כמו שאנחנו רואים המשתנה הזה פה מקבל את הערך של המכונית הרלוונטית שנבחרה או מכונית מירוץ או מכונית משפחתית או משאית במקרה שלא נבחר אף רכב יהיה לו את הטקסט הזה והטקסט הזה יוצג באמצע המסך.
אז בואו נראה קודם כל שהאפליקציה שעשינו עכשיו עובדת. אוקיי אז באמת לא בחרנו אף רכב שום רכב לא נבחר פה בינתיים יש לנו פה טקסט שלא נבחר אף רכב.
עכשיו בוא נשים פה breakpoint ונגיע לפה בדיוק לנקודה הזאת מתי שהמשתמש בוחר ברכב כלשהו בוא נגיד שהוא בחר במשאית בוא נבחר במשאית עכשיו אנחנו מגיעים לפה ואנחנו בודקים הסלקטד קאר ניים כמו שאתם רואים בחלונית הזאתי הערך שלו הוא משאית.
משתמש בכלל משאית ואנחנו באמת הולכים להגיע לאפשרות של משאית. כשקיבלנו משאית אנחנו יוצרים את האובייקט מסוג של משאית ואנחנו מקבלים את הפרטים של משאית.
משתנה על זה אחרי הפרטים של משאית כמו שאתם רואים בחלונית הזאתי משאית טויוטה מדגם 12 מחיר חצי מיליון שקל. ובוא נראה מה יש לנו במסך וזה מה שיש לנו. אמצעי טויוטה מדגם 12 מחיר 500,000 ש"ח והיא גם צבועה לנו באדום אם אני עכשיו עומד לבחור מכונית מכונית מרוץ אני עומד להיכנס לחלק של המכונית המרוץ כמו שאתם רואים ולקבל את הפרטים של מכונית המרוץ מכונית מרוץ פורשה מדגם 145 מחיר 2.5 מיליון דולר די יקר אוקיי
אז כמו שראינו האפליקציה עובדת עשינו את זה כמו שצריך עכשיו איך object oriented את פרוגרמינג בהקשר של פולימורפיזם משתלב פה. אז כמו שאתם רואים אנחנו יוצרים פה בנקודה הזאתי ובנקודה הזאתי ובנקודה הזאתי בכל שורה כזאתי אנחנו יוצרים פה אובייקט ומתייחסים למשהו ספציפי.
מה זה אומר משהו ספציפי? אם אתם זוכרים קאר הקלאס של קאר הוא מייצג רכב כלשהו.