PracticU

הבדלים בין Class לבין Object

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

הבדלים בין Class לבין Object
הסרטון מסביר את ההבדל בין מחלקה (class), שמתארת ישות, לבין אובייקט שנוצר ממנה ומחזיק את הנתונים בזיכרון. הדוגמה היא מוצר עם שם, קטגוריה ומחיר, והסרטון משווה בין התכנות הפרוצדורלי לתכנות מונחה עצמים.
השלבים העיקריים
1. התכנות הפרוצדורלי: כל מוצר מיוצג בשלושה משתנים נפרדים, למשל firstProductName, firstCategoryName ו-firstPrice. אין קשר תכנותי בין שלושת המשתנים, גם אם ברור לקורא שהם שייכים למוצר אחד.
2. זיהוי ישות: מוצר הוא ישות, כלומר דבר שמופרד משאר הדברים בתוכנית. כל ישות נכתבת בקובץ C# נפרד, ושם הקובץ והמחלקה זהים.
3. Data members: המשתנים שנכתבים בתוך המחלקה, ישירות בתוך הסוגריים המסולסלים, הם התכונות של הישות, כמו שם המוצר ומחירו.
4. יצירת אובייקט: Product firstProduct = new Product(); יוצר בזיכרון אובייקט שמכיל את כל ה-data members יחד.
5. גישה לתכונה: כותבים את שם האובייקט, נקודה ואז שם התכונה, למשל firstProduct.ProductName = "Apple";.
הרשאות גישה
ברירת המחדל של data member היא private, ולכן קוד שנמצא מחוץ למחלקה לא יכול לגשת אליו. הקומפיילר מציג שגיאה "inaccessible due to its protection level". כדי לאפשר גישה מבחוץ כותבים public. הסרטון מזכיר שלוש הרשאות נוספות, שילמדו בהמשך.
שימו לב
המחלקה היא התבנית, והאובייקט הוא המופע שיושב בזיכרון עם הערכים שלו. לכל אובייקט יש עותק משלו של ה-data members, ולכן שני מוצרים שונים לא חולקים ערכים.
השיעור הבא בקורס: הוספת Methods ל-class

