
firstProductName, firstCategoryName ו-firstPrice. אין קשר תכנותי בין שלושת המשתנים, גם אם ברור לקורא שהם שייכים למוצר אחד.Product firstProduct = new Product(); יוצר בזיכרון אובייקט שמכיל את כל ה-data members יחד.firstProduct.ProductName = "Apple";.public. הסרטון מזכיר שלוש הרשאות נוספות, שילמדו בהמשך.הטקסט המלא של הדקות הראשונות בהרצאה «הבדלים בין Class לבין Object» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז אחרי שראינו את ההבדלים בין תכנות פרוצדורלי לתכנות Object Oriented, בואו נבין איך נכון לחשוב כאשר אנחנו הולכים לכתוב תוכנית ב-Object Oriented, איך נכון לבנות קלאס ומה המשמעות שלה מבחינת הזיכרון.
אז בואו נניח שאנחנו קיבלנו איזושהי מטלה לביצוע, והמטלה אומרת שעלינו לבנות משתנים עבור שני מוצרים. אנחנו רוצים לקלוט מהמשתמש או לקלוט דרך הקוד מידע לגבי שני מוצרים.
מה בדיוק כולל מוצר? המוצר כולל שם עבור המוצר הוא כולל שם עבור הקטגוריה של המוצר איזה קטגוריה הוא שייך משקאות תבלינים וכולי מה השם של הקטגוריה והוא כולל מחיר ומה שאנחנו צריכים לעשות בקוד ולהגדיר את המקום בביקרון הזה עבור שני מוצרים לקלוט ערכים או להכניס ערכים נניח hardcoded כלומר דרך הקוד לשני המוצרים להציג את כל הערכים על הקונסול מסך הקונסול
ולבסוף אנחנו רוצים גם להציג את המחירים של המוצרים, כולל מע"מ. Value Added Tax זה מע"מ. דבר ראשון, מה שאנחנו הולכים לראות, ואיך אנחנו היינו בונים את כל התוכנית הזאת, את כל המטלה הזאת, בתכנות פרוצדורלי, בלי קשר ל-Object Oriented.
לאחר מכן אנחנו הולכים לבנות את זה ב-Object Oriented, ואז נבין את ההבדלים בין שתי השיטות. אז בואו נלך לתוכנית שפתחנו כאן, ונתחיל לבנות את כל המטלה הזאת, בעזרת תכנות פרוצדורלי בלי שום קשר ל-object-oriented.
אז הדבר הראשון שהיינו עושים זה מגדירים את המשתנים, יוצרים את המשתנים עבור המוצר הראשון. אז בואו ניצור String first product name string first category name decimal first price ויש לנו כרגע את הערכים עבור המוצר הראשון, את המשתנים עבור המוצר הראשון.
בואו נניח שאנחנו עכשיו רוצים לקלוט מידע או להכניס מידע בקוד משתנים האלה אז היינו רושמים first product name נניח Apple first זה אמור להיות product name first category name fruits ו-first price בואו נניח ארבע וחצי אני מזכיר לכם שה-M זה עבור decimal money הדבר הבא שהיינו רוצים לעשות זה להציג את המידע הזה עבור המוצר ולכן כאן
נכנס תכנות פרוצדורלי שאומר מה זה בעצם פרוצדורה פרוצדורה זה קטע קוד נקרא בהרבה מקומות פונקציה ולכן היינו הולכים וכותבים static void print product והיינו מקבלים את כל הערכים להצגה string product name string category name decimal price בואו נציג
את זה נציג את הproduct name נציג את הcategory name ולבסוף נציג את הprice ובנינו לנו פונקציה שמצליחה להציג את הנתונים אז אחרי שהכנסנו את הערכים אנחנו אנחנו יכולים פשוט ללכת ולקרוא לפונקציה print product לשלוח first product name first category name first price ויש לנו את הפעילות של המוצר הראשון לאחר מכן היינו
יכולים לבנות עוד מוצר זה יהיה second product name זה יהיה second category name second price בואו נשנה את הערכים האלה ונשלח את המוצר השני יש לנו פה second category name second price כאשר הערכים הם יהיו שונים.
נניח המוצר השני הוא בננה, קטגוריה עדיין פירות, אבל הפעם אנחנו במחיר אחר 6.3. בואו נריץ את זה. יש לנו את כל הנתונים מוצגים על המסך, הכל עובד טוב ויפה.
אנחנו צריכים עדיין להשלים את התרגיל ולכתוב פונקציה שהייתה אמורה לחשב לנו את המחיר כולל המע"מ. אז בואו נניח שהיא תחזיר לנו דצימל, נקרא לה CalculatePriceWithValueAddedDax ומה שהפונקציה זאת הייתה יכולה לעשות זה לקבל בוא נניח את המחיר ולהחזיר לנו את המחיר כולל מע"מ בוא
נניח שכרגע המע"מ הוא 18% ולכן אנחנו מחזירים את המחיר כפול 1.18 אם אנחנו רוצים לראות את המידע הזה אז אנחנו יכולים פה להשתמש עם הפונקציה ובוא נניח שנציג price with ונשרשר את הקריאה לפונקציה Calculate Price with VAT, First Price, נבצע את אותו הדבר כאן, Price with VAT, ונשלח את ה-Second Price.
בואו נבדוק. ואנחנו רואים כאן למעלה את Product Name, Category Name, Price, לאחר מכן Price with VAT. אנחנו שוב פעם רואים מחיר, ו-Price with VAT.
נסדר טיפה את זה בצורה כזאת. נניח שאנחנו רוצים תצוגה אסתטית כזאת. ויש לנו כרגע את שני המוצרים מוצגים לנו. כאשר פתחנו את המשתנים במיין, כתבנו את הפונקציות הדרושות במחלקה פורוגרם פה באזור הזה, ואנחנו רואים שבעצם הכל זרוק לנו בתוך הפרויקט, אין כל כך קשר בין הפונקציה הזאת באמת למוצר
אמיתי, היא פשוט מקבלת ערכים ומציגה אותו, גם הפונקציה של חישוב המחיר פלוס המע"מ לא קשורה ממש למישהו, היא פשוט זרוקה כאן, כל המשתנים זרוקים במיין. אם התוכנית הזאת הייתה מאוד מאוד גדולה אז מאוד היה קשה להבין מה קורה כאן מאוד היה קשה לתחזק אותה מאוד היה קשה לתקן באגים או להוסיף עליה כל מיני דברים אבל בואו נסתכל רגע מה
בעצם קורה כאן מבחינת המשתנים נחזור בחזרה למצגת ונמשיך ונראה שבעצם אנחנו כרגע ביצענו תכנות פרוצדורלי ופשוט המשתנים היו זרוקים שמה בתוך המיין אז מה בעצם קרה אנחנו כתבנו first product name ונפתח לנו משתנה שנקרא first product name כתבנו first category name נפתח לנו משתנה אחר first category name כתבנו first price נפתח לנו משתנה שלישי first price מה הקשר
בין שלושת המשתנים האלה אין שום קשר ביניהם הם פשוט משתנים שלא קשורים אחד לשני פשוט פתחנו אותם באיזושהי פונקציה במקרה במיין לאחר מכן הכנסנו ערכים בשלושת המשתנים והם קיבלו את הערכים שלהם הדבר הבא שעשינו מבחינת המשתנים זה פתחנו second product name משתנה נוסף, Second Category Name משתנה נוסף ו-Second Price משתנה נוסף שלישי
והכנסנו בהם ערכים יש לנו פה את הבננה לאחר מכן פרוט פירות ולאחר מכן 6.3. עכשיו שימו לב שאנחנו בתור מתכנתים יודעים ששלושת המשתנים הראשונים מייצגים לנו מוצר ראשון, שלושת המשתנים השניים מייצגים לנו מוצר שני.
מעבר לזה אין להם שום קשר תכנותי הדוק אחד עם השני אבל זה בעצם תכנות פרוצדורלי וזה מה שקרה בזיכרון. כעת אנחנו הולכים לחזור לקוד ולבצע את אותה תוכנית בדיוק אבל עם תכנות Object Oriented.
תכנות Object Oriented אומר דבר ראשון שאנחנו צריכים לזהות האם יש לנו כאן איזה שהם ישויות בקוד.
מה זה ישות באנגלית Entity ישות זה משהו שמופרד מדברים אחרים וניתן להתייחס אליו כאילו שהוא פועל לבד ומייצג משהו שהוא נפרד משאר הדברים בתוכנית.
ואם אנחנו מתעסקים בתוכנית שלנו במוצרים אז כמובן שאנחנו יכולים לזהות שמוצר זה ישות ואנחנו מתעסקים פה עם איזשהו מוצר. למעשה אנחנו צריכים שני מוצרים כאלה אבל מבחינת אישויות יש לנו ישות שנקראת מוצר או באנגלית product.
באובג'קט אוריינטד כל ישות נבנית בקובץ C-Sharp נפרד והיא מיוצגת על ידי קלאס, על ידי מחלקה. זאת אומרת שאנחנו צריכים ללכת לפרויקט שלנו, Add, קלאס, וזה בעצם בונה לנו ישות נפרדת.
השם של הישות זה השם של הקלאס, אז אנחנו נותנים לה את השם Product, והיא מתארת לנו מוצר אחד ויחיד. אנחנו נבצע Add ואנחנו הולכים לראות שהולך להתווסף לנו פה קובץ פורס קוד סיומט CS כאשר הקלאס שאנחנו בונים פרודקט צריכה להיות בדיוק באותו השם של הקובץ C-Sharp שהיא נמצאת בתוכו זה הדבר הנכון לבצע.
אז יש לנו פה את המחלקה הקלאס הזאת שאנחנו בונים והיא מייצגת לנו מוצר אחד והיא נמצאת בקובץ C-Sharp נפרד משאר קבצי ה-C-Sharp של התוכנית. עכשיו מה זה אומר שאנחנו בונים ישות פרודקט?
מה יש בתוך ישות פרודקט או ליתר דיוק ממה מוצר או ישות מוצר מורכבת. אז למעשה בתוך קלאס יש סך הכל שני דברים. דבר ראשון בתוך קלאס יש משתנים שמכילים את התכונות של הקלאס, את התכונות של אותה ישות.
המשתנים נקראים data members חברים של הישות וכאן אנחנו צריכים להבין מה המשתנים הדרושים למוצר ואנחנו קודם ראינו שכשרצינו לפתוח מוצר היה לנו שם מוצר היה לנו שם של הקטגוריה של המוצר והיה לנו את המחיר שלושת הערכים האלה אלה המשתנים שמרכיבים מוצר ולכן כל מה שאנחנו צריכים לעשות
זה פשוט לפתוח אותם כאן אנחנו לא נפתח אותם במיין כמו שעשינו מקודם אנחנו נפתח אותם בתוך הקלאס אז יש לנו כאן string name או במקרה שמקודם נתנו נתנו פה product name אז נקרא לזה גם כאן product name String CategoryName ו-DecimalPrice המשתנים שנמצאים בתוך קלאס נחשבים ה-Data Members של הקלאס אז המונח Data Members זה מונח מאוד חשוב ב-Object Oriented שמייצג משתנים
שנמצאים ישירות בתוך הסוגריים של הקלאס והם מתארים את המאפיינים של אותה ישות מה בעצם מאפיין אותה מה שמאפיין מוצר זה השם שלו זה השם של הקטגוריה שלו זה המחיר שלו, אם היינו רוצים עוד דברים שמאפיינים מוצר, כולם היו משתנים בתוך קלאס.
משתנים שנמצאים בתוך פונקציה, כמו שמקודם עשינו, כי המיין היא סך הכל פונקציה, לא נחשבים Data Members, הם נחשבים משתנים לוקאליים ששייכים לפונקציה.
אז יש לנו כאן כרגע את שלושת המשתנים שמייצגים את המוצר. דבר נוסף שקיים בתוך קלאס זה פעילויות שהקלאס יודעת לעשות, פעילויות נכתבות על ידי פונקציות והן נקראות מתודות באנגלית Methods.
בסרטון הבא אנחנו הולכים לראות איך אנחנו יכולים להוסיף פונקציות לתוך קלאס. בסרטון הזה אנחנו רוצים רק לטפל כרגע ביצירה של המחלקה ובמשתנים שלה. אז מה שבנינו כרגע זה ישות סגורה שמתארת מוצר בודד והשאלה היא איך אנחנו משתמשים בה.
הרי בסופו של דבר אנחנו רוצים שיהיו לנו כביכול שני מוצרים. אבל אנחנו צריכים איכשהו להשתמש עם המחלקה הזאת בשביל ליצור שני מוצרים.
זה כמובן מתבצע באזור של המיין. אז כעת מה שאנחנו נעשה, אנחנו נשים בהערה את כל התכנות הקודם שכתבנו בתוך המיין, כי אנחנו רוצים לעבוד בצורה נכונה על ידי Object Oriented.
ומה שאנחנו צריכים לעשות במיין זה לבנות אזור זיכרון שנבנה בעצם מהמשתנים של הישות. של המוצר. התחביר בעצם זה תחביר שמאפשר לנו ליצור משהו שנקרא אובייקט.
זה מתבצע בצורה הבאה: רושמים את שם הקלאס product, ממציאים שם עבור כל האובייקט, עוד מעט אנחנו נראה מה זה אומר אובייקט ומה יש בתוכו, נקרא לו first product, שווה, משתמשים באופרטור new, שוב פעם רושמים את השם של הקלאס וכעת סוגריים
ריקים. מה שאנחנו כרגע עשינו זה יצרנו אובייקט בזיכרון שמכיל את כל הדאטה ממברס שנכתבו בתוך הקלאס וזה מכיל אותם כמקשה אחת במקום אחד בזיכרון שלושה משתנים שקשורים אחד לשני ושלושתם מתארים אובייקט אחד שהוא בעצם מוצר אחד פרודקט אחד אז בואו נחזור למצגת ונראה איך עכשיו הזיכרון
אמור להיות אז אם אנחנו נמשיך את המצגת אנחנו יכולים לראות בהתקנות של Object Oriented שלנו אנחנו בנינו משהו שנקרא Class Product ובתוכה הגדרנו Product Name, Category Name ו-Price.
שלושה משתנים, אלה ה-Data Members שלה. כעת הלכנו ויצרנו את הקוד Product, First Product שווה New Product, וזה יצר לנו אובייקט בזיכרון. בואו נסתכל מה זה אומר אובייקט בזיכרון.
זה אומר שנוצרו לנו שלושה משתנים אבל הם לא סתם זרוקים בתוך איזושהי פונקציה ולא קשורים לכלום. תחשבו שהם עטופים במעין מעטפת כזאת ושלושתם ביחד קשורים למוצר אחד.
השם של המוצר נקרא First Product, כל אחד מהמשתנים מכיל עדיין את השם שלו. הראשון נקרא Product Name, השני נקרא Category Name והשלישי נקרא Price.
עכשיו השאלה היא איך אנחנו ניגשים לשלושת המשתנים האלה ומכניסים לתוכם ערכים? והתשובה היא בעזרת נקודה. כאן אנחנו יכולים לראות שיש לנו נקודה בין השם של האובייקט first product לבין השם של המשתנה product name.
בעצם מה שאנחנו צריכים לעשות זה פשוט לרשום את שם האובייקט כולו first product נקודה ולאחר מכן הנקודה מכניסה אותנו לתוך המשתנה שנמצא בתוך האובייקט.
כל מה שנמצא כאן זה האובייקט. אובייקט בנוי מסך כל ה-data members שהוגדרו במחלקה שלו, ורק אחד כזה זה data member אחד, זה משתנה שהוא חלק מהאובייקט ומרכיב אותו בעצם.
אז יש לנו פה first product.productname=apple וזה בעצם יכניס את המילה אפל לתוך המשתנה product name שהינו חלק מהאובייקט. לאחר מכן אנחנו יכולים להגיע ל-category name, להכניס fruits, לאחר מכן אנחנו יכולים להגיע ל-price, להכניס 4.5.
אם אנחנו רוצים ליצור עוד אובייקט אנחנו מבצעים בדיוק את אותו הדבר כמובן נותנים לו שם אחר לדוגמה product second product שווה new product זה יוצר לנו עוד אובייקט בזיכרון שהינו נפרד מהאובייקט הראשון כי שניהם שני מוצרים נפרדים ושונים אחר כך אנחנו יכולים ללכת ולהכניס שוב
פעם ערכים הנה הבננה נכנסת ל-second product. product name לאחר מכן fruits נכנס ל-category name של second product ולאחר מכן אנחנו יכולים להכניס 6.3 לתוך ה-Price ששייך ל-Second Product.