
private, כלומר זמינה רק בתוך המחלקה. כדי לקרוא לה מבחוץ מגדירים אותה public.void, והשם הוא Print ולא PrintProduct, כי היא כבר בתוך מחלקת Product. היא לא מקבלת פרמטרים, כי מתודה מכירה אוטומטית את ה-Data Members של המחלקה שלה (product name, category name, price).firstProduct.Print(). המתודה פועלת על האובייקט שקרא לה.public decimal CalculatePriceWithVat() מחזירה את price * 1.18, בלי פרמטרים.GetDetails מבקשת מהמשתמש את שם המוצר, הקטגוריה והמחיר, וקולטת אותם לתוך ה-Data Members.GetDetails של האובייקט הראשון והאובייקט לא משתנה. התוצאה: ה-Second Product מוצג עם שדות ריקים ומחיר 0. זה קורה כי בפתיחת אובייקט חדש כל ה-Data Members מאופסים. תיקון: לקרוא ל-GetDetails על האובייקט הנכון.GetDetails ו-Print לכל מחלקה מהתרגילים הקודמים, ולמחלקת Rectangle להוסיף Display שמציירת את המלבן בכוכביות בגודל ובצבע שלו.הטקסט המלא של הדקות הראשונות בהרצאה «הוספת Methods ל-class» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
כעת אחרי שבנינו ישות שמתאר את מוצר שמכילה משתנים, data members, אנחנו נעוברים לחלק השני של הישות, שזה הפעילויות שלה, המתודות. מה הישות יודעת לעשות? אנחנו ראינו שכאשר בנינו את האובייקט במיין, הכנסנו ערכים לתוך המשתנים שלו, ולאחר מכן היינו רוצים להציג בעצם את הפרטים על המסך.
ולכן בנינו פה איזושהי פונקציה שמקבלת את כל הערכים ומציגה על המסך. אז אפשר להגיד שיש פה פעילות שקשורה למוצר עצמו, וזה בעצם פעילות שמציגה את המידע על מסך הקונסול.
אז אנחנו יכולים להגיד שזה בעצם יכולת מסוימת שקיימת במוצר. כלומר, אנחנו יכולים להגיד שמוצר יכול להיות שיש לו פעילות שאנחנו רוצים שתהיה לו פעילות, והפעילות היא הצגת המידע על המסך.
זאת אומרת, מה שמוצר יודע לעשות, זה להציג את עצמו על המסך. דוגמה לפונקציה הבאה בתור שקטרנו, ושהיא מחזירה את המחיר כולל המאם, גם כאן אנחנו יכולים להגיד, שמה שמוצר יודע לעשות, זה להחזיר את המחיר כולל המאם שלו.
אוקיי, אז איך אנחנו בונים פעילויות? פעילות נבנית על ידי פונקציה רגילה, היא פשוט נמצאת בתוך המחלקה שאנחנו בונים. גם לפונקציות יש הרשאות גישה. אם אנחנו לא כותבים שום הרשעת דגישה, הרשעת דגישה אוטומטית היא private, וזה אומר שמי שיכול לגשת לפעילות זה רק המחלקה עצמה בתוכה אנחנו רוצים שמחוץ למחלקה יהיה ניתן להגשת לפונקציה שמציגה את הפרטים, ולכן אנחנו מגדירים
את הפונקציה כפאבליק בנוסף הפונקציה לא אמורה להחזיר שום דבר, ולכן היא מחזירה void השם שלה לא אמור להיות print product כמו שכתבו מקודם, בפני שהפונקציה כבר נמצאת בתוך המחלקה product אז מספיק, print. אוקיי, הפונקציה אוטומטית מכירה את כל הדייטה ממברס שקיימים בתוך המחלקה, ולכן היא לא אמורה לקבל
אותה מבחוץ כמו שמקודם כתבנו. אז הפונקציה לא תקבל כרגע שום דבר, ומה שהיא תעשה היא פשוט תציג את הדייטה ממברס של המחלקה עצמה. ProductName יהיה ה-ProductName, שאנחנו יכולים לראות אותו כאן CategoryName יהיה CategoryName הפריס יהיה ה-DataMemberPrice תמיד מתודה תכיר את
ה-DataMembers שנמצאים במחלקה שבה היא הוגדרה אוקיי? איך אנחנו עכשיו משתמשים עם המתודה הזאת? אז כאן אנחנו רואים שבנינו אובייקט במיין עבור המוצר הראשון לאחר מכן מה שעשינו זה הכנסנו אליו ערכים ובאיזשהו שלב אחר כך קראנו לפונקציה שלא קשורה למחלקה ושלחנו לה תערכים בצורה נפרדת אז כאשר אנחנו רוצים לקרוא
למתודה שבנינו כל מה שאנחנו צריכים לעשות זה לרשום את שם האובייקט במקרה זה first product ובדיוק כמו שניגשנו מקודם למשתנים רשמנו נקודה כאן אנחנו רשמים נקודה אבל מגיעים לפונקציה עכשיו, הפונקציה הזאת, print, מציגה בעצם את ה-data members של האובייקט.
אנחנו רואים שלא שלחנו אליה את ה-data member. השאלה היא, איזה data members יוצגו? איזה משתנים בדיוק יוצגו בקריאה הזאת? והתשובה, ה-data members של האובייקט שקרה לפונקציה.
האובייקט שקרה לפונקציה print במקרה הזה, בשורה הזאת בדיוק, זה first product. זאת אומרת המשתנים כרגע שהפונקציה print תציג יהיו המשתנים הספציפיים האלה product name שיחיל apple, category name שיחיל food וprice שיחיל 4.5 בואו נעשה את אותו הדבר לפונקציה היש, לאובייקט השני second product.print לכן אנחנו לא צריכים יותר את הקריאות לפונקציה שכתבנו מקודם
את אלה נשים כרגע גם כן בהערה, נריץ ונראה אם המידע מוצג על המסך לכן המידע מוצג על המסך ואנחנו רוצים לבדוק את כל הסיפור הזה עם דיבגר אז בואו נציב כאן Breakpoint בדיוק בכניסה לפונקציה ואפילו הייתי אומר שבואו נציב Breakpoint בקריאה לפונקציה עצמה נריץ את התוכנית, נגיע בדיוק לקריאה לפונקציה
ואנחנו רוצים בעזרת הדיבאגר להיכנס לתוך הפונקציה זה יהיה בדיוק F11 אז אם אנחנו מסתכלים בדיבאגר על המשתנים עצמם אנחנו רואים שאם אנחנו עומדים עם הדיבאגר עם האחבר על First Product אנחנו רואים בזיכרון שיש לו שלושה משתנים Product Name זה Apple Category Name זה Fruit
וPrice זה 4.5 אם אנחנו עומדים על Data Member Specific אנחנו כמובן יכולים לראות את הערך הספציפי שלו אם אנחנו נפנסים עכשיו לתוך הפונקציה אנחנו רואים שהData Members עצמם מכילים בדיוק את הערכים של האובייקט מפני שאלו הם המשתנים של האובייקט הנה Apple, הנה Fruits והנה 4.5 כעת אנחנו יכולים להמשיך ולהציג את הכל
סיימנו את הפונקציה, התוכנית ממשיכה במיין, יוצרים אובייקט שני, מכניסים אליו ערכים קוראים לפונקציית print אבל לפני שנקרא לה נסתכל שהDataMembers מכילים בדיוק את הערכים האלה הנה הבננה, הנה הפרוץ והנה ה-6.3 בואו נמשיך, ניכנס לתוך הפונקציה, בעצם לא נכנסתי לפונקציה, קפצתי מעליה אוקיי לא קרה כלום, בואו
נמשיך, נבצע את זה שוב פעם נגיע לתוכנית לבריקפוינט הזה, ניכנס הפעם עם F11 לתוך הפונקציה ואנחנו יכולים לראות שכעת הפרודקט ניים הוא בננה מפני שמי שקרה לפונקציה בשורה הזאת זה האובייקט השני ולכן הדאטה ממברס של האובייקט זה בדיוק מה שראינו כאן ואלו הערכים שהפונקציה מתעסקת איתם.
זאת אומרת, פונקציה פועלת על האובייקט שקרה לה, ואם היא מתעסקת עם המשתנים של המחלקה, אלו יהיו המשתנים ששייכים לאובייקט שקרה לה, ולא משתנים ששייכים לאובייקט אחר, אפילו שמבחינת המחלקה המשתנים מוגדרים פעם אחת.
אז מה שקרה כאן זה המחלקה בעצם מייצגת לנו תבנית תחשבו על תבנית של אוגיות שיוצרת אוגיות ויש לאוגיות איזושהי צורה מסוימת אז המחלקה מתארת את התבנית של האוגיות האובייקטים עצמם בזיכרון אלו האוגיות שנוצרו במדויק מהתבנית אם אנחנו משתמשים עם פונקציה, הפונקציה פועלת ספציפית על האובייקט שקרה לה ולכן אם היא מתעסקת עם משתנים,
אז היא מתעסקת עם המשתנים ששייכים לאובייקט שקרה לפונקציה. אוקיי, אז בואו נעצור את ההדגמה, ונמשיך לבנות את הפונקציה השנייה. הפונקציה השנייה שבנינו מקודם נקרא calculatePriceWithVat.
אז בואו ניקח בדיוק את השם הזה, נבנה כאן פונקציה הרשעת גישה public, מחזירה פעם דצימל, נקראת calculatePriceWithVat, וכמובן היא שוב פעם לא צריכה לקבל שום דבר מפני שהיא אמורה להחזיר את המחיר כולל המאם.
בגלל שכל הפונקציות במחלקה מכירות אוטומטית את הדאטה ממברס של המחלקה, והם התייחסו לדאטה ממברס ששייכים לאובייקט שפעיל את הפונקציה, אז אנחנו פשוט יכולים להחזיר את הפרייס כפול 1.18 וכעת אם אנחנו רוצים לקרוא לפונקציה הזאת אז אנחנו לא צריכים להשתמש עם פונקציה אחרת שמקבלת איזה משהו ולא קשורה בכלל לאובייקט מהמחלקה
אלא אנחנו צריכים להשתמש בfirst product, זה השם של האובייקט, נקודה calculate price with that לא צריך לשלוח שום דבר מפני שהמידע כבר נמצא בתוך האובייקט שהפעיל את הפונקציה לאחר מכן אנחנו רוצים את אותו הדבר