PracticU

תכנות מונחה עצמים - עקרון פולימורפיזם

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מונחה עצמים - OOP - Object Oriented Programming - חומר לימוד של מדעי המחשב › תכנות מונחה עצמים - עקרון פולימורפיזם
מילון מושגים:
OOP - תכנות מונחה עצמים: גישת פיתוח שמארגנת את הקוד סביב אובייקטים המאגדים נתונים ופעולות.
פולימורפיזם - עיקרון בתכנות מונחה עצמים שבו אובייקטים ממחלקות שונות מגיבים לאותה פעולה כל אחד בדרכו.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.

תכנות מונחה עצמים - עקרון פולימורפיזם
ההרצאה האחרונה בסדרת OOP מסבירה את פולימורפיזם (ריבוי צורות), כלומר היכולת להתייחס לאובייקטים מסוגים שונים באותה צורה, ומדגימה זאת בדף למכירת מכוניות.
השלבים העיקריים
1. הדוגמה: דף עם מכוניות לרכישה. בלחיצה על תמונה, מופיע בצד שמאל הטקסט שמתאר את הרכב שנבחר.
2. מחלקת בסיס אבסטרקטית: Car מגדיר פונקציה אבסטרקטית GetCarDetails שמחזירה טקסט. אי אפשר ליצור ממנו אובייקט.
3. מחלקות יורשות: משאית, מכונית מירוץ ומיני-ואן יורשות מ-Car, ומממשות את GetCarDetails עם הפרטים שלהן.
4. בחירה לפי סוג בלבד: בלי פולימורפיזם, כל סוג רכב נבדק בתנאי if נפרד, ולכל אחד נכתבת קריאה נפרדת. הדבר מוביל לקוד ארוך מאוד.
5. משתנה מסוג הבסיס: Car selectedCarItem = new RacingCar(); חוקי, כי מכונית מירוץ היא סוג של Car. כך אותו משתנה מחזיק כל סוג רכב.
6. קריאה אחידה: אחרי שהאובייקט נוצר, קוראים selectedCarItem.GetCarDetails() פעם אחת, ללא בדיקה נוספת לכל סוג.
7. השלמה אוטומטית: אחרי new בעורך מוצעות רק מחלקות שאפשר ליצור מהן, ולכן Car לא מופיע ברשימה כי הוא אבסטרקטי.
פקודות והגדרות
Car selectedCarItem = new RacingCar();
string details = selectedCarItem.GetCarDetails();
שימו לב
המשתנה מסוג Car מטפל באותה צורה בכל סוגי הרכבים. להוספת סוג חדש מספיק ליצור מחלקה חדשה שיורשת מ-Car.
פולימורפיזם מאפשר לכתוב קוד אחד שעובד עם סוגים רבים של רכבים, בלי תנאי חדש לכל סוג.
השיעור הבא בקורס: אופרטורים operators is and as

פרקי ההרצאה: תכנות מונחה עצמים - עקרון פולימורפיזם

  1. 00:00

    עקרון הפולימורפיזם

  2. 00:42

    דף רכישת מכוניות לדוגמה

  3. 01:53

    יצירת מחלקת Car אבסטרקטית

  4. 03:30

    מחלקת Truck ו-override

  5. 06:23

    מחלקות RacingCar ו-MiniVan

  6. 09:12

    בדיקת הרכב שנבחר עם IF

  7. 12:36

    הדגמת האפליקציה

  8. 14:43

    שילוב הפולימורפיזם בקוד

תמלול ההרצאה: תכנות מונחה עצמים - עקרון פולימורפיזם

