اقتران (حاسوب)

في علم الحاسوب، **الاقتران** أو **الاعتماد** هو الدرجة التي إليها تعتمد وحدة البرنامج على وحدات أخرى مع بعضها البعض. وعادة ما يتناقض التقارن مع الاتساق وغالبا ما يرتبط التقارن المنخفض بالاتساق المرتفع، والعكس صحيح. وقد تم اختراع [قياس خواص البرمجية] عن طريق [لاري قسطنتين]، وهو مطور مبتكر للتصميم المركب والذي كان أيضا أول نصير لهذه المفاهيم (انظر أيضا [طريقة تصميم وتحليل النظم المركبة]). وغالبا ما يكون التقارن المنخفض علامة حاسوب مركب بشكل جيد وعلامة لتصميم جيد، وعند الجمع بينه وبين الاتساق المرتفع، فهو يدعم الأهداف العامة للمقروئية العالية وسهولة الصيانة.
## أنواع التقارن
تصغير|300بك|يسار|upright=2.0|Conceptual model of coupling
يمكن للتقارن أن يكون «منخفضا» (انظر أيضا «رخوا» و«ضعيفا») أو «مرتفعا» (انظر أيضا «ضيق» و«قوي»).
وبعض أنواع التقارن، بالترتيب من التقارن الأعلى إلي الأدنى، هي كالتالي:
### تقارن المحتوى (مرتفع)
ويكون تقارن المحتوى عندما تعدل وحدة برنامج أو تعتمد على الأعمال الداخلية لوحدة برنامج أخرى (مثلا، الدخول إلي بيانات خاصة بوحدة برنامج أخرى).
وبالتالي، فإن تغيير الطريقة التي تنتج بها وحدة البرنامج الثانية البيانات (الموقع، النوع، التوقيت) سوف يؤدي إلي تغيير الوحدة التابعة.
### تقارن شائع
ويكون التقارن الشائع عندما تتقاسم وحدتان للبرامج نفس البيانات الإجمالية (مثل المتغير العام).
وتغيير المورد المشترك يتضمن تغيير كل الوحدات التي تستخدمه.
### تقارن خارجي
ويحدث التقارن الخارجي عندما تتقاسم وحدتان صيغة البيانات المفروضة من الخارج، وبروتوكول الاتصال، أو الوصلة البينية للجهاز.

### تقارن التحكم
وتقارن التحكم هو تحكم وحدة في تدفق وحدة أخرى، من خلال تمرير معلومات لها لما عليها أن تفعله (مثلا، تمريرwhat-to-do flag).
### تقارن الطابع (تقارن مركب البيانات)
ويكون تقارن الطابع عندما تتقاسم وحدتان هيكل بيانات مركبة وتستخدم فقط جزء منه، ربما جزء مختلفا (مثل تمرير سجل كامل لوظيفة تحتاج فقط خانة واحدة منه).

### تقارن البيانات
ويكون تقارن البيانات عدما تتقاسم وحدتان البيانات من خلال مثلا، قيمة وسيطة parameters. فكل جزء من البيانات هو أساسي، وهذه هي البيانات المشتركة فقط (مثلا، تمرير عدد صحيح لوظيفة تحسب جذرا تربيعي).

