ארכיון יומי: 26 דצמבר, 2008

meta class 2

לאחר הבעיה להסביר את meta class בפעם הראשונה, זהו עוד סיבוב שמנסה להסביר את הפעולה.

אז נתחיל מההתחלה: מה זה meta class ?

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

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

עכשיו נשאלת השאלה למה זה טוב ?

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

שימושים עיקריים הינם:

  1. יצירת פונקציה אשר תיצור מופע מחלקה חדש ללא צורך בקוד מיוחד עבור כל סוג המחלקות שקיבלנו עבורינו. זהו קוד מאוד נפוץ ומוכר כאשר מדובר בשימוש ב meta class בכל השפות
  2. עוד סוג של עבודה עם תבניות, כלומר אפשרות להשתמש בתכונות של מחלקה ספציפית, גם כאשר המופע שלנו מכיל תכונות ומתודות אחרות, ובכך להתנהג במתודות למשל, כאילו היו מתודות סטטיות שלא דרשו מאיתנו איתחול של המחלקה, ואף להפעיל דברים שלא קיימות במופע הקיים שלנו. אפשרות זו נקראת class reference.

להמשיך לקרוא