הטקסט המלא של הדקות הראשונות בהרצאה «תכנות מונחה עצמים - עקרון פולימורפיזם» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

    שלום לכולם ההרצאה היום תהיה ההרצאה האחרונה בסדרה של יסודות התכנות וכמובן גם ההרצאה האחרונה בנושא הספציפי של Object Oriented Programming אני עומד להסביר בהרצאה הזאת את העיקרון השלישי שעומד בבסיס של Object Oriented Programming שנקרא פולימורפיזם או בעברית ריבוי צורות או הרבה צורות את הדוגמה הזאתי את ההסבר לעיקרון הזה אני עומד להסביר באמצעות דוגמה באמצעות משימה שאני אצטרך לעשות

  2. 00:32

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

  3. 00:51

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

  4. 01:13

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

  5. 01:35

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

  6. 01:48

    המשתנה השני, קראתי לו Selected Car Name, והמשתנה הזה מייצג את השם של הרכב שהמשתמש בחר. אז בכל מקום, אני רוצה להתחיל ממש מההתחלה, ואני רוצה ליצור קלאס שנקרא לו, כמו בהרצאות הקודמות, נקרא לו Car.

  7. 02:08

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

  8. 02:36

    נניח שלקלאס הזה כרגע בוא נניח שיש לו משתנים למרות שכרגע אני לא נותן לו משתנים לצורך הדוגמה כרגע ולצורך ההרצאה זה לא ממש רלוונטי אבל אני כן רוצה לתת לו פונקציה מסוימת ולפונקציה הזאת היא תהיה אבסטרקטית גם תחזיר string והשם שלה יהיה get get car details הפונקציה הזאת תחזיר את הפרטים של הרכב.

  9. 03:13

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

  10. 03:31

    אז שוב פעם, פליק ימני, Add, Class. אני עומד ליצור עכשיו קלאס שנקרא משאית והקלאס הזה עומד לרשת מcar, כמובן בגלל שהוא יורש מקאר ולקאר יש לו פונקציה אבסטרקטית אז אני עומד ברגע שאני עושה Override אני כבר

  11. 04:01

    רואה יש לי פה רשימה של פונקציות שאני יכול לעשות להם Override בשביל ההרצאה הזאת כרגע הפונקציות האלה שאתם רואים פה הן לא ממש רלוונטיות לשיעור שלנו אז אני אבחר את הפונקציה הזאת שנקראת Get Car Details וגם השורה הזאת היא לא רלוונטית לשיעור שלנו אתם יכולים להתעלם מזה אוקיי אז כרגע יש לי פה פונקציה שנקראת Get Car Details

  12. 04:29

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

  13. 04:43

    אז אני אציג פה איזה משתנה ואני אקרא לו car details. בוא נגיד שמדובר פה בפרטים של המשאית היא משאית מדגם מדגם 12. המשאית טויוטה מדגם 12 והמחיר שלה הוא חצי מיליון שקל ואני רוצה להחזיר את הפרטים של המשאית.

  14. 06:13

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

  15. 06:29

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

  16. 07:30

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

  17. 08:06

    פרטים מדומים נגיד שזאת מכונית משפחתית רוהן מדגם אחרון משנת 2011 מחיר נגיד 170,000 ש"ח ונחזיר את הפרטים האלה יופי אוקיי אז יש לנו עכשיו יש לנו עכשיו כמה אובייקטים יש לנו את האובייקט car שהוא מייצג רכב כללי לא רכב ספציפי יש לו פונקציה אבסטרקטית ויש לנו עכשיו גם אובייקט שנקרא track מייצג משאית והוא מחזיר פרטים בנוגע למשאית יש לנו קלאס שנקרא racing car

  18. 09:06

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

  19. 09:35

    אני אבדוק האם המשתנה הזה פה Selected Car Item האם השם של המשתמש שם של הרכב שהוא בחר האם הוא שווה למכונית מרוץ? אם זה שווה למכונית מרוץ, מה שאני רוצה לעשות זה קודם כל ליצור אובייקט מסוג מכונית מרוץ, נקרא לו רייסינג ואני רוצה לקבל את הפרטים של המכונית מרוץ הזאת, אז נקרא לה פונקציה getCarDetails ואת הפרטים

  20. 10:19

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

  21. 10:54

    לו מיני ולתת את הפרטים של המיני ואן הזה למשתנה car details resort אם הוא לא בחר מכונית משפחתית אלא בחר משאית אז אני רוצה שהוא שניצור אובייקט מסוג של משאית ואני אקבל את הפרטים של אותה משאית ואכניס אותם למשתנה car details reserve אם הוא לא בחר אף מכונית אני רוצה שיופיע לו בפרטים של הרכב שנבחר אני רוצה לשים בפרטים של הרכב שנבחר

  22. 12:01

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

  23. 12:36

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

  24. 13:09

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

  25. 13:38

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

  26. 13:53

    משתנה על זה אחרי הפרטים של משאית כמו שאתם רואים בחלונית הזאתי משאית טויוטה מדגם 12 מחיר חצי מיליון שקל. ובוא נראה מה יש לנו במסך וזה מה שיש לנו. אמצעי טויוטה מדגם 12 מחיר 500,000 ש"ח והיא גם צבועה לנו באדום אם אני עכשיו עומד לבחור מכונית מכונית מרוץ אני עומד להיכנס לחלק של המכונית המרוץ כמו שאתם רואים ולקבל את הפרטים של מכונית המרוץ מכונית מרוץ פורשה מדגם 145 מחיר 2.5 מיליון דולר די יקר אוקיי

  27. 14:38

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

  28. 15:12

    מה זה אומר משהו ספציפי? אם אתם זוכרים קאר הקלאס של קאר הוא מייצג רכב כלשהו.

לקורס המלא: קורס תכנות מונחה עצמים OOP

ההרצאה הקודמת: רב-צורתיות פולימורפיזם - Polymorphism

ההרצאה הבאה: אופרטורים operators is and as

הרצאות קשורות מקורסים אחרים

  • תכנות מונחה עצמים ב-NodeJS
  • עקרונות תכנות מונחה עצמים - Unity OOP
  • אובייקטים ומחלקות CLASS - תכנות מונחה עצמים בשפת Dart
  • פולימורפיזם ב-TypeScript

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת C# .NET - קורס תכנות למתחילים - דוט-נט / סי-שארפ - חומר לימוד של מדעי המחשב