Research

COM (Component Object Model) Technology


อาจารย์อัฐพงศ์ รัตนประพันธ์  
อาจารย์ประจำภาควิชาวิศวกรรมคอมพิวเตอร์ ​ 
คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเทคโนโลยีมหานคร  
9 ตุลาคม 2557  

       เทคโนโลยี COM เป็นกรรมวิธีที่ไมโครซอฟต์คิดค้นขึ้นมาเพื่อใช้ในการสร้าง ซอฟต์แวร์และระบบปฏิบัติการให้สามารถรองรับองค์ประกอบต่างๆ จากผู้พัฒนาหลายๆ แหล่งที่ไม่มีความเกี่ยวข้องกัน สามารถติดต่อสื่อสารแลกเปลี่ยนข้อมูลระหว่างกันได้โดยไม่ยึดติดกับภาษาที่ใช้เขียนโปรแกรม รวมถึงระบบปฏิบัติการในตระกูลวินโดวส์เวอร์ชันต่างๆ และฮาร์ดแวร์ ซึ่งแนวคิดนี้กลายเป็นรากฐานสำหรับการพัฒนาของการให้บริการซอฟต์แวร์ในระดับสูงของไมโครซอฟต์ในปัจจุบัน โดยข้อกำหนดมาตรฐานทางเทคโนโลยีของไมโครซอฟต์มีหลักให้ทำงานร่วมกันได้ของซอฟต์แวร์กับคอมออบเจ็กต์ (COM Object) ดังเช่นที่พบในเทคโนโลยี OLE  ซึ่งการใช้งานต้องลงทะเบียนการควบคุม OLE เช่น แฟ้ม DLL หรือ ActiveX Controls (OCX) การลงทะเบียนการควบคุม OLE จะปรับปรุงข้อมูลรีจิสเตอร์ของระบบปฏิบัติการวินโดวส์พร้อมทั้งต้องระบุถึงที่ตั้งของแฟ้ม เพื่อให้โปรแกรมทำงานอย่างถูกต้องด้วยคำสั่ง regsvr32.exe ซึ่งโดยปรกติแล้วจะถูกเรียกใช้โดยอัตโนมัติเมื่อมีการติดตั้งโปรแกรม
       แนวคิดในการออกแบบของเทคโนโลยี COM จะมีแนวคิดเช่นเดียวกับการสร้างไลบรารี (Library) ทั่วๆ ไป คือ มีแต่ฟังก์ชั่นและส่วนของการทำงานแต่ไม่สามารถทำงานได้ด้วยตัวเอง ต้องคอยให้โปรแกรมเมอร์ที่เรียกใช้เทคโนโลยี COM เป็นผู้รวบรวมองค์ประกอบต่างๆ เข้ากันเป็นแอพพลิเคชั่นอีกทอดหนึ่ง ซึ่งจะเรียกแอพพลิเคชั่นที่สร้างขึ้นว่าไคลเอนต์ (Client) และตัวไฟล์ไบนารีที่เก็บชุดคำสั่งต่างๆ ที่จะถูกเรียกใช้งานจากไคลเอนต์ว่าเซิร์ฟเวอร์ (Server) แต่ข้อแตกต่างระหว่างเทคโนโลยี COM กับ ไลบรารี คือ ไลบรารีจะยึดติดกับตัวภาษาและคำสั่งการทำงานต่าง ๆ จะถูกผนวกรวมเข้าไว้กับไฟล์กระทำการ (Executable file) ทำให้ได้ไฟล์กระทำการที่มีขนาดใหญ่และเปลืองหน่วยความจำมากเกินความจำเป็น

ลักษณะเฉพาะของ COM
•    COM Object ต้องถูกติดตั้งบนคอมพิวเตอร์เครื่องนั้นก่อนจึงจะสามารถนำมาใช้งานได้ดังเช่นการเล่นเกมบนเครื่องคอมพิวเตอร์ต้องมีการติดตั้ง DirectX Runtime ก่อนเสมอ
•    COM Object จะมีลักษณะที่เป็นเอกลักษณ์ที่ไม่ซ้ำกันโดยแทนค่าด้วยชุดตัวเลขขนาดใหญ่เรียกว่า UUIDs หรือ Class IDs
•    COM Object อาจทำงานซ้อนอยู่ในแอพพลิเคชั่นที่เรียก COM Object ใช้งานซึ่งเรียกการทำงานในลักษณะนี้ว่า in-process หรืออาจจะแยกไปทำงานเป็นโปรเซสอื่น หรือทำงานอยู่บนเครื่องคอมพิวเตอร์อื่นตามลักษณะการใช้งาน 
•    โปรแกรมเมอร์หรือผู้ใช้งานสามารถดาวน์โหลดเพื่อนำไปใช้ปรับปรุงการทำงานของโปรแกรมได้โดยทันทีซึ่งทำให้ง่ายในการปรับปรุงซอฟต์แวร์

