PracticU

Serialization - חלק 4

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

Serialization - חלק 4
בשיעור הזה מממשים את הממשק ISerializable כדי לשלוט בדיוק במה שנשמר לקובץ, ומדגימים את ההצפנה והפענוח דרך הפונקציה GetObjectData ודרך קונסטרקטור מיוחד לטעינה.
השלבים העיקריים
1. הרעיון: כשמחלקה מממשת את ISerializable, המערכת לא שומרת את השדות אוטומטית. האחריות על מה שנשמר עוברת למתכנת.
2. הפונקציה GetObjectData: היא נקראת בזמן השמירה ומקבלת אובייקט SerializationInfo. כל ערך שרוצים לשמור נוסף לאובייקט הזה בעזרת AddValue, עם שם שהמתכנת בוחר. ערך שלא נוסף לא נשמר בכלל.
3. הצפנה בשמירה: בתוך GetObjectData מוסיפים לאובייקט את הערכים המוצפנים, למשל מספר הכרטיס וסוגו. הערכים שנשמרים הם המוצפנים, והאובייקט עצמו לא משתנה.
4. קונסטרקטור לטעינה: הממשק לא יכול לכלול קונסטרקטור, ולכן צריך לכתוב קונסטרקטור פרטי עם אותה חתימה כמו GetObjectData: SerializationInfo ו-StreamingContext. הוא נקרא על ידי המערכת בלבד.
5. פענוח בטעינה: בתוך הקונסטרקטור קוראים את הערכים לפי השם בעזרת GetString, ומפענחים אותם לפני שהם נכנסים לשדות. לכן הקונסטרקטור מחזיר את האובייקט למצב המקורי.
6. בדיקה ראשונה: אם שומרים בלי שהפונקציה GetObjectData מוסיפה ערכים, הקובץ נשאר ריק מהמידע. ואם חסר הקונסטרקטור, הטעינה נכשלת עם שגיאה שאומרת שלא נמצא קונסטרקטור לטעינה מטיפוס כזה.
7. יתרון השיטה: האובייקט המקורי לא משתנה בזמן השמירה, כי ההצפנה נעשית רק על הערכים שנכתבים לקובץ. לכן אין צורך לשכפל את האובייקט.
בסיום השיעור ברור ש-ISerializable נותן שליטה מלאה על מה שנשמר, ושבחרו לא לשמור ערך אם לא מוסיפים אותו ל-SerializationInfo.
תרגילים
התרגילים כוללים מחלקת אייפון עם גרסה ומחיר, שמירה וטעינה בעזרת BinaryFormatter, SoapFormatter ו-XmlSerializer, ומימוש ISerializable עם הצפנה של השדות.
השיעור הבא בקורס: תרגילים על Serialization

פרקי ההרצאה: Serialization - חלק 4

  1. 00:00

    שכפול האפליקצייה לשיטה השנייה

  2. 01:19

    הסרת האטריביוטים מהמחלקה CreditCard

  3. 01:58

    ירושת ה-Interface ISerializable

  4. 02:56

    הפעלה אוטומטית בתהליך ה-Serialization

  5. 03:33

    הרצה ללא תוכן - מידע לא נשמר

  6. 04:11

    חובה לשמור את כל המידע בעצמך

תמלול ההרצאה: Serialization - חלק 4

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

  1. 00:06

    אז לצורך השיטה הבאה בואו נבצע שכפול של כל האפליקציה הזאת בכדי לא לערבב בין שתי השיטות כי אין ביניהם ממש קשר. אז מה שנעשה זה נפתח את המיקום, נסגור את Visual Studio, נחזור בחזרה ל-Serialization, יש לנו פה את ה-Custom, נשכפל אותו, נקרא לו Custom Serialization 2 or Second

  2. 00:45

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

  3. 01:11

    נשים פה את השמות החדשים, ניכנס לפרוגרם, ניכנס למחלקה, Credit Card, נראה מה אנחנו לא צריכים.

  4. 01:27

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

  5. 02:12

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

  6. 02:30

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

  7. 02:50

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

  8. 03:14

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

  9. 03:30

    יש לנו פה את ה-soap, מירה של המידע, אפילו נציג אותו פה באדום, וטעינה. בואו נראה מה קורה כאשר אנחנו מבצעים. בואו נגיד רק שמירה בלבד, ולא כתבתי את התוכן של הפונקציה get object data.

  10. 03:50

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

  11. 04:06

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

  12. 04:31

    זאת אומרת, ברגע שהמערכת רואה שיש לנו את ה-interface i-serializable אז היא אומרת אני לא מבצעת את הפעולה של ה-automatic-serialization אלא האחריות שלכם לבצע.

לקורס המלא: קורס תכנות מתקדם ב‑#C ודוט-נט

ההרצאה הקודמת: Serialization - חלק 3

ההרצאה הבאה: תרגילים על Serialization

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

  • Object Serialization

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

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס WCF - תקשורת למתקדמים בדוט-נט