في علم الحاسوب، الاقتران أو الاعتماد هو الدرجة التي إليها تعتمد وحدة البرنامج على وحدات أخرى مع بعضها البعض. وعادة ما يتناقض التقارن مع الاتساق وغالبا ما يرتبط التقارن المنخفض بالاتساق المرتفع، والعكس صحيح. وقد تم اختراع [قياس خواص البرمجية] عن طريق [لاري قسطنتين]، وهو مطور مبتكر للتصميم المركب[1] والذي كان أيضا أول نصير لهذه المفاهيم (انظر أيضا [طريقة تصميم وتحليل النظم المركبة]). وغالبا ما يكون التقارن المنخفض علامة حاسوب مركب بشكل جيد وعلامة لتصميم جيد، وعند الجمع بينه وبين الاتساق المرتفع، فهو يدعم الأهداف العامة للمقروئية العالية وسهولة الصيانة.
يمكن للتقارن أن يكون «منخفضا» (انظر أيضا «رخوا» و«ضعيفا») أو «مرتفعا» (انظر أيضا «ضيق» و«قوي»). وبعض أنواع التقارن، بالترتيب من التقارن الأعلى إلي الأدنى، هي كالتالي:
ويكون تقارن المحتوى عندما تعدل وحدة برنامج أو تعتمد على الأعمال الداخلية لوحدة برنامج أخرى (مثلا، الدخول إلي بيانات خاصة بوحدة برنامج أخرى). وبالتالي، فإن تغيير الطريقة التي تنتج بها وحدة البرنامج الثانية البيانات (الموقع، النوع، التوقيت) سوف يؤدي إلي تغيير الوحدة التابعة.
ويكون التقارن الشائع عندما تتقاسم وحدتان للبرامج نفس البيانات الإجمالية (مثل المتغير العام). وتغيير المورد المشترك يتضمن تغيير كل الوحدات التي تستخدمه.
ويحدث التقارن الخارجي عندما تتقاسم وحدتان صيغة البيانات المفروضة من الخارج، وبروتوكول الاتصال، أو الوصلة البينية للجهاز.
وتقارن التحكم هو تحكم وحدة في تدفق وحدة أخرى، من خلال تمرير معلومات لها لما عليها أن تفعله (مثلا، تمريرwhat-to-do flag).
ويكون تقارن الطابع عندما تتقاسم وحدتان هيكل بيانات مركبة وتستخدم فقط جزء منه، ربما جزء مختلفا (مثل تمرير سجل كامل لوظيفة تحتاج فقط خانة واحدة منه).
ويكون تقارن البيانات عدما تتقاسم وحدتان البيانات من خلال مثلا، قيمة وسيطة parameters. فكل جزء من البيانات هو أساسي، وهذه هي البيانات المشتركة فقط (مثلا، تمرير عدد صحيح لوظيفة تحسب جذرا تربيعي).
وهذا هو النوع الأضعف للتقارن. فيمكن تحقيقه من خلال حالة اللامركزية (كما في المواضيع) ويتم اتصال المكون عبر قيمة وسيطة parameters أو تمرير رسالة (انظر أيضا تمرير رسالة)
لا تتواصل الوحدات على الإطلاق مع بعضها البعض.
يصف العلاقة بين طفل ووالده. فالطفل متعلق بوالده، لكن والده غير متعلق بالطفل.
عندما يتم ربط فعلين معا في وحدة برنامج واحدة فقط لأنهما يحدثان بالصدفة في نفس الوقت.
تميل الأنظمة المتقارنة إلي إظهار الخصائص التطورية الآتية، والتي في الغالب تعتبر عيوبا:
سواء كان التقارن قويا أو ضعيفا، فغالبا ما ينخفض أداء النظام عن طريق إنشاء رسالة أو قيمة وسيطة، أو إرسال، أو تكاليف overhead ترجمة وتفسير. انظر أيضا برمجة قائمة على الحدث.
ولأن كل الرسائل والقيم الوسيطة يجب أن يكون لها معاني مستعملة (أي تتسبب في تدفق منطقي مقصود داخل جهاز الاستقبال)، فلا بد من إنشائها وتكوينها مع معني معين. وإنشاء أي نوع من الرسائل يتطلب تكلفة غير مباشرة سواء في وحدة المعالجة المركزية أو استخدام الذاكرة. وإنشاء رسالة قيمة عدد صحيح واحدة (والتي ربما تكون مرجعا لخيط أو حشد من [البيانات الهيكلية]) يتطلب تكاليف أقل من إنشاء رسالة معقدة مثل رسالة SOAP. والرسائل الأطول تتطلب وحدة معالجة مركزية أكبر وذاكرة من أجل الإنتاج. ومن أجل تحسين زمن تشغيل الأداء، فلابد من تخفيض طول الرسالة وزيادة معنى الرسالة.
ولأن الرسالة لابد من بثها بالكامل لكي تحتفظ بمعناها الكامل، فلابد أن يكون بث الرسالة على أعلى درجة من الكفاءة. والرسائل الأطول تتطلب مزيدا من وحدة المعالجة المركزية وذاكرة من أجل الإرسال والاستقبال. وأيضا، إذا لزم الأمر، يجب أن تعيد أجهزة الاستقبال تجميع الرسالة في حالتها الأصلية من أجل استلامها بشكل كامل. ومن ثم، فمن أجل تحسين زمن تشغيل الأداء، فلابد من تخفيض طول الرسالة وزيادة معنى الرسالة.
غالبا ما تحتوي بروتوكولات الرسالة والرسائل ذاتها على معلومات إضافية (أي حزمة، هيكل، تعريف، ومعلومات لغة). ومن ثم، فغالبا ما يحتاج جهاز الاستقبال إلي ترجمة الرسالة إلي صيغة أكثر صقلا من خلال إزالة الحروف الزائدة ومعلومات الهيكل أو من خلال تحويل القيم من نوع إلي أخر. وأي نوع من الترجمة يزيد من تكاليف وحدة المعالجة المركزية والذاكرة. ومن أجل تحسين الأداء الزمني، فيجب تخفيض صيغة ومحتوى الرسالة وصقلهما من أجل زيادة معناها وخفض الترجمة.
يجب تفسير كل الرسائل عن طريق جهاز الاستقبال. والرسائل البسيطة مثل الأعداد الصحيحة ربما لا تتطلب معالجة إضافية من أجل تفسيرها. ومع هذا، فالرسائل المعقدة مثل SOAP تتطلب محلل لغوي ومحول لولبي string transformer لها من أجل عرض المعاني المقصودة. ومن أجل زيادة كفاءة زمن الأداء، فيجب صقل الرسالة وتقليلها من أجل تقليل تكاليف التفسير.
هناك مدخل لتخفيض التقارن وهو [التصميم الوظيفي]، والذي يسعى إلي الحد من مسؤوليات وحدات البرنامج فيما يخص الوظيفية، فالتقارن يزيد بين الطبقتين أ وب إذا:
ويشير التقارن المنخفض إلي العلاقة التي فيها تتفاعل وحدة البرنامج مع وحدة برنامج أخرى من خلال وصلة بينية ثابتة وبسيطة ولا تحتاج إلي الانشغال بالتنفيذ الداخلي للوحدة الأخرى (انظر أيضا إخفاء المعلومات). وأنظمة مثل كوربا (حاسوب) أو [نموذج مكون الموضوع COM] تتيح للبرامج التواصل مع بعضها البعض بدون الاضطرار إلي معرفة أي شيء عن تنفيذ البرامج الأخرى. وكلا النظامين يتيحان للبرامج التواصل مع المواضيع المكتوبة حتى بلغات أخرى.
التقارن والاتساق هما مصطلحان يتكرران معا بشكل كبير. فكلاهما يتحدث عن الجودة التي ينبغي أن تكون عليها وحدة البرنامج. ويتحدث التقارن عن الاعتماد البيني للوحدات المتعددة بينما يصف الاتساق مدى ارتباط الوظائف داخل الوحدة. وينطوي الاتساق المنخفض على أن الوحدة تؤدي المهمات غير المرتبطة جدا ببعضها البعض ومن ثم فيمكن أن تسبب مشكلات عندما تصبح الوحدة أضخم.
يصف التقارن في هندسة البرمجيات[2] نسخة من القياسات المصاحبة لهذا المفهوم. فمن أجل تقارن تدفق البيانات والتحكم في التدفق:
بالنسبة للتقارن الشامل:
بالنسبة للتقارن البيئي
Coupling(C)
التقارن (يجعل القيمة أكبر كلما كانت الوحدة مقترنة. ويتراوح هذا الرقم من حوالي 0.67 (تقارن منخفض) إلي 1.0 (تقارن مرتفع). مثلا، إذا كان للوحدة قيمة وسيطة واحدة فقط لبيانات الإدخال والإخراج فإذا كان للوحدة 5 قيم وسيطة لبيانات الإدخال والإخراج، ورقم مساوي للقيم الوسيطة للتحكم، والدخول إلي 10 فقرات من البيانات العامة، مع مخرج 3 ومخرج 4،