สถานที่ที่ดีที่สุดในการเรียนรู้แบบจำลองวัตถุแบบวัตถุ [ปิด]


13

ฉันต้องเรียนรู้ COM สำหรับโครงการปัจจุบันของฉัน ฉันเป็น noob และฉันไม่สามารถหาจุดเริ่มต้นที่ดีสำหรับ COM ได้ ฉันกำลังดูใน MSDN และ googling ... ฉันพบบทความที่น่าสนใจใน codeproject.com แต่ฉันไม่พอใจ ทำไมเราถึงใช้ COM ทำไมมันมีอยู่? มีสถานที่ใดบ้าง? ..... และอื่น ๆ .. ดังนั้นคุณจะโปรดบอกฉันฉันจะหาคำตอบสำหรับคำถามเหล่านี้ได้จากที่ไหน


3
ทำไมเราถึงใช้ COM ส่วนใหญ่เราพยายามที่จะไม่ มีสถานที่ใดบ้าง? รหัสเบสแบบเจ็บปวดโดยทั่วไป
Carson63000

@carson actully ฉันกำลังพัฒนาซอฟต์แวร์การตรวจสอบที่ฉันต้องการดึงค่าของวัตถุ "COM" ดังนั้น Quest ใหม่ที่พบ ..
Chani

1
ถ้าฉันจำได้ถูกต้องมีบทความ 3 บทความเกี่ยวกับ COM ที่ดีที่สุด 2 รายการอยู่ใน MSDN (บางบทความในนิตยสารเก่า) และอีก 1 รายการเกี่ยวกับ CodeProject ... เห็นได้ชัดว่ามีบทความอื่น ๆ อีกนับร้อยรายการ (และขอขอบคุณ Google ที่ส่งคืนเฉพาะไซต์ใน ".com" TLD เมื่อฉันค้นหา "COM" ... )
rwong

@ Carson63000 จริงอยู่ที่เจ็บ ... จะไปร้องไห้ที่มุมห้องเดี๋ยวนี้
Evicatos

คำตอบ:


18
  • ประการแรก COM ก็เหมือนกับการเขียนโปรแกรมเชิงวัตถุ COM interface เป็นรูปแบบนามธรรม
  • COM มีข้อได้เปรียบเหนือ OOP ในตัวของแต่ละภาษาซึ่งคุณสามารถใช้คลาส COM ในภาษาที่แตกต่างกันและ / หรือรวบรวมโดยคอมไพเลอร์เวอร์ชันต่าง ๆ และพวกเขาจะยังสามารถใช้งานได้ สิ่งนี้เรียกว่า "application binary interface" (ABI)
  • COM ใช้การนับการอ้างอิง มันอาจจะน่ารำคาญในตอนแรก แต่ทันทีที่คุณเรียนรู้เกี่ยวกับพอยน์เตอร์อัจฉริยะชีวิตของคุณจะง่ายขึ้นมากและคุณจะพบว่าแนวคิดของการนับการอ้างอิงนั้นง่ายต่อการเข้าใจ
  • COM ใช้วิธีการคัดเลือกคลาสที่แปลกประหลาดคือ "ส่วนต่อประสาน Query"

การเรียนรู้IUnknownเป็นขั้นตอนแรก

ส่วนต่อประสาน COM ที่ดีที่เหมาะสำหรับการเริ่มต้นศึกษาคือส่วนต่อประสาน IStream คุณสามารถฝึก COM ได้โดยใช้อินเทอร์เฟซ IStream โดยใช้วิธีการเก็บข้อมูลที่หลากหลาย


เพิ่ม 2012/09/28:

หลังจากที่คิดค้นกลไก COM ผู้คนที่ Microsoft ค้นพบว่ากลไกเหล่านี้เปิดประตูสู่เทคนิคการเขียนโปรแกรมที่ผิดปกติซึ่งไม่ใช่ OOP ดั้งเดิม ในระดับต่ำสุดIUnknown.QueryInterfaceเป็นเพียงวิธีการ มันสามารถทำอะไรก็ได้ เทคนิคเหล่านี้ทำให้ COM น่ากลัวสำหรับผู้เรียนเนื่องจากพวกเขาสามารถทำให้เหตุผลพื้นฐานที่สามารถยืมได้จาก OOP

