COM

**COM** (באנגלית ראשי תיבות של: **Component Object Model** - מודל האובייקטים של הרכיבים) - תקן טכנולוגי של חברת מיקרוסופט, המיועד ליצירת תוכנה על בסיס שיתוף פעולה של רכיבים מבוזרים, שבכל אחד מהם ניתן להשתמש בתוכניות רבות באותו זמן, וניתן לגשר בין שפות תכנות שונות. בבסיס הטכנולוגיה רעיונות כימוס ורב-צורתיות של תכנות מונחה עצמים (OOP). טכנולוגית COM היא אוניברסלית ולא תלויה בפלטפורמה, אך השימוש בה רווח בעיקר במערכת ההפעלה "חלונות" לגרסאותיה. בגרסאות החדשות של "חלונות" השימוש ב-COM רווח מאוד, ואף פותחו על בסיסה תקנים נוספים, כמו ActiveX, DCOM, +COM, OLE automation.

## היסטוריה
מודל ה-COM פותח על ידי מיקרוסופט ב-1993 כבסיס להתפתחותה של טכנולוגיית OLE. טכנולוגיית OLE 1.0 אפשרה יצירת מסמכים מורכבים (compound documents), לדוגמה ניתן היה להוסיף למיקרוסופט וורד טבלאות מגיליון של תוכנת אקסל. טכנולוגית COM הייתה אמורה לתת אחידות לתהליך שילוב, הכנסה וקישור של אובייקטים משולבים אלה וכן לשמור על תקן אחד בכל המוספים, המשתמשים באובייקטים משולבים אלה.

### שינוי השם
ב-1996 מיקרוסופט החליטה לשנות את השם OLE ל-ActiveX בכל יישומיו. הדבר לא עלה בידיה לגמרי. טכנולוגית OLE השתמשה ברכיבי בקרה (OLE Controls, או OCX), שהם רכיבים שהיה בהם שימוש חוזר בממשק משתמש, המבוססים על טכנולוגיית COM, כשמיקרוסופט שינתה את שמם של OLE controls ל-ActiveX Controls, סיומת .ocx לקבצים מסוג זה נשארה. מיד אחר כך מיקרוסופט התחילה לעודד שימוש ברכיבי ActiveX בגרסה החדשה של הדפדפן אינטרנט אקספלורר, והשם OLE נשאר רק לטכנולוגיית מסמכים מורכבים ואובייקטים המשולבים מקומית. OLE - אובייקטים רשתיים שינו את שמם ל-ActiveX.

## יסודות פעולת ה-COM
ביסוד טכנולוגיית COM עומדים רכיבי COM, או "COM components". למעשה תוכניות שנבנו על ידי COM אינן תוכניות עצמאיות, אלא רכיבי COM המתקשרים אחד לשני בזמן ריצה. לכל רכיב יש מזהה ייחודי (GUID), ובו יכולים להשתמש באותו זמן תוכניות שונות. הרכיב מתקשר עם תוכניות אחרות דרך ממשק COM, שהוא רשימה של מאפיינים, שיטות ואירועים. כל תוכנית COM חייבת לתמוך לפחות בממשק הבסיסי "IUnknown", שמאפשר פעולות בסיסיות לעבודה עם רכיבים. 

בתוך Windows API ישנן פונקציות בסיסיות המאפשרות לעבוד עם רכיבי COM. בספריות MFC ובמיוחד בספריות ATL/WTL ישנן פונקציות גמישות יותר לעבודה עם COM מאשר ב-API. ספריית ATL של מיקרוסופט היא האמצעי הנוח ביותר ליצירת רכיבי COM ועבודה איתם. למרות זאת לפעולות רבות עם COM עדיין דרושה עבודה ידנית, הדבר נכון במיוחד כשמנסים לשלב רכיבי COM בקובצי ++C. מיקרוסופט מנסה לפשט את התהליך בגרסת +COM, ובמיוחד NET.

## התפתחות ה-COM
ב-1996 יצאה לאור טכנולוגיית DCOM (קיצור של Distributed COM), המבוססת על טכנולוגיית DCE/RPC, ונחשבת כהתפתחות של COM. טכנולוגית DCOM מאפשרת לרכיבי COM לתקשר דרך הרשת. המתחרה העיקרי של טכנולוגיה זו הוא תקן CORBA של קבוצת OMG.

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

## NET. ו-COM
ב-2002, לאחר יצירת פלטפורמת NET., מיקרוסופט התחילה להמליץ על שימוש בפלטפורמה זו ליצירת מוספים תחת "ווינדוס". NET. ו-+COM אמורות להיות טכנולוגיות שמשלימות אחת את השנייה. בחלונות ויסטה שיצאה ב-2007 בטכנולוגיית COM במסגרת NET. קיימת תמיכה מלאה בטכנולוגיות COM ו-NET. תמיכה זו בעצם מאפשרת ל-NET. התממשקות עם אובייקטים שנכתבו בשפות יותר פרימיטיביות (native code) החושפות ממשק COM, בצורה פשוטה יותר מהממשק הרגיל של P/Invoke.

## קישורים חיצוניים
* 
* הסבר על COM, באתר מיקרוסופט

קטגוריה:תכנות מונחה-עצמים