Type introspection

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש

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

את יכולת הזיהוי העצמי ניתן להדגים בדוגמת הקוד הבאה בשפת C++:

Person* p = dynamic_cast<Person *>(obj);
if (p != nullptr) {
  p->walk();
}

בדוגמת קוד זו התוכנית מקבלת משתנה בשם obj שלא ידוע מה מראש מה טיפוסו. באמצעות שימוש בהמרה דינמית (dynamic_cast) מסוגלת התוכנית לבדוק במהלך ריצתה האם האובייקט הוא מסוג Person ולפעול בהתאם.

תמיכה בזיהוי עצמי של טיפוסים בשפות שונות

C++

תומכת במנגנון זיהוי עצמי באמצעות מנגנון ה-RTTI, אופרטור typeid והמרה דינמית (dynamic_cast). הביטוי dynamic_cast יכול להיות בשימוש כדי לזהות האם אובייקט מסוים הוא "תת" אובייקט של מחלקה אחרת.

האופרטור typeid מחזיר אובייקט מסוג std::type_info שמתאר את הסוג (מחלקת אב, לרוב) של האובייקט עליו הוא מבוצע. דוגמה לשימוש:

if (typeid(Person) == typeid(*obj)) {
  serialize_person( obj );
}

Java

בשפת Java הדוגמה הפשוטה ביותר של זיהוי עצמי של טיפוס הוא האופרטור instanceof[1]. אופרטור זה בודק האם האובייקט המסוים שייך למחלקה מסוימת (או לתת מחלקה שלה, או למחלקת המימוש של ממשק). לדוגמה:

if(obj instanceof Person){
   Person p = (Person)obj;
   p.walk();
}

המחלקה java.lang.Class[2] היא הבסיס של זיהוי עצמי של טיפוס בצורה מתקדמת יותר.

כך למשל, אם רצוי לקבוע את סוג האובייקט, ניתן להשתמש ב- Object.getClass ו Class.getName. לדוגמה:

System.out.println(obj.getClass().getName());

ראו גם

הערות שוליים

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

28175933Type introspection