PracticU

Serialization - חלק 3

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

Serialization - חלק 3
בשיעור הזה משנים את המידע בזמן השמירה והטעינה, למשל הצפנה של פרטי כרטיס אשראי, בעזרת תכונות (attributes) שמריצות פונקציות לפני ואחרי כל שלב בתהליך הסריאליזציה.
השלבים העיקריים
1. הבעיה: מחלקת כרטיס אשראי מכילה מידע רגיש, ואי אפשר לשמור אותו לקובץ כמו שהוא. צריך להצפין אותו בזמן השמירה ולפענח אותו בזמן הטעינה.
2. ארבע התכונות: OnSerializing מופעלת לפני תחילת השמירה, OnSerialized אחרי סיומה, OnDeserializing לפני תחילת הטעינה ו-OnDeserialized אחריה. כל אחת מהן מקבלת StreamingContext והיא פונקציה ללא ערך מוחזר.
3. הצפנה בשמירה: בפונקציה שמופעלת לפני השמירה מצפינים את המחרוזות, למשל מספר הכרטיס וסוגו, ואת מספר האבטחה. שינוי שמבוצע כאן נשמר לקובץ.
4. פענוח בטעינה: בפונקציה שמופעלת אחרי הטעינה מפענחים את הערכים בחזרה, כך שהאובייקט חוזר למצבו המקורי.
5. פונקציות שאחרי התהליך: OnSerialized ו-OnDeserializing לא משפיעות על המידע שייכנס לקובץ, כי הן מופעלות בשלב שבו הקובץ כבר נכתב או שהטעינה כבר תתחיל. אפשר לרשום בהן יומן או לבדוק את התהליך.
6. ממשק IDeserializationCallback: דרך נוספת להפעיל פונקציה בסוף הטעינה בלי תכונה. הפונקציה הזו מופעלת אחרונה, ולכן יכולה לשנות את המידע של האובייקט.
7. החיסרון החשוב: השינויים מתבצעים על האובייקט עצמו. אחרי השמירה הערכים באובייקט המקורי כבר מוצפנים, ולכן כדאי לעבוד על עותק (שכפול) של האובייקט, או להשתמש בשיטה אחרת.
בסיום השיעור ברור איך מוסיפים לוגיקה לתהליך השמירה והטעינה, ואיזו פונקציה מתאימה לאיזה שלב.
השיעור הבא בקורס: Serialization - חלק 4

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

  1. 00:00

    מניפולציה על מידע בזמן שמירה וטעינה

  2. 00:45

    בניית מחלקת CreditCard עם מידע רגיש

  3. 02:21

    בניית קונסטרקטורים ו-ToString לכרטיס

  4. 04:53

    שמירה עם SOAP Formatter והרצת הקובץ

  5. 08:10

    צפייה במידע הלא מוצפן בקובץ

  6. 08:45

    שתי שיטות לשינוי המידע בשמירה

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

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

  1. 00:03

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

  2. 00:14

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

  3. 00:39

    אז בואו ניקח מחלקה ובואו נניח שהמידע שאנחנו רוצים זה מידע רגיש ניקח דוגמא קרדיט קארד אנחנו בונים מחלקה שמתארת כרטיס אשראי של לקוח בוא נניח ואנחנו רוצים שבקרדיט קארד יהיה לנו public string card number אנחנו רוצים שיהיה לנו public string card type אנחנו רוצים שיהיה לנו public int בוא ניקח valid to year valid to month ולכרטיס אשראי

  4. 01:27

    יש security number נקרא cvv security verification משהו ואנחנו רוצים את הדבר הזה להפוך ל-serializable כדי שניתן יהיה לשמור אותו אז למעשה יש לנו שתי דרכים לעשות מניפולציות על המידע כלומר אנחנו ראינו מקודם שכאשר אנחנו לקחנו את האובייקט person והיה בו מידע כל מה שקרה והוא שמר את המידע אוטומטית

  5. 02:04

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

  6. 02:28

    נבנה את כל הכלים שקיימים במחלקה בשביל שנוכל לשמור מידע ולטעון מידע. ניקח איזשהו קונסטרקטור ריק, ניקח איזשהו קונסטרקטור שמקבל את כל הפרמטרים שראינו למעלה, card number, string card type, valid to year, valid to month ו-security number ופשוט נכניס

  7. 02:58

    אלה למערכים, card number שווה card number card type קארד טייפ שהתקבל ואליד טו אייר זה ואליד טו אייר באותיות קטנות ואליד טו מאנס ואליד טו מאנס עוד קטנה סקיוריטי זה הסקיוריטי יש לנו קונסטרקטורים בואו נעשה אוברייד לטו סטרינג או אפילו נעשה משהו יותר פשוט נעשה פאבליק ווייד פרינג ונדפיס את הכל בשורות נפרדות

  8. 03:53

    יש לנו כאן את card number, נשרשר card number ואת כל הערכים כולם. יש לנו פה card type, יש לנו valid to year, יש לנו valid to month, security number.

  9. 04:27

    הנה ה-type, year, month, security. הכל מוכן, אנחנו יכולים לבצע שמירה של המחלקה הזאת. אוקיי, אז איך בעצם אנחנו יכולים לעשות את זה?

  10. 04:47

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

  11. 05:13

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

  12. 05:56

    קארד טייפ לאחר מכן year months cvv יש לנו פה כרטיס עכשיו אנחנו רוצים stream בואו נפתח אותו קרדיט קארד xml stream to write dispose להיפטר ממנו וכל מה שאנחנו רוצים ו-formatter.serialize הנה ה-stream הנה האובייקט מורטו בואו נרשום פה גם process.start ונתחבר על אותו הקובץ שלמעשה מה שאנחנו רוצים באמת לעשות אם

  13. 07:16

    אנחנו רוצים לעבוד נכון וכמו מקודם לצרף את System Windows Forms ואנחנו רוצים Application Startup Path משושר עם השם הזה ואם אנחנו לוקחים עכשיו את כל הנתיב הזה ומבצעים process.start אליו כל מה שזה אומר זה שהוא הולך להריץ לנו את הקובץ כאילו שלחצנו עליו דאבל קליק ואז זה חוסך לנו הניסה לתיקייה וצפייה בקובץ בואו נריץ תוכנית הסתיימה בהצלחה

  14. 08:08

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

  15. 08:25

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

  16. 08:46

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

  17. 09:16

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

  18. 09:28

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

  19. 10:02

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

  20. 10:16

    מה שיגרום לה זה אטריביוט שנקרא onSerializing.

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

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

ההרצאה הבאה: Serialization - חלק 4

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

  • Object Serialization

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

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