typeid ו-serialiization

typeid ו-serialiization

1) לא הבנתי באיזה אופן שימוש ב-typeid עוזר לזיהוי הטיפוס בזמן ריצה , ומה בין זה לבין שימוש ב-virtual בפולימורפיזם.
2) אשמח מאוד לקבל הסבר אודות seriialization ולשם מה יש בה בעצם צורך.
 

BravoMan

Active member
ככה:

1) נניח שיש לך מחלקה Animal וממנה יורשות 2 מחלקות:
Cow ו-Fox.
משתמש יוצר חיות שונות בתוכנה בזמן שימוש בה, וכולן מאוחסנות במערך של Animal.
&nbsp
אבל, בפונקציה מסוימת אתה צריך לדעת אם יש לך פרה או שועל בתא מסוים במערך.
איך תעשה את זה?
אתה מפעיל את typeid על האובייקט הרצוי, והוא נותן לך מידע אמתי על הטיפוס שלו.
מידע זה כולל את השם של המחלקה שממנה נוצר.
&nbsp
הנה דוגמת קוד:
http://en.cppreference.com/w/cpp/language/typeid
&nbsp
זה הצד השני של פולימורפיזם: ירושה מאפשרת לך לעלות לרמה "כללית" של טיפול במחלקות שונות, ו-typeid מאפשר לך לרדת חזרה לאבחנה פרטנית בין הסוגים.
&nbsp
2) serialization הוא תהליך של שמירה של אובייקטים בזיכרון לתוך אחסון לא נדיף.
נניח יש לך תוכנה של אנשי קשר.
בתוכה יש מחלקה של Person ששומרת את כל פרטי הקשר של אדם אחד.
&nbsp
המשתמש הזין את הפרטים, התוכנה יצרה אובייקט Person ומחזיקה אותו בזיכרון, אבל מה הלאה?
מה יקרה כשהמשתמש ירצה לצאת מהתוכנה או לכבות את המחשב?
&nbsp
כאן בדיוק נכנס עניין ה-serialization:
אתה כותב קוד שישמור את תוכן אובייקט Person לקובץ בדיסק בצורה כזו שבפעם הבאה שמשתמש נכנס לתוכנה שלך, הוא יוכל לשחזר את האובייקט במדויק ולראות את המידע.
&nbsp
יש כאן קאצ' קטן:
הרעיון האמתי מאחורי serialization הוא לשמור אובייקטים בצורה כזו ששחזור שלהם יהיה אוטומטי:
כלומר, התוכנה שלך לא ממש צריכה לדעת שהיא קוראת קובץ של אנשי קשר.
הקובץ כולל מידע הן על סוג האובייקט והן על שדות שלו, כך שקוד גינרי אחד יכול לשחזר מקובץ אובייקטים שונים בעלי מבנה שונה.
 
למעלה