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

واجهات توصيل البرمجيات
----------------------

ربما يشير مصطلح واجهة توصيل برمجية إلى مجموعة من الأنواع المختلفة من واجهات التوصيل بـ«مستويات» مختلفة: ربما يتصل أي نظام تشغيل بقطع من عتاد الحاسوب أو البرمجيات التطبيقية أوبرامج الحاسوب التي تعمل على نظام تشغيل قد يحتاج للتفاعل عن طريق التدفقات، وقد تحتاج الكائنات في أي تطبيق في البرامج كائنية المنحى إلى التفاعل عن طريق الأساليب.

واجهات توصيل البرمجيات من الناحية العملية
-----------------------------------------

توفر قطعة البرمجية الوصول إلى موارد الحاسوب (مثل الذاكرة ووحدة المعالجة المركزية والتخزين وما إلى ذلك) عن طريق نظام الحاسوب الأساسي الخاص بها؛ وقد يكون لتوفر هذه الموارد للبرمجيات الأخرى تشعبات كبيرة – أحيانًا كارثية - فيما يتعلق بوظائفها واستقرارها. والمبدأ الأساسي للتصميم هو منع الوصول إلى كافة الموارد افتراضيًا، مما يسمح بالوصول فقط من خلال نقاط دخول محددة جيدًا، ونعني بذلك واجهات التوصيل.
ويمكن أن تشتمل أنواع الوصول التي توفرها واجهات الوصول بين مكونات البرمجيات على: الثوابت وأنواع البيانات وأنواع الإجراءات ومواصفات الاستثناء وتواقيع الأساليب. وقد يكون من المفيد في بعض الحالات تحديد [المتغيرات] العامة كجزء من واجهة التوصيل. كما تحدد في الغالب وظائف هذه الإجراءات والأساليب، سواء عن طريق التعليقات أو (في بعض اللغات التجريبية) عن طريق التأكيدات والشروط المسبقة المنطقية الرسمية.

ويتم المحافظة على فصل واجهة توصيل أية وحدة برمجية A عمدًا عن [تطبيق] تلك الوحدة. ويتضمن التطبيق المذكور آنفًا الكود الفعلي للإجراءات والأساليب الموصوفة في واجهة التوصيل، وكذلك المتغيرات «الخاصة» والإجراءات وهلم جرا. وتضطر أية وحدة برمجية أخرى B (يمكن الإشارة إليها بـ «عميل» لـ A) تتفاعل مع A إلى القيام بذلك فقط عبر واجهة التوصيل. ومن الميزات العملية لهذا الترتيب هو استبدال تطبيق A بتطبيق آخر يفي بنفس مواصفات واجهة التوصيل مما لا يتسبب في فشل B - طالما أن استخدامه لـ A يتوافق مع مواصفات واجهة التوصيل. (انظر أيضًا [مبدأ الإحلال لليسكوف Liskov substitution principle].)

واجهات توصيل البرمجيات في اللغات كائنية المنحى
----------------------------------------------

الموضوع الرئيسي: البروتوكول (البرمجة كائنية المنحى)
يُستخدم مصطلح «واجهة التوصيل» في اللغات كائنية المنحى غالبًا لتحديد [نوع مجرد] لا يحتوي على بيانات ولكن يعرض السلوكيات المحددة على أنها أساليب. ويُقال أن الفئة التي توجد بها كافة الأساليب المطابقة لواجهة التوصيل تلك هي تطبيق لواجهة التطبيق تلك. علاوة على ذلك، يمكن للفئة تطبيق العديد من واجهة التوصيل، ومن ثم يمكن أن تكون ذات أنواع مختلفة في نفس الوقت.

وبناء عليه، تعد واجهة التوصيل تعريفًا لـ نوع؛ أي مكان يمكن فيه استبدال أي كائن (في استدعاء وظيفة أو أسلوب)، يمكن تحديد نوع الكائن المراد استبداله من حيث واجهة التوصيل بدلاً من فئة معينة. ويسمح هذا للكود اللاحق باستخدام نفس الوظيفة التي تستبدل أنواعًا مختلفة من الكائنات؛ ومن ثم، يتحول هذا الكود ليصبح أكثر عمومية وقابلية للاستخدام.

ويتعذر عادة استخدام أي أسلوب في أية واجهة اتصال بشكل مباشر؛ حيث يجب وجود فئة تطبق ذلك الكائن المراد استخدامه لاستدعاء الأسلوب. على سبيل المثال، يمكن للشخص تحديد واجهة توصيل يُطلق عليها «المكدس» والتي تحتوي على أسلوبين: push() وpop() وتطبيقها لاحقًا في إصدارين مختلفين، لنفترض أنهما FastStack وFastStack- يبدو الإصدار الأول أكثر سرعة ولكنه يعمل مع مكدس بحجم ثابت، بينما يستخدم الإصدار الثاني بنية بيانات يمكن تغيير حجمها ولكن بسرعة أقل إلى حد ما.

ويمكن دفع هذا النهج إلى حد تعريف واجهات التوصيل التي تنطوي على أسلوب واحد؛ على سبيل المثال تعرف لغة جافا (لغة برمجة) واجهة التوصيل على أنها واجهة قابلة للقراء مما يعني أن لها الأسلوب read() المفرد ومجموعة من التطبيقات المستخدمة لأغراض مختلفة، من بين أمور أخرى: BufferedReader وFileReader وInputStreamReader وPipedReader وStringReader.

يجب أن تتضمن أية واجهة توصيل، في أنقى شكل لها، (مثل الجافا) تعريفات الأساليب وقيم الثوابت فقط التي تشكل جزء من واجهة التوصيل الثابتة مهما كان نوعها. كما تسمح بعض اللغات (مثل سي) بأن يتضمن التعريف خصائص الكائن، التي يتم التعامل معها كأساليب مع التجميل النحوي.
البرمجة مقابل واجهات توصيل البرمجيات
يتيح استخدام واجهات التوصيل تطبيق نمط برمجي يُطلق عليه البرمجة مقابل واجهات التوصيل. تدور فكرة هذا النمط حول بناء المنطق الذي يطوره الشخص على التحديد الوحيد لواجهة توصيل الكائنات التي يستخدمها الشخص وليس لجعل الكود يعتمد على التفاصيل الداخلية. ويتيح هذا للمبرمج القدرة على تغيير سلوك النظام فيما بعد ببساطة من خلال تبديل الكائن المُستَخدم بكائن آخر يطبق نفس واجهة التوصيل.
ومن خلال دفع هذه الفكرة إلى نهاية المطاف، يمكن للشخص تقديم عكس التحكم الذي يعني ترك السياق لإدخال الكود مع تطبيقات معينة لواجهة التوصيل التي سوف تُستَخدم لأداء العمل.

واجهات توصيل عتاد الحاسوب
-------------------------

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

انظر أيضًا
----------

* واجهة برمجة التطبيقات
* البرمجة التركيبية
* واجهة المستخدم

مراجع
-----

1. 1 2  
Blaauw، Gerritt A.؛ Brooks, Jr.، Frederick P.، "Chapter 8.6, Device Interfaces"، *Computer Architecture-Concepts and Evolution*، Addison-Wesley، ص. 489–493، ISBN:0-201-10557-8
See also:
Patterson، David A.؛ Hennessey، John L.، "Chapter 8.5, Interfacing I/O Devices to the Processor, Memory and Operating System"، *Computer Organization and Design - The Hardware/Software Interface, Third Edition*، Morgan Kaufmann، ص. 588–596، ISBN:1-55860-604-1

* أيقونة بوابةبوابة برمجة الحاسوب