الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حول تكنولوجيا COM

مغلق
بدأه إسماعيل ابراهيم في 17 نوفمبر 2002 · 24 رد · 5,292 مشاهدة · في قسم المواضيع الهامة في قسم السي /سي++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم!

لدي سؤال يقف حائلا بيني وبين اتقان فيجيوال سي++ وهو حوال ال Component Object Model - والسؤال هو حول تعريف هذا "الشيء" في الحقيقة قرأت كتابين حول الفيجيوال سي++ وفي كلا الكتابين يبدأ شرح هذه التكنولوجيا بصورة فظيعة دون وضع تعريف واضح لها ما اعرفه هو انها "قطع" من البرامج تستخدم في اكثر من برنامج (يعاد استخدامها), لكن هذا التعريف غير واف ولم يشبع عقلي.. لهذا ارجو ممن هو خبير في هذا المجال ان يشرح لي بابسط لغة عربية ممكنه وباسهل الطرق والتشبيهات ما هو الـ Component Object Model , وما فوائده وهل يمكن الاستغناء عنه .... وان امكن (يا ريت) مثال على بناء اصغر Component Object Model في العالم مع خطوات البناء والكود.

ارجو ان يكون الجواب منكم وليس توجيهي الى موقع ما....

وشكرا سلفا..............................(f)

الرجاء فهذا ليس سؤال بل مساعدة حقيقية وضرورية.

#2

وااااااااااااو .. موضوع رائع وحلو جدا أن نبدأ بالشرح عن هكذا موضوع .. فعلا موضوع ال COM هو من أصعب المواضيع في الفجوال سي++ لأنه متشعب جدا ويحتاج إلى خبرة في السي++ ..

من أجل اتقانها أنت تحتاج إلى قرائة كتاب مختص عن تقنية ال COM ..

ال COM في عالم هندسة البرمجيات تجمع بين المصطلحين :

Polymorphism: وهي امكانية الوصول إلى الكائن الحقيقي عن طريق معرفة مؤشر لكائن أب . وهي تماما كما في ال virtual في السي++

Proxy: وهي امكانية الوصول إلى الكائن بغض النظر عن توضعه الفيزيائي فقد يكون في process آخر أو في جهاز آخر او حتى في شبك أخرى ..

ببساطة ال COM صنعت من أجل المفهومين السابقين طبعا مع مفاهيم أخرى مثل ال Reuse و ال Encapsulation ولكن هذه كلها مفاهيم تنطبق على كلاسات . بعض المفاهيم الأخرى التي يجب أن تتواجد في COM هي ال Reference Counting وال Class Factory .. وسوف نتطرق لها لاحقا ..

ببساطة تصور أنك صنعت class ووضعته في مكتبه خارجية .. هذا الكلاس يحتوي على توابع ثابتة .. ولديك طبعا برنامج يقوم باستدعاء هذه التوابع بعد أن يطلب بناء كائن لها (عملية البناء تتم عن طريق ال class factory الذي يجب بنائه مع ال class السابق) أي أنك لن تستدعي new من أجل بناء كائن لك ..

الآن ماذا لو أحببت تغيير الكود للclass الموجود في مكتبة خارجية فما عليك سوا اعادة ترجمة المكتبة ونسخها فوق القديمة ليستمر البرنامج بالعمل على الكود الجديد من غير أن يجس أي فرق .. أما لو كانة هذه ال class موجودة داخل برنامجك فالأمر يقتضي عملية ترجمة كاملة للبرنامج .. وهذا أمر لا نريده في معظم الأحيان :)

توجد عدة طرق من أجل بناء COM في السي++ ويفضل أن نبدأ ببنائها من الصفر باستخدام كود سي++ ومن بعدها نقوم باستخدام ال ATL ..

المرة القادمة سوف أشرح عن بنية ال COM في السي++ وكيف بنائها باحدى الطرق .. :)

Coding on the Cloud and for the Cloud!

My Blog

#3

الف شكر أخي هاني.... بالفعل انا شاكر جدا لهذا الرد ومنتظر التكملة لكن يا ريت توضحلي أكثر معنى الـcom لأني لا افهم شيء ولا اتقدم اذا ما كان التعريف واضح وانت بدأت في شرح اهدافها ولم تضع تعريفا لها... ارجوك بدون تعريف واضح يصعب علي التقدم...

وهل لك ان توضح لي مفهوم Proxy.

والف الف شكر وفي انتظار التكملة وانا ممنون جدا

#4

آسف أنا إذا كنت متحمس لموضوع بدخل من نصو وبنسى أولو .. طيب :

قبل أن تطرق لمعنى COM يجب أن تعرف ما هو ال Component . ما معنى كلمة Component : هي عبارة عن قطعة برمجية تقوم بعمل ما، وأي برنامج يستطبع استخداك هذا الكومبوننت. ومن ميزت ال component أنها متضمنة لجميع أعمالها داخليا وبالتالي من السهر تغييرها.. الفكرة طبعا رائعة ، لأنها تسمح لك بكتابة component مرة واحدة واستخدامها أكثر من مرة في برامج مختلفة. ومن ثم يمكنك تحسين هذه ال component فقط عن طريق تطوير الكود ووضعها محل السابقة. ولكن من أجل أن يعمل هذا بشكل صحيح يجب أن تكون هناك مقاييس معينة من أجل أن تعرف البرامج كيف يمكن أن تنشئ ال component وكيف يمكن استدعائها وغير ذلك من الأمور .

بالنسبة إلى COM كما تعلم هي Component Object Model .. وهي عبارة مقياس وضعته ميكروسوفت من أجل بناء ال components .. إذا COM هي عبارة فقط عن مواصفات من أجل بناء قطعة من الكود متوافقة. هذا يعني أن COM هي ليست لغة برمجة أو مكتبة library أو حتى مترجم :) .. لكن هي تمنحك موصفات ثابتة من أجل بناء components تستطيع أن تتحدث مع بعضها بغض النظر عن اللغة التي تم تطويرها بها ..

بالمختصر .. COM عبارة عن قوانين وإذا اتبعت هذه القوانين في بنائك لاحدى ال components فسوف تستطيع هذه أن تعمل مع باقي ال COM Components بغض النظر عن اللغة المبرمجة بها ..

قد تتخربط بين مفهوم COM و Static Library : الوضع هنا مختلف لأن ال static library تحتاج إلى اعادة ترجمة مشروعك عند تغيير المكتبة ..

ماذا عن COM و Dynamic Library : هنا المفهوم متقارب حتى أن COM في النهاية تنتج لك ملفات DLL أو EXE لكن الفرق بينهما أن COM تقوم بتعريف مواصفات ثابتة من أجل تطوير ال component .. طبعا إذا أردت أن تعمل قطعة من برنامجك adabtable بحيث فقط تعمل معك فالأسل صنعها عن طريق Synamic Library ..

مفهوم ال Proxy .. هو ماتتميز به COM أيضا .. كما تعلم من أجل استدعاء تابع في مكتبة ديناميكية فأنت تستدعي LoadLibrary وهذا الAPI يقوم بتحميل المكتبة في نفس ال Process وبعدها تستطيع استخدامها .. لكن ال COM ممكن أن تعمل بغض النظر عن توضعها فقد تكون في نفس ال Process أو في Process آخر أو حتى في جهاز آخر .. وال COM Engine مسؤولة عن عملية نقل الاستدعاء من موقع إلى آخر بشمل شفاف .. أي أن المستدعي لن يعرف أين تتوضع الcomponent التي يستدعيها .. هذه العملية تتم أن ال COM Engine تقوم بانشاء كود اسمه Stub و كود اسمه Proxy يتخاطبان مع بعضهما ..

الكلام هنا يطول وسوف أرجع له مرة أخرى ..

Coding on the Cloud and for the Cloud!

My Blog

#5

فعلا الموضوع رائع ومن زمان مستنيين مثل هيك مواضيع في المنتدى فقد مللنا البحث في المنتديات الأجنبية وأرجوا التطرق الى ال shell programming اذا ما فيه مانع

ومشكورين شباب (f)

وفي انتظار التكملة

#6

شكرا جزيلا الان فقط عرفت معنى الـ COM لا اعرف كيف اشكرك اخ هاني...

في انتظار المزيد عن هذا الموضوع....

اكرر شكري لك أخ هاني.(f) (f) (gift)

محمد.. كيف حالك..(f).. وين الغيبة :)

#7

السلام عليكم

الذي فهمت من كلام الاخ هاني

ان الـ COM هي شبيهه بمكتبه فيها دوال معينه استطيع الاستفاده منها بعد صنعها في اي برنامج

هل الـ OCX تعتبر مثلها .

وهل يمكن ان يضع الانسان معادلة معينه في COM كانها دالة ويستدعيها من برنامجه

شكرا

#8

السلام عليكم ,,

طبعا يمكن ,, com عبارة عن مكون به واجهة أو عدة واجهات ,, كل واجهة تطبق دالة أو عدة دوال ,, بس ,,

في النهاية يمكن استدعاء الدوال التي بها بكل يسر وسهولة ,,

أخيرا ال OCX هو نوع خاص من ال COM كما توقعت أنت ,, فهي مكونات com تطبق الواجهة IDispatch "للتوافقية بين اللغات" وعدة واجهات أخرى ,, ولديها UI User Interface ,, وبها طبعا واجهات تكتبها أنت ودوال في هذه الواجهات ,,

خذ الرابط تحدثت فيه قبل يومين عن هذا الموضوع ,,

/index.php?showtopic=45410

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#9

للرفع والفائدة

#10

شكرا يا أخ إسماعيل إبراهيم لرفع هذه المقالة الجميلة فقد كنت أبحث عن أي شيء له علاقة بCOM فعلا

لدي كتاب عن COM قمت برفعه و هذا رابطه http://rapidshare.de/files/14250810/COM__P...nd_Atl.zip.html

أرجو أن ترفع بعض الكتب التي لديك عن هذا الموضوع لأنها فعلا أصبحت نادرة و صعب وجودها خاصة بعد ظهور .NET

#11

انارة جيدة انار الله دربك

#12

هذا كتاب Inside COM+ Base Services : كما ترى هو عن +COM

0735607281L.gif

الملف مرفق

لا أدري لماذا لم يُرفق الملف!!

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 27 فبراير 2006 في 19:15

#13

شكرا يا أخ إسماعيل

يمكن رفعه مثلا في أحد المواقع مثل http://www.rapidshare.de/ ووضع الرابط الذي يعطيه الموقع هنا فقد يكون الكتاب تجاوز الحد الأقصى للحجم المسموح به في المرفقات مثلا

#14

و ماذا فيما يتعلق بال ActiveX Control ؟؟؟

#16

جزاك الله خيرا الكتاب تمام

بالنسبة للأخ ROOT فيجب عليك تعلم COM أولا ثم ATL و الكتاب الذي وضعته بالأعلى يتكلم عن الإثنين ثم يمكنك تعلم MFC و إنشاء أدوات ActiveX

#17

لي طلب بسيط .........

لكل من يجب رفع الكتب ليفيد الجميع ... الرجاء عـدم رفعها إلى موقع رابيد ..... أو ميجا أبلوب ... لأن الموقعين كلاهـما لا يسمحان لمن في السعـودية بالتحميل (الأول لتشابه أرقام الآي بي والآخر لأنه محجوب أصلاً) ....

أشد ما أكرهه أن يكون الكتاب أمامي ولا أستطيع تحميله :unsure:

#18
Sultan_Althibity كتب:
لي طلب بسيط .........

لكل من يجب رفع الكتب ليفيد الجميع ... الرجاء عـدم رفعها إلى موقع رابيد ..... أو ميجا أبلوب ... لأن الموقعين كلاهـما لا يسمحان لمن في السعـودية بالتحميل (الأول لتشابه أرقام الآي بي والآخر لأنه محجوب أصلاً) ....

أشد ما أكرهه أن يكون الكتاب أمامي ولا أستطيع تحميله  :unsure:

سبحان الله نفس القصة :D

#19

طيب دلونا على بديل نرفع عليه الكتاب :)

#20

جرب هذا الموقع:

https://www.box.net/signup

تم تعديل هذه المشاركة بواسطة Sultan_Althibity في 28 فبراير 2006 في 14:02

#21

لقد سجلت في الموقع بحساب

Usama707@Hotmail.com

و كلمة المرور هي : password

و رفعت كتاب COM+ Programming - A Practical Guide Using Visual C++ And Atl في مجلد أنشأته أسميته COM

ولا تزعل يا أبو السلاطين أنت و bms:)

أي شخص يريد أن ينزل الكتاب ما عليه إلا أن يقوم بالدخول إلى هذا الموقع بالبيانات التي بالأعلى و تحميل الكتاب و قد أقوم بوضع بعض الكتب الأخرى

تم تعديل هذه المشاركة بواسطة usama707 في 28 فبراير 2006 في 14:24

#22
إسماعيل ابراهيم كتب:
طيب دلونا على بديل نرفع عليه الكتاب :)

وجرب أيضا:

http://www.4shared.com

4shared is your Free Virtual Drive with 500Mb online storage space. 4shared offers you the easy and fast way to store your files, access them from anywhere at anytime and share them with your friends and people all over the world.

فكر بطريقة أخرى

#23

شكراً جزيلاً أخي أسامـة .........

ولكن لا أستطيع الدخول للحساب ... أظن أن المشكلة من كلمة المرور ....

بإمكانك وضع الرابط مباشرةً

شكراً مرة أخرى

#24

إكتشفت السبب

غالبا لأني أدخلت الإيميل ك : Usama707@hotmail.com

لاحظ أن الU is Captial

لذا يجب أن تدخل الإيميل كما هو بالأعلى بالظبط و ليس usama707@hotmail.com

#25

شكراً حالياً أقوم بتنزيل الكتاب

هذا الموضوع مغلق.

مواضيع مشابهة