เอกสาร Microsoft ที่ MSDN ใช้เวลาส่วนใหญ่พูดว่า "COM is not ... " หรือ "Make no สมมติฐาน" อธิบายว่าเทคนิคที่ผิดปกติเหล่านี้สามารถทำลายรหัสของคุณได้อย่างไร

นักออกแบบ COM ใช้หลักการแทน Liskov ("L" ในSOLID ) เพื่อให้แน่ใจว่าอินเทอร์เฟซหลายตัวและการใช้ลูกเล่นไม่ทำให้การใช้เหตุผล OOP ขั้นพื้นฐานหรือการทำงานของโปรแกรมเป็นโมฆะ

หากโครงการของคุณไม่ได้ใช้เทคนิคเหล่านี้มันก็โอเคที่จะเห็น COM เพียงแค่จากมุมมอง OOP หากโครงการของคุณใช้เทคนิคเหล่านี้คุณจะต้องเห็น COM เป็นรหัสที่แก้ไขด้วยตนเอง

(โจ๊ก: เราต้องใช้เวลามากกับ L โดยปกติแล้วเราจะเพิกเฉยต่อหลักการสี่ข้ออื่น ๆ )


9

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

สิ่งที่ต้องจำเมื่อเรียนรู้ COM คือในเวลา C ++ เป็นราชาและแอปพลิเคชันที่เรียกว่า dll ใช้ C ไม่พบ ABI ทั่วไป (ตามที่ @rwong พูดว่า) และ COM เป็นโซลูชันของไมโครซอฟท์

อาจคุ้มค่าที่จะดู Active Template Library (ATL) สำหรับ visual studio ซึ่งทำให้การใช้ COM นั้นง่ายขึ้นเช่นกัน

ฉันพบหนังสือสองสามเล่มที่มีประโยชน์ในตอนกลางวัน

http://www.amazon.com/Essential-COM-Don-Box/dp/0201634465/ref=sr_1_1?ie=UTF8&qid=1304946825&sr=8-1

http://www.amazon.com/Understanding-ActiveX-OLE-Developers-Technology/dp/1572312165/ref=pd_sim_b_4

HTH


7

ตอนแรกฉันเรียนรู้เกี่ยวกับ COM จากหนังสือLearning DCOM (DCOM เป็นเพียงส่วนขยายของ COM หนังสือส่วนใหญ่เกี่ยวกับ COM) มันมีอายุเกินสิบปีและควรจะถูกถ้าคุณใช้มัน (เนื่องจาก COM ไม่ร้อนอีกต่อไปไม่แม้แต่ในโลก Microsoft แม้จะยังคงใช้สำหรับการเชื่อมต่อ)

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

ระบบมีการรองรับคุณสมบัติบางอย่างที่ยอดเยี่ยมก่อนที่ทุกอย่างจะถูกจัดการ (เช่นการนับการอ้างอิงและการอธิบายตนเอง (ผ่าน IDispatch))


5

COM เป็นมาตรฐานที่สร้างขึ้นใน 90's เพื่อให้ชิ้นส่วนซอฟต์แวร์ที่แตกต่างกันสามารถพูดคุยกันได้ ที่สำคัญที่สุดคือมาตรฐานไบนารีที่อนุญาตให้ซอฟต์แวร์หนึ่งชิ้นสร้างหรือผูกกับวัตถุแล้วเรียกใช้อินเทอร์เฟซนั้น สิ่งนี้ช่วยให้คุณทำสิ่งต่าง ๆ เช่นสร้าง DLL ใน C ++ ซึ่งสามารถเรียกได้โดยเพจ ASP (วัตถุ COM) หรือสร้างตัวควบคุมใน Delphi ซึ่งคุณสามารถใส่ลงในกล่องโต้ตอบ VB (ตัวควบคุม ActiveX) หรือแผ่นงาน Excel เมื่อคุณวางรูปภาพลงใน Word ก็ใช้ COM ด้วยเช่นกันการฝังแอปพลิเคชันแยกเป็นคำ ความนิยมน้อยกว่าคือ DCOM ซึ่งเรียกวัตถุระยะไกลมักจะมีวิธีที่ง่ายกว่าในการทำเช่นนี้

