PracticU

מחלקות ירושה - Classes Inheritance

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode › מחלקות ירושה - Classes Inheritance
מילון מושגים:
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
ירושה - מנגנון בתכנות מונחה עצמים שבו מחלקה יורשת תכונות ופעולות ממחלקת אב, ויכולה להרחיב אותן.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.

מחלקות ירושה - Classes Inheritance
ירושה היא היכולת של מחלקה לקבל תכונות ופעולות ממחלקה אחרת. בשיעור בונים מחלקת Passenger, ומחלקת VIPPassenger שיורשת ממנה ומוסיפה הנחה נוספת.
השלבים העיקריים
1. מחלקת נוסע: המחלקה כוללת שם וגיל, בנאי, ופעולה בשם Price to Pay שמחזירה את המחיר שהנוסע משלם.
2. הבעיה בהעתקה: אפשר להעתיק את המחלקה ולהוסיף לה הנחה, אבל זה חוזר על קוד. המרצה מזכיר את העיקרון Don't Repeat Yourself.
3. ירושה: במחלקה החדשה כותבים נקודתיים ואת שם המחלקה האב, למשל class VIPPassenger: Passenger. המחלקה החדשה מקבלת את כל התכונות והפעולות באופן אוטומטי.
4. תכונה נוספת: נוסע VIP מקבל הנחה נוספת, שנשמרת כתכונה משתנה, ולכן צריך בנאי שמקבל אותה.
5. קריאה לבנאי של האב: בבנאי של הבן שומרים את ההנחה, ואת שאר הפרמטרים מעבירים לבנאי של האב בעזרת super.init, לפני שמסיימים את הבנאי.
6. דריסה: הפעולה Price to Pay מוגדרת מחדש במחלקה הבן עם override. הפעולה מחשבת את המחיר הרגיל ומכפילה אותו בהנחה של נוסע VIP.
שימו לב
רק מחלקות יודעות לרשת. סטרקטים אינם יכולים לעשות ירושה, ולכן ירושה דורשת מחלקה.
תרגיל
מחלקה Animal עם גיל ופעולה makeSound, ושתי מחלקות שיורשות ממנה: כלב שמשמיע "אב אב", וחתול שמשמיע "מיאו". בבנאי של המחלקה היורשת מקבלים גם את סוג החיה.
בסיום תדעו לרשת ממחלקה, להוסיף לה תכונות, לקרוא לבנאי של האב ולדרוס פעולה.
השיעור הבא בקורס: ניהול זכרון - העברת משתנים לפי ערך ולפי מצביע - Classes Are Reference

פרקי ההרצאה: מחלקות ירושה - Classes Inheritance

  1. 00:00

    מבוא לירושה בין מחלקות

  2. 01:13

    פתרון התרגיל: יצירת מחלקת Passenger

  3. 02:08

    תכונות name ו-age ובנאי הנוסע

  4. 03:15

    פעולה Price to Pay שמחזירה מחיר

  5. 04:12

    הבדל בין מחלקות לסטראקטים: ירושה

  6. 06:41

    סינטקס ירושה: VIP Passenger יורש מנוסע

  7. 07:57

    הוספת הנחה משתנה למחלקת VIP

  8. 09:15

    קריאה ל-super.init בתוך בנאי היורש