פרקי ההרצאה: הבדלים בין Class לבין Object

  1. 00:00

    חשיבה נכונה בתכנות מונחה עצמים

  2. 00:42

    הגדרת המטלה שני מוצרים

  3. 01:41

    בניית המשתנים בתכנות פרוצדורלי

  4. 05:44

    פונקציית חישוב מחיר כולל מעם

  5. 10:04

    בניית התוכנית במונחה עצמים

  6. 11:03

    יצירת Class למוצר

  7. 11:59

    Data Members של המחלקה

  8. 15:22

    יצירת Object עם new

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

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

  1. 00:01

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

  2. 00:16

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

  3. 00:32

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

  4. 01:07

    ולבסוף אנחנו רוצים גם להציג את המחירים של המוצרים, כולל מע"מ. Value Added Tax זה מע"מ. דבר ראשון, מה שאנחנו הולכים לראות, ואיך אנחנו היינו בונים את כל התוכנית הזאת, את כל המטלה הזאת, בתכנות פרוצדורלי, בלי קשר ל-Object Oriented.

  5. 01:28

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

  6. 01:46

    אז הדבר הראשון שהיינו עושים זה מגדירים את המשתנים, יוצרים את המשתנים עבור המוצר הראשון. אז בואו ניצור String first product name string first category name decimal first price ויש לנו כרגע את הערכים עבור המוצר הראשון, את המשתנים עבור המוצר הראשון.

  7. 02:21

    בואו נניח שאנחנו עכשיו רוצים לקלוט מידע או להכניס מידע בקוד משתנים האלה אז היינו רושמים first product name נניח Apple first זה אמור להיות product name first category name fruits ו-first price בואו נניח ארבע וחצי אני מזכיר לכם שה-M זה עבור decimal money הדבר הבא שהיינו רוצים לעשות זה להציג את המידע הזה עבור המוצר ולכן כאן

  8. 03:12

    נכנס תכנות פרוצדורלי שאומר מה זה בעצם פרוצדורה פרוצדורה זה קטע קוד נקרא בהרבה מקומות פונקציה ולכן היינו הולכים וכותבים static void print product והיינו מקבלים את כל הערכים להצגה string product name string category name decimal price בואו נציג

  9. 03:47

    את זה נציג את הproduct name נציג את הcategory name ולבסוף נציג את הprice ובנינו לנו פונקציה שמצליחה להציג את הנתונים אז אחרי שהכנסנו את הערכים אנחנו אנחנו יכולים פשוט ללכת ולקרוא לפונקציה print product לשלוח first product name first category name first price ויש לנו את הפעילות של המוצר הראשון לאחר מכן היינו

  10. 04:48

    יכולים לבנות עוד מוצר זה יהיה second product name זה יהיה second category name second price בואו נשנה את הערכים האלה ונשלח את המוצר השני יש לנו פה second category name second price כאשר הערכים הם יהיו שונים.

  11. 05:21

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

  12. 05:42

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

  13. 06:21

    נניח שכרגע המע"מ הוא 18% ולכן אנחנו מחזירים את המחיר כפול 1.18 אם אנחנו רוצים לראות את המידע הזה אז אנחנו יכולים פה להשתמש עם הפונקציה ובוא נניח שנציג price with ונשרשר את הקריאה לפונקציה Calculate Price with VAT, First Price, נבצע את אותו הדבר כאן, Price with VAT, ונשלח את ה-Second Price.

  14. 07:10

    בואו נבדוק. ואנחנו רואים כאן למעלה את Product Name, Category Name, Price, לאחר מכן Price with VAT. אנחנו שוב פעם רואים מחיר, ו-Price with VAT.

  15. 07:25

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

  16. 08:00

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

  17. 08:27

    בעצם קורה כאן מבחינת המשתנים נחזור בחזרה למצגת ונמשיך ונראה שבעצם אנחנו כרגע ביצענו תכנות פרוצדורלי ופשוט המשתנים היו זרוקים שמה בתוך המיין אז מה בעצם קרה אנחנו כתבנו first product name ונפתח לנו משתנה שנקרא first product name כתבנו first category name נפתח לנו משתנה אחר first category name כתבנו first price נפתח לנו משתנה שלישי first price מה הקשר

  18. 09:00

    בין שלושת המשתנים האלה אין שום קשר ביניהם הם פשוט משתנים שלא קשורים אחד לשני פשוט פתחנו אותם באיזושהי פונקציה במקרה במיין לאחר מכן הכנסנו ערכים בשלושת המשתנים והם קיבלו את הערכים שלהם הדבר הבא שעשינו מבחינת המשתנים זה פתחנו second product name משתנה נוסף, Second Category Name משתנה נוסף ו-Second Price משתנה נוסף שלישי

  19. 09:29

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

  20. 09:50

    מעבר לזה אין להם שום קשר תכנותי הדוק אחד עם השני אבל זה בעצם תכנות פרוצדורלי וזה מה שקרה בזיכרון. כעת אנחנו הולכים לחזור לקוד ולבצע את אותה תוכנית בדיוק אבל עם תכנות Object Oriented.

  21. 10:12

    תכנות Object Oriented אומר דבר ראשון שאנחנו צריכים לזהות האם יש לנו כאן איזה שהם ישויות בקוד.

  22. 10:21

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

  23. 10:36

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

  24. 10:54

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

  25. 11:14

    השם של הישות זה השם של הקלאס, אז אנחנו נותנים לה את השם Product, והיא מתארת לנו מוצר אחד ויחיד. אנחנו נבצע Add ואנחנו הולכים לראות שהולך להתווסף לנו פה קובץ פורס קוד סיומט CS כאשר הקלאס שאנחנו בונים פרודקט צריכה להיות בדיוק באותו השם של הקובץ C-Sharp שהיא נמצאת בתוכו זה הדבר הנכון לבצע.

  26. 11:44

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

  27. 12:01

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

  28. 12:24

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

  29. 12:50

    זה פשוט לפתוח אותם כאן אנחנו לא נפתח אותם במיין כמו שעשינו מקודם אנחנו נפתח אותם בתוך הקלאס אז יש לנו כאן string name או במקרה שמקודם נתנו נתנו פה product name אז נקרא לזה גם כאן product name String CategoryName ו-DecimalPrice המשתנים שנמצאים בתוך קלאס נחשבים ה-Data Members של הקלאס אז המונח Data Members זה מונח מאוד חשוב ב-Object Oriented שמייצג משתנים

  30. 13:34

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

  31. 13:54

    משתנים שנמצאים בתוך פונקציה, כמו שמקודם עשינו, כי המיין היא סך הכל פונקציה, לא נחשבים Data Members, הם נחשבים משתנים לוקאליים ששייכים לפונקציה.

  32. 14:07

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

  33. 14:28

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

  34. 14:51

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

  35. 15:01

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

  36. 15:20

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

  37. 15:46

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

  38. 16:11

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

  39. 16:41

    אמור להיות אז אם אנחנו נמשיך את המצגת אנחנו יכולים לראות בהתקנות של Object Oriented שלנו אנחנו בנינו משהו שנקרא Class Product ובתוכה הגדרנו Product Name, Category Name ו-Price.

  40. 16:59

    שלושה משתנים, אלה ה-Data Members שלה. כעת הלכנו ויצרנו את הקוד Product, First Product שווה New Product, וזה יצר לנו אובייקט בזיכרון. בואו נסתכל מה זה אומר אובייקט בזיכרון.

  41. 17:14

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

  42. 17:28

    השם של המוצר נקרא First Product, כל אחד מהמשתנים מכיל עדיין את השם שלו. הראשון נקרא Product Name, השני נקרא Category Name והשלישי נקרא Price.

  43. 17:40

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

  44. 18:01

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

  45. 18:16

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

  46. 18:35

    אז יש לנו פה first product.productname=apple וזה בעצם יכניס את המילה אפל לתוך המשתנה product name שהינו חלק מהאובייקט. לאחר מכן אנחנו יכולים להגיע ל-category name, להכניס fruits, לאחר מכן אנחנו יכולים להגיע ל-price, להכניס 4.5.

  47. 18:54

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

  48. 19:15

    פעם ערכים הנה הבננה נכנסת ל-second product. product name לאחר מכן fruits נכנס ל-category name של second product ולאחר מכן אנחנו יכולים להכניס 6.3 לתוך ה-Price ששייך ל-Second Product.

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

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

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

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

  • הבדלים בין CC State לבין FC State
  • הבדלים בין Testing לבין Debugging
  • הבדלים בין CentOS לבין RedHat
  • הבדלים בין וונדוס לבין לינוקס

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

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