Com / ActiveX / DCOM เป็นที่นิยมมากเมื่อ 10 ปีที่แล้วกับ VB, VBA, C ++ / ATL, Delphi Dotnet นั้นง่ายกว่ามากและ C # ได้เปลี่ยนการใช้ COM และ VB เป็นส่วนใหญ่

ยังมีอินเทอร์เฟซ COM จำนวนมากที่มีอยู่ซึ่งคุณอาจต้องการโทรจากแอพพลิเคชั่น dotnet หรือ Java หรือ C ++ (คุณไม่ได้พูด)

หากคุณต้องการเรียก COM อินเตอร์เฟส VB เป็นวิธีที่ง่ายที่สุดในการทำเช่นนี้ ใน Dotnet 4.0 C # มีคีย์เวิร์ดแบบไดนามิกซึ่งทำให้การเรียกใช้ IDispatch อินเทอร์เฟซง่ายขึ้นซึ่งน่าจะเป็นทางออกที่ดีที่คุณควรดู

หากคุณต้องการทราบรายละเอียดมากมายคุณต้องใช้ C ++ และ ATL จริงๆเรียก C APIs เช่น CoCreateInstance หลีกเลี่ยงสิ่งนี้หากคุณสามารถใช้เทคโนโลยีเก่าและไม่ใช้งานได้มากให้ทำตามคำแนะนำด้านบน

ฉันไม่แน่ใจว่าคุณกำลังตรวจสอบซอฟต์แวร์ตัวใด แต่มีแนวโน้มว่าจะสามารถใช้งานได้ผ่านคลาส System.Management ใน dotnet


2

ต่อไปนี้อาจเป็นประโยชน์ในภาพรวม COM:

วิดีโอแรกพูดถึงแนวคิดทั่วไปของการสร้างส่วนประกอบไบนารีเพื่อนำรหัสที่เขียนในภาษาต่าง ๆ (ภาษา - อิสระ) มาใช้ใหม่และอยู่ในเครื่องต่าง ๆ (กระบวนการ) (ตำแหน่งอิสระ / โปร่งใส) เทคโนโลยีนี้ใช้ใน บริษัท ซอฟต์แวร์บางแห่งเพื่อรวมเข้ากับซอฟต์แวร์อื่น ๆ (บริษัท ) แทนที่จะซื้อซอฟต์แวร์และฝังไว้ในซอฟต์แวร์ของตนเองหรือเขียนรหัสจากศูนย์ในระบบของพวกเขา

เทคโนโลยีนี้มีสามเวอร์ชันที่แตกต่างกัน (implementtaions):

OLE / COM / DCOM / ActiveX สำหรับนักพัฒนา C ++ (ใช้ ATL เพื่อทำให้งานโปรแกรมเมอร์ง่ายขึ้น)

JavaBeans / RMI / EJB สำหรับนักพัฒนา Java

CORBA / IIOP

แค่คิดว่ามันเป็นเทคโนโลยีที่มีประโยชน์เมื่อคุณเขียนซอฟต์แวร์ของคุณใน Java และคุณต้องการเพิ่มฟังก์ชันการทำงานที่มีอยู่แล้วในแพ็คเกจ แต่มันเขียนใน C ++ และบางทีอาจจะอยู่ในเครื่องที่แตกต่างกัน เครื่องท้องถิ่นของคุณ คุณเรียก "ใหม่" อย่างไรคุณสร้างวัตถุและวิธีการโทรจากพวกเขาได้อย่างไร

หนังสือต่อไปนี้ที่ฉันได้เห็นคนที่ใช้การเข้ารหัส COM มีหนังสือเล่มใดเล่มหนึ่งในชั้นหนังสือ:

  • การประชุมเชิงปฏิบัติการของนักพัฒนาเพื่อ COM และ ATL 3.0

  • ภายในคอม

  • Essential COM

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.