תמלול ההרצאה: מחלקות ירושה - Classes Inheritance

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

  1. 00:02

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

  2. 00:20

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

  3. 00:30

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

  4. 00:42

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

  5. 00:55

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

  6. 01:13

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

  7. 01:30

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

  8. 02:04

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

  9. 02:29

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

  10. 03:01

    שווה ל-name שקיבלנו מבחוץ, נכון? בואו נראה, מצוין. מה לגבי ה-E-Gיל? אותו דבר. אז עד כאן לא חידשתי לכם הרבה, אני מקווה.

  11. 03:13

    אנחנו נעצור רגע, הנה הקומפיילר מרוצה, כי בעצם קיימתי את החובה שלי לייצר בניים. דבר אחרון שנדרשנו לעשות באפיון, אתם זוכרים מה זה היה? יש לנו פה את הפעולה Price to Pay שמחזירה איזשהו מספר.

  12. 03:27

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

  13. 03:56

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

  14. 04:12

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

  15. 04:26

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

  16. 04:35

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

  17. 05:00

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

  18. 05:31

    פה לא יהיה נאל למה בגלל שהקומפיילר מכריח אותי באמת להתחיל אותו כמו שהייתי רוצה שיזכירו לי בשפות אחרות אז הנה, דרך אחת, פשוט ככה VIP Passenger.

  19. 05:43

    כמובן שבמחיר, איכשהו נרצה להתחשב בהנחה, נכון? Use the Discount איכשהו. איך נשתמש בהנחה, מה אתם אומרים? נגיד שזה אחוז הנחה, אז נרצה להפחית לו פה את אחוז ההנחה.

  20. 05:59

    יפה. אז בעצם אופציה אחת זה פשוט לייצר עוד מחלקה, אבל ככה גם הייתי יכול לעשות עם סטראקטים. מחלקות נותנות לנו את ה-Benefit של לא לחזור על עצמנו, ויש עיקרון אחד בתכנות שאתם בטח מכירים שנקרא Don't Repeat Yourself ואנחנו לא רוצים להעתיק קוד ממקום אחר, אני

  21. 06:19

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

  22. 06:30

    ירושה היא קשר של VIP Passenger who Passenger ולכן בואו נאמר לכל VIP Passenger יהיה את כל התכונות של נוסע באופן אוטומטי. איך זה יקרה לו באופן אוטומטי אתם שואלים אז בואו נבדוק דבר ראשון אנחנו נרצה שהקלאס של vip פסנג'ר יירש וזה בדיוק העניין אני רוצה להגיד vip פסנג'ר הוא נוסע וכדי לעשות את זה אני צריך להשתמש פה בסינטקס הזה של

  23. 07:05

    נקודותיים שאומר vip פסנג'ר יורש מפסנג'ר הוא נוסע בעצמו אוקיי הנה עכשיו vip פסנג'ר הוא נוסע זאת אומרת שקיבלתי בחינם את ה-name יש לי פה את ה-Name ויש לי פה את ה-H ויש לי גם את הפונקציה Price to Pay.

  24. 07:26

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

  25. 07:42

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

  26. 08:07

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

  27. 08:33

    אזי אנחנו נצטרך לכתוב בנאי אז בואו נכתוב ביחד בנאי אנחנו נכתוב בנאי שמקבל גם את ה-name גם את ה-h ואת ה-extra-discount יפה? עכשיו מה לדעתכם אנחנו צריכים לעשות עם כל הפרמטרים האלה?

  28. 08:58

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

  29. 09:24

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

  30. 09:45

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

  31. 10:19

    בשביל להתחיל גם את ה-Name וגם את ה-H עכשיו אנחנו בעצם מרחיבים פה, הירושה היא למעשה הרחבה ו-AP פסנג'ר הוא פסנג'ר משוכלל את הדברים של הפסנג'ר הרגיל אני שולח לסופרקלאס שהוא בעצם ישתמש בהם וישמור אותם ויעשה איתם מה שהוא רוצה ואני מטפל אך ורק ב-Extra Discount אוקיי אז לקחתי את ה-Extra Discount

  32. 10:43

    וכמובן טיפלתי בו ואז לא שכחתי גם להתחיל

לקורס המלא: קורס פיתוח אפליקציות לאייפון

ההרצאה הקודמת: מחלקות - Swift Classes

ההרצאה הבאה: ניהול זכרון - העברת משתנים לפי ערך ולפי מצביע - Classes Are Reference

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

  • classes - חלק 1
  • מחלקות שקילות
  • הורשה - Inheritance
  • יצירת מחלקות - Model Classes - לתיאור הטבלאות שבמסד הנתונים

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

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון