PracticU

מפרק - Destructor

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

מפרק - Destructor
הסרטון קצר ומסביר את הדיסטרקטור - פונקציה שמופעלת כשהאובייקט נהרס בזיכרון על ידי ה-garbage collector.
השלבים העיקריים
1. יצירה והריסה: המילה new מבקשת מקום בזיכרון לאובייקט. ה-garbage collector מחליט מתי האובייקט כבר לא בשימוש, ואז הורס אותו ומחזיר את המקום למאגר הזיכרון.
2. תחביר: הדיסטרקטור מתחיל בסימן טילדה ~ ואחריו שם המחלקה. אין לו הרשאת גישה, אין לו ערך מוחזר, ואי אפשר לשלוח לו פרמטרים. אפשר לכתוב דיסטרקטור אחד בלבד בכל מחלקה.
3. מתי הוא רץ: בדוגמה שלושה אובייקטים נהרסים בסוף התוכנית, כי ה-garbage collector לא הרס אותם לפני כן.
4. מה מותר לעשות בתוכו: אפשר לשחרר משאבים שאינם של .NET, למשל רכיב ישן שנכתב ב-C++ או אזור זיכרון ישן. אסור לגעת באובייקטים אחרים של .NET, כי יכול להיות שה-garbage collector כבר הרס אותם.
שימו לב
ברוב המקרים לא רואים דיסטרקטור בקוד אמיתי, אלא מנגנון מתקדם יותר שנקרא Dispose, שילמד במודול אחר.
הדיסטרקטור מיועד לפעולות אחרונות לפני ההריסה, ולא לקוד רגיל של התוכנית.
השיעור הבא בקורס: מחלקה מסוג Static Class

פרקי ההרצאה: מפרק - Destructor

  1. 00:00

    מהו Destructor מול Constructor

  2. 00:53

    מנגנון ה-Garbage Collector

  3. 01:51

    כתיבת ה-Destructor עם Tilde

  4. 02:28

    הרצה והריסת האובייקטים

  5. 03:44

    מגבלות הפעולות ב-Destructor

תמלול ההרצאה: מפרק - Destructor

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

  1. 00:01

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

  2. 00:20

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

  3. 00:35

    בואו נכתוב את ה... או שנראה את התחביר הזה. יש לנו כאן אובייקט מהמחלקה, product, first product זה השם של האובייקט, שווה new product.

  4. 00:47

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

  5. 01:01

    אבל ב-dotnet קיים איזשהו מנגנון שנקרא garbage collector, garbage collector זה מנגנון שנותן לנו את האובייקט הוא אחראי לדעת שאנחנו אכן משתמשים עם האובייקט הזה וכאשר אנחנו לא צריכים יותר להשתמש עם האובייקט יש לו איזושהי שיטה לדעת את זה

  6. 01:22

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

  7. 01:44

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

  8. 01:55

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

  9. 02:13

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

  10. 02:30

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

  11. 02:57

    כל התוכנית שלי מתחילה במיין ומסתיימת במיין ובמיין פתחנו שלושה אובייקטים 1,2,3 וה garbage collector מבחינתו אומר שאני עדיין רוצה להשתמש באובייקטים האלה ולכן הוא לא הולך להרוס לי אותם כאשר מסתיימת התוכנית המיין הסתיים אז ה garbagecollector כמובן הורס את כל האובייקטים הקיימים כאלה שהוא עדיין לא הרס אותם ברגע

  12. 03:22

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

  13. 03:32

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

  14. 03:58

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

  15. 04:26

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

  16. 04:50

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

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

ההרצאה הקודמת: בנאי המחלקה Constructor (הסבר נוסף)

ההרצאה הבאה: מחלקה מסוג Static Class

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

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