PracticU

הוספת Methods ל-class

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

הוספת Methods ל-class
מחלקה לא רק מחזיקה נתונים, היא גם יודעת לעשות פעולות. ההרצאה מוסיפה למחלקת מוצר מתודות שמציגות אותו, מחשבות מחיר כולל מע"מ וקולטות פרטים מהמשתמש.
השלבים העיקריים
1. מתודה היא פונקציה בתוך המחלקה: היא מייצגת פעילות של הישות. בדוגמה: מוצר יודע להציג את עצמו על הקונסול, ולהחזיר את המחיר כולל מע"מ.
2. הרשאת גישה: בלי הרשאה מפורשת המתודה היא private, כלומר זמינה רק בתוך המחלקה. כדי לקרוא לה מבחוץ מגדירים אותה public.
3. מתודת Print: מחזירה void, והשם הוא Print ולא PrintProduct, כי היא כבר בתוך מחלקת Product. היא לא מקבלת פרמטרים, כי מתודה מכירה אוטומטית את ה-Data Members של המחלקה שלה (product name, category name, price).
4. קריאה למתודה: כותבים שם אובייקט, נקודה, שם המתודה, למשל firstProduct.Print(). המתודה פועלת על האובייקט שקרא לה.
5. הדגמה בדיבאגר: עם breakpoint ו-F11 נכנסים לפונקציה. אצל האובייקט הראשון רואים Apple, Fruits, 4.5, ואצל השני Banana, Fruits, 6.3. כל אובייקט מחזיק עותק משלו של המשתנים. המחלקה היא כמו תבנית עוגיות, והאובייקטים הם העוגיות שנוצרו ממנה.
6. מתודה עם ערך מוחזר: public decimal CalculatePriceWithVat() מחזירה את price * 1.18, בלי פרמטרים.
7. מתודה לקליטת נתונים: GetDetails מבקשת מהמשתמש את שם המוצר, הקטגוריה והמחיר, וקולטת אותם לתוך ה-Data Members.
טעויות נפוצות
- בהרצאה מועתקת שורת הקריאה ל-GetDetails של האובייקט הראשון והאובייקט לא משתנה. התוצאה: ה-Second Product מוצג עם שדות ריקים ומחיר 0. זה קורה כי בפתיחת אובייקט חדש כל ה-Data Members מאופסים. תיקון: לקרוא ל-GetDetails על האובייקט הנכון.
תרגילים שהוצעו
להוסיף GetDetails ו-Print לכל מחלקה מהתרגילים הקודמים, ולמחלקת Rectangle להוסיף Display שמציירת את המלבן בכוכביות בגודל ובצבע שלו.
אחרי ההרצאה אפשר לשייך פעילויות למחלקה, לקרוא להן על אובייקט ולהבין שהן פועלות על נתוני אותו אובייקט.
השיעור הבא בקורס: הגדרת Class - חלק 1

פרקי ההרצאה: הוספת Methods ל-class

  1. 00:00

    מהן המתודות של המחלקה

  2. 01:22

    בניית מתודה והרשאות גישה

  3. 02:02

    מתודה מכירה את ה-Data Members

  4. 03:27

    קריאה למתודה דרך האובייקט

  5. 04:43

    מעקב במנגנון הדיבאגר

  6. 07:18

    פעולה על האובייקט שקרא למתודה

  7. 08:20

    מתודת חישוב מחיר כולל מעם

תמלול ההרצאה: הוספת Methods ל-class

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

  1. 00:01

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

  2. 00:30

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

  3. 00:44

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

  4. 01:01

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

  5. 01:18

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

  6. 01:48

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

  7. 02:15

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

  8. 02:52

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

  9. 03:27

    למתודה שבנינו כל מה שאנחנו צריכים לעשות זה לרשום את שם האובייקט במקרה זה first product ובדיוק כמו שניגשנו מקודם למשתנים רשמנו נקודה כאן אנחנו רשמים נקודה אבל מגיעים לפונקציה עכשיו, הפונקציה הזאת, print, מציגה בעצם את ה-data members של האובייקט.

  10. 03:53

    אנחנו רואים שלא שלחנו אליה את ה-data member. השאלה היא, איזה data members יוצגו? איזה משתנים בדיוק יוצגו בקריאה הזאת? והתשובה, ה-data members של האובייקט שקרה לפונקציה.

  11. 04:06

    האובייקט שקרה לפונקציה print במקרה הזה, בשורה הזאת בדיוק, זה first product. זאת אומרת המשתנים כרגע שהפונקציה print תציג יהיו המשתנים הספציפיים האלה product name שיחיל apple, category name שיחיל food וprice שיחיל 4.5 בואו נעשה את אותו הדבר לפונקציה היש, לאובייקט השני second product.print לכן אנחנו לא צריכים יותר את הקריאות לפונקציה שכתבנו מקודם

  12. 04:43

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

  13. 05:18

    ואנחנו רוצים בעזרת הדיבאגר להיכנס לתוך הפונקציה זה יהיה בדיוק F11 אז אם אנחנו מסתכלים בדיבאגר על המשתנים עצמם אנחנו רואים שאם אנחנו עומדים עם הדיבאגר עם האחבר על First Product אנחנו רואים בזיכרון שיש לו שלושה משתנים Product Name זה Apple Category Name זה Fruit

  14. 05:42

    וPrice זה 4.5 אם אנחנו עומדים על Data Member Specific אנחנו כמובן יכולים לראות את הערך הספציפי שלו אם אנחנו נפנסים עכשיו לתוך הפונקציה אנחנו רואים שהData Members עצמם מכילים בדיוק את הערכים של האובייקט מפני שאלו הם המשתנים של האובייקט הנה Apple, הנה Fruits והנה 4.5 כעת אנחנו יכולים להמשיך ולהציג את הכל

  15. 06:11

    סיימנו את הפונקציה, התוכנית ממשיכה במיין, יוצרים אובייקט שני, מכניסים אליו ערכים קוראים לפונקציית print אבל לפני שנקרא לה נסתכל שהDataMembers מכילים בדיוק את הערכים האלה הנה הבננה, הנה הפרוץ והנה ה-6.3 בואו נמשיך, ניכנס לתוך הפונקציה, בעצם לא נכנסתי לפונקציה, קפצתי מעליה אוקיי לא קרה כלום, בואו

  16. 06:44

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

  17. 07:18

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

  18. 07:39

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

  19. 08:11

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

  20. 08:30

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

  21. 08:56

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

  22. 09:31

    אלא אנחנו צריכים להשתמש בfirst product, זה השם של האובייקט, נקודה calculate price with that לא צריך לשלוח שום דבר מפני שהמידע כבר נמצא בתוך האובייקט שהפעיל את הפונקציה לאחר מכן אנחנו רוצים את אותו הדבר

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

ההרצאה הקודמת: הבדלים בין Class לבין Object

ההרצאה הבאה: הגדרת Class - חלק 1

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

  • methods - חלק 1
  • The R Class
  • Static Class
  • הוספת VMkernel

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

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