รูปที่ 1 การปรับปรุงการทำงานซอฟต์แวร์ด้วย COM Technology

       จากตัวอย่างจะเห็นว่าซอฟต์แวร์เวอร์ชัน 2.0 ยังคงมีโค้ดการทำงานภายในเช่นเดิมแต่มีส่วนที่ต่างออกไป คือ ส่วนการจัดการระบบเสียงและเครือข่ายที่มีความสามารถเพิ่มขึ้นโดยการทำงานที่เพิ่มขึ้นนี้ถูกเก็บอยู่ในไฟล์ dll ให้ผู้ใช้ดาวน์โหลดเพื่อปรับปรุงการทำงานของโปรแกรม

COM Object
       คอมออบเจ็กต์ คือ แอพพลิเคชั่นหรือองค์ประกอบใด ๆ ที่ถูกสร้างขึ้นตามมาตรฐานของ COM โดยทั่วไปจะเป็นไฟล์ที่มีนามสกุล .EXE, .OCX, .DLL เป็นต้น คอมออบเจ็กต์มีลักษณะเป็นส่วนประกอบที่เกิดจากการรวมเอาออบเจ็กต์เล็ก ๆ แต่ละตัวที่มีหน้าที่การทำงานในแบบเดียวกันมารวมเข้าไว้ด้วยกัน และเรียกส่วนของออบเจ็กต์เล็ก ๆ เหล่านั้นว่าอินเตอร์เฟส (Interface) ดังที่แสดงไว้ในรูปที่ 2

รูปที่ 2 องค์ประกอบของ COM Object ที่อยู่ภายในไฟล์ DLL

       จากที่กล่าวมาจะเห็นได้ว่า COM ไม่สามารถทำงานได้ด้วยตัวเองเนื่องจากเป็นเพียงการรวมกลุ่มกันของฟังก์ชั่นที่มีหน้าที่การทำงานที่เกี่ยวข้องกันดังที่ได้กล่าวมาก่อนหน้านี้ และถูกจัดเก็บเป็นไฟล์ไบนารี (binary) ซึ่งส่วนใหญ่จะอยู่ในรูปของไฟล์ DLL (*.DLL) ในการติดต่อระหว่างไคลเอนต์และตัว COM Object โปรแกรมเมอร์จะทำงานผ่านทางตัวชี้เพื่อชี้ไปยังฟังก์ชั่นการทำงานภายในของอินเตอร์เฟสนั้น ๆ ด้วยเหตุผลนี้เราจึงสามารถติดต่อกับอินเตอร์เฟสได้โดยไม่ขึ้นกับภาษาที่ใช้พัฒนา

Interface
       อินเตอร์เฟสเป็นการรวมกลุ่มของการประกาศฟังก์ชั่น (function prototype) หรือคำสั่งที่อยู่ภายใน COM ที่บอกถึงลักษณะการใช้งานที่ระบุถึงการกำหนดค่าพารามิเตอร์และการคืนค่าต่าง ๆ ทั้งนี้ทุก ๆ อินเตอร์เฟสที่ถูกสร้างขึ้นมาต้องสืบทอดมาจากคลาสแม่ที่ชื่อ IUnknown เป็นคลาสอินเตอร์เฟสมาตรฐานที่คอยควบคุม COM Object ที่เข้ามาใช้อินเตอร์เฟสต่าง ๆ โดยอินเตอร์เฟส IUnknow จะมีฟังก์ชันการทำงานหรือที่เรียกว่าเมธอดที่เป็นพื้นฐานจำนวน 3 ตัวคือ AddRef(), QueryInterface() และ Release() ดังนั้นอินเตอร์เฟสอื่น ๆ ที่สืบทอดไปจึงมีเมธอดทั้ง 3 นี้ด้วยเสมอ ฟังก์ชั่นที่นำมารวมกลุ่มกันภายในอินเตอร์เฟสจะมีการทำงานที่เกี่ยวข้องกันเป็นกลุ่ม ๆ และในกรณีที่มีการสืบทอดอินเตอร์เฟสตัวอินเตอร์เฟสใหม่ที่สร้างขึ้นมาไม่จำเป็นต้องอ้างถึงฟังก์ชั่นที่มีอยู่ในคลาสของอินเตอร์เฟสแม่ทั้งหมด เช่นเดียวกับหลักการของการสืบทอดคลาสและไม่ควรทำการสร้างอินเตอร์เฟสตัวใหม่แทนที่อินเตอร์เฟสตัวเก่า หากต้องการปรับปรุงการทำงานของอินเตอร์เฟสใด  ผู้สร้างต้องทำโดยการกำหนดชื่อใหม่เท่านั้น ทั้งนี้เพราะต้องการให้อินเตอร์เฟสที่ถูกสร้างขึ้นใหม่นี้ยังคงทำงานได้กับโปรแกรมที่เรียกใช้งานอินเตอร์เฟสชุดเก่าได้ตัวอย่างเช่นใน DirectX เวอร์ชันต่าง ๆ การประกาศใช้อินเตอร์เฟสของ DirectX 8 จะเป็น ID3DX8 ในขณะเดียวกันหากเป็น DirectX9 จะเป็น ID3DX9 เป็นต้น หมายความว่าเกมเก่า ๆ ที่ใช้ DirectX 8 จะยังคงสามารถทำงานได้แม้ว่าไมโครซอฟต์จะออกเวอร์ชันใหม่กว่าก็ตามเนื่องจากในการสร้าง COM Object นั้นจะทำการสร้างอินเตอร์เฟสใหม่เพิ่มเติมโดยคงชุดคำสั่งของเก่าไว้ใน COM Object เช่นเดิม 

รูปที่ 3 ลักษณะความสัมพันธ์ระหว่าง DirectX Object และอินเตอร์เฟส

       จากรูปที่ 3 COM Object หรือ Component เปรียบเสมือนกล่องควบคุมการทำงานที่มีช่องให้เสียบหลาย ๆ ช่อง แต่ละช่องเปรียบเสมือนอินเตอร์เฟส โดยแต่ละอินเตอร์เฟสจะมีหน้าที่การทำงานหรือเมธอด (Method) เฉพาะของตัวเองเมื่อนำเอา DirectX Object (ตัวชี้ของอินเตอร์เฟส) ซึ่งในรูปนี้จะเปรียบเสมือนเป็นตัวแจ๊คที่นำเข้าไปเสียบที่ช่องอินเตอร์เฟสใดจะทำให้สามารถเรียกใช้งานเมธอดในอินเตอร์เฟสนั้นได้ ดังนั้นหากต้องการใช้หน้าที่การทำงานอื่นๆ ที่ไม่มีอยู่ในอินเตอร์เฟสที่เสียบอยู่ให้ทำการหาแจ๊คอื่นมาเสียบเพิ่ม และเมื่อเลิกใช้อินเตอร์เฟสใดผู้ใช้งานจำเป็นต้องต้องถอดแจ๊คนั้นออกซึ่งเปรียบเสมือนการคืนหน่วยความจำให้กับระบบนั่นเอง
       การใช้งานออบเจ็กต์ต่าง ๆ ที่อยู่ภายในอินเตอร์เฟสหมายถึงการเขียนโปรแกรมโดยอาศัยตัวชี้ติดต่อกับอินเตอร์เฟสนั้น ๆ เพื่อทำให้สามารถนำฟังก์ชั่นการทำงานของอินเตอร์เฟสมาใช้งานได้ โดยนำมาจากไฟล์ไบนารีของ COM (เช่นไฟล์ DLL) จึงทำให้มีการร้องขอตัวชี้จากอินเตอร์เฟสได้โดยไม่สนใจว่าไคลเอนต์นั้นจะทำงานอยู่ภายในหรือนอกโปรเซสเดียวกันกับโปรเซสหลักที่ใช้ COM Object ดังเช่นที่ Microsoft Word สามารถคัดลอกตารางที่มีอยู่ใน Microsoft Excel ที่เปิดอยู่ได้นั่นเอง ในที่นี้ Microsoft Excel เป็นโปรเซสหลักที่เรียกใช้ COM Object ของการสร้างตารางและ Microsoft Word เป็นโปรเซสที่ไม่เกี่ยวข้องกับโปรเซสหลักแต่สามารถเรียกใช้การจัดการตารางได้เช่นเดียวกับที่โปรเซสหลักใช้งานอยู่โดยทำงานผ่านทางไฟล์ไบนารีของ COM 
       เนื่องจาก COM Object ประกอบไปด้วยอินเตอร์เฟสจำนวนมากและทุกอินเตอร์เฟสจะมีการกำหนดหมายเลขเอกลักษณ์ของตนเองที่เรียกว่า GUID เพื่อป้องกันความซ้ำซ้อนที่อาจเกิดขึ้นได้จากการกำหนดชื่อของออบเจ็กต์แต่เพียงอย่างเดียวค่าของ GUID จะประกอบไปด้วยชนิดข้อมูลที่มีลักษณะเป็นกลุ่มตัวอักษรใช้ในการอธิบายถึงหมายเลขของอินเตอร์เฟสซึ่งตัว COM จะทำการเปลี่ยนข้อมูลสตริงที่ได้นี้ให้อยู่ในรูปแบบของ Class ID ที่ถูกต้อง โดยที่ตัวอักษรทั้งหมดจะเป็นตัวพิมพ์ใหญ่จำนวน 32 ตัวโดยมีรูปแบบของ GUID ดังนี้ {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} เมื่อ X คือค่าตัวเลขที่เป็นไปได้ในระบบตัวเลขฐานสิบหก (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) เช่น 6B29FC40-CA47-1067-B31D-00DD010662DA เป็นต้น

<< ย้อนกลับ