### تقارن الرسالة (منخفض)
وهذا هو النوع الأضعف للتقارن. فيمكن تحقيقه من خلال حالة اللامركزية (كما في المواضيع) ويتم اتصال المكون عبر قيمة وسيطة parameters أو تمرير رسالة (انظر أيضا تمرير رسالة)
### لا تقارن
لا تتواصل الوحدات على الإطلاق مع بعضها البعض.
## البرمجة المتوجهة صوب الهدف
### تقارن فرعي
يصف العلاقة بين طفل ووالده. فالطفل متعلق بوالده، لكن والده غير متعلق بالطفل.
### تقارن مؤقت
عندما يتم ربط فعلين معا في وحدة برنامج واحدة فقط لأنهما يحدثان بالصدفة في نفس الوقت.
## العيوب
تميل الأنظمة المتقارنة إلي إظهار الخصائص التطورية الآتية، والتي في الغالب تعتبر عيوبا:
* التغيير في وحدة برنامج واحدة عادة ما يؤدي إلي تأثير منتشر للتغييرات في الوحدات الأخرى.
* تجمع الوحدات ربما يتطلب مجهودا أكبر أو وقتا أطول بسبب الاعتماد الزائد بين الوحدات.
* ربما تكون وحدة برنامج صعبة في إعادة الاستخدام أو الاختبار لأنه يجب إدراج الوحدات التابعة.
## قضايا الأداء
سواء كان التقارن قويا أو ضعيفا، فغالبا ما ينخفض أداء النظام عن طريق إنشاء رسالة أو قيمة وسيطة، أو إرسال، أو تكاليف overhead ترجمة وتفسير. انظر أيضا برمجة قائمة على الحدث.
### تكاليف إنشاء رسالة والأداء
ولأن كل الرسائل والقيم الوسيطة يجب أن يكون لها معاني مستعملة (أي تتسبب في تدفق منطقي مقصود داخل جهاز الاستقبال)، فلا بد من إنشائها وتكوينها مع معني معين. وإنشاء أي نوع من الرسائل يتطلب تكلفة غير مباشرة سواء في وحدة المعالجة المركزية أو استخدام الذاكرة. وإنشاء رسالة قيمة عدد صحيح واحدة (والتي ربما تكون مرجعا لخيط أو حشد من [البيانات الهيكلية]) يتطلب تكاليف أقل من إنشاء رسالة معقدة مثل رسالة SOAP. والرسائل الأطول تتطلب وحدة معالجة مركزية أكبر وذاكرة من أجل الإنتاج. ومن أجل تحسين زمن تشغيل الأداء، فلابد من تخفيض طول الرسالة وزيادة معنى الرسالة.
### تكاليف بث الرسالة والأداء
ولأن الرسالة لابد من بثها بالكامل لكي تحتفظ بمعناها الكامل، فلابد أن يكون بث الرسالة على أعلى درجة من الكفاءة. والرسائل الأطول تتطلب مزيدا من وحدة المعالجة المركزية وذاكرة من أجل الإرسال والاستقبال. وأيضا، إذا لزم الأمر، يجب أن تعيد أجهزة الاستقبال تجميع الرسالة في حالتها الأصلية من أجل استلامها بشكل كامل. ومن ثم، فمن أجل تحسين زمن تشغيل الأداء، فلابد من تخفيض طول الرسالة وزيادة معنى الرسالة.
### تكاليف ترجمة الرسالة والأداء
غالبا ما تحتوي بروتوكولات الرسالة والرسائل ذاتها على معلومات إضافية (أي حزمة، هيكل، تعريف، ومعلومات لغة). ومن ثم، فغالبا ما يحتاج جهاز الاستقبال إلي ترجمة الرسالة إلي صيغة أكثر صقلا من خلال إزالة الحروف الزائدة ومعلومات الهيكل أو من خلال تحويل القيم من نوع إلي أخر. وأي نوع من الترجمة يزيد من تكاليف وحدة المعالجة المركزية والذاكرة. ومن أجل تحسين الأداء الزمني، فيجب تخفيض صيغة ومحتوى الرسالة وصقلهما من أجل زيادة معناها وخفض الترجمة.
### تكاليف تفسير الرسالة والأداء
يجب تفسير كل الرسائل عن طريق جهاز الاستقبال. والرسائل البسيطة مثل الأعداد الصحيحة ربما لا تتطلب معالجة إضافية من أجل تفسيرها. ومع هذا، فالرسائل المعقدة مثل SOAP تتطلب محلل لغوي ومحول لولبي string transformer لها من أجل عرض المعاني المقصودة. ومن أجل زيادة كفاءة زمن الأداء، فيجب صقل الرسالة وتقليلها من أجل تقليل تكاليف التفسير.
## الحلول
هناك مدخل لتخفيض التقارن وهو [التصميم الوظيفي]، والذي يسعى إلي الحد من مسؤوليات وحدات البرنامج فيما يخص الوظيفية، فالتقارن يزيد بين الطبقتين أ وب
إذا:
* كان أ لديه سم تشير إلي (نوع) ب
* إذا كان أ له طريقة تتعلق بطبقة ب (عبر return type أو القيمة الوسيطة)
* إذا كان أ يطلب خدمات موضوع ب
* إذا كان أ طبقة فرعية من طبقة ب
ويشير التقارن المنخفض إلي العلاقة التي فيها تتفاعل وحدة البرنامج مع وحدة برنامج أخرى من خلال وصلة بينية ثابتة وبسيطة ولا تحتاج إلي الانشغال بالتنفيذ الداخلي للوحدة الأخرى (انظر أيضا إخفاء المعلومات).
وأنظمة مثل كوربا (حاسوب) أو [نموذج مكون الموضوع COM] تتيح للبرامج التواصل مع بعضها البعض بدون الاضطرار إلي معرفة أي شيء عن تنفيذ البرامج الأخرى. وكلا النظامين يتيحان للبرامج التواصل مع المواضيع المكتوبة حتى بلغات أخرى.
## التقارن مقابل الاتساق
التقارن والاتساق هما مصطلحان يتكرران معا بشكل كبير. فكلاهما يتحدث عن الجودة التي ينبغي أن تكون عليها وحدة البرنامج. ويتحدث التقارن عن الاعتماد البيني للوحدات المتعددة بينما يصف الاتساق مدى ارتباط الوظائف داخل الوحدة. وينطوي الاتساق المنخفض على أن الوحدة تؤدي المهمات غير المرتبطة جدا ببعضها البعض ومن ثم فيمكن أن تسبب مشكلات عندما تصبح الوحدة أضخم. 
## تقارن وحدة البرنامج
يصف التقارن في هندسة البرمجيات نسخة من القياسات المصاحبة لهذا المفهوم.
فمن أجل تقارن تدفق البيانات والتحكم في التدفق:
* di: عدد القيم الوسيطة للبيانات الداخلة
* ci: عدد القيم الوسيطة للتحكم في الإدخال
* do: عدد القيم الوسيطة لبيانات الإخراج
* co: عدد القيم الوسيطة للتحكم في الإخراج

بالنسبة للتقارن الشامل:
* gd: عدد المتغيرات الشاملة المستخدمة كبيانات
* gc: عدد المتغيرات الشاملة المستخدمة كتحكم

بالنسبة للتقارن البيئي
* W: عدد الوحدات التي تم الاتصال بها (عدد المخارج)
* R: عدد الوحدات التي تتصل بالوحدة المعنية (عدد المخارج)
\mathrm{Coupling}(C) = 1 - \frac{1}{d_{i} + 2\times c_{i} + d_{o} + 2\times c_{o} + g_{d} + 2\times g_{c} + w + r}

`Coupling(C)`
C = 1 - \frac{1}{1+0+1+0+0+0+1+0} = 1 - \frac{1}{3} = 0.67
C = 1 - \frac{1}{5 + 2\times 5 + 5 + 2\times 5 + 10 + 0 + 3 + 4} = 0.98

## التقارن
التقارن (يجعل القيمة أكبر كلما كانت الوحدة مقترنة. ويتراوح هذا الرقم من حوالي 0.67 (تقارن منخفض) إلي 1.0 (تقارن مرتفع). مثلا، إذا كان للوحدة قيمة وسيطة واحدة فقط لبيانات الإدخال والإخراج
فإذا كان للوحدة 5 قيم وسيطة لبيانات الإدخال والإخراج، ورقم مساوي للقيم الوسيطة للتحكم، والدخول إلي 10 فقرات من البيانات العامة، مع مخرج 3 ومخرج 4،
## انظر أيضا
* جحيم الاعتمادية
* دالة
## مراجع

تصنيف:برمجة كائنية التوجه
تصنيف:معمارية البرمجيات
تصنيف:قياس برمجيات