ConstructiCat Logo
CodeBust.
Browse section ▾

التأثير عن بعد (برمجة الحاسوب).

نمط مضاد

التأثير عن بعد هو نمط مضاد في علوم الحاسوب يتغير فيه سلوك جزء معين من البرنامج بشكل كبير بناءً على عمليات يصعب أو يستحيل تحديدها في جزء آخر من البرنامج.

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

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

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

مثال

يوضح هذا المثال، من لغة البرمجة بيرل (Perl)، حالة خطيرة بشكل خاص من التأثير عن بعد (لاحظ أن المتغير $[ تم إهماله في الإصدارات اللاحقة من Perl):

تبدأ فهارس المصفوفة عادةً عند 0 لأن قيمة $[ هي عادةً 0؛ وإذا قمت بضبط $[ على 1، فإن المصفوفات تبدأ عند 1، وهو ما يجعل مبرمجي فورتران (Fortran) سعداء، وبالتالي نرى أمثلة مثل هذه في صفحة المساعدة (man page) لـ perl(3):

foreach $num ($[ .. $#entry) {
    print "  $num\t'",$entry[$num],"'\n";
}

وبالطبع، يمكنك ضبط $[ على 17 لتبدأ المصفوفات عند رقم عشوائي مثل 17 أو 4 بدلاً من 0 أو 1. وكانت هذه طريقة رائعة لتخريب عمل مؤلفي الموديولات.

لحسن الحظ، ساد العقل. ويُعترف الآن بأن هذه الميزات كانت أخطاءً. لدى القائمة البريدية perl5-porters الآن عبارة شائعة لمثل هذه الميزات: يطلق عليها "التأثير عن بعد". والمبدأ هو أن الإعلان في جزء واحد من البرنامج لا ينبغي أن يغير بشكل جذري وغير مرئي سلوك جزء آخر من البرنامج.

— مارك جايسون دومينوس، إعادة النظر في خطايا بيرل

التأثير عن بعد عبر الكائنات

تتضمن البرمجة كائنية التوجه السليمة مبادئ تصميمية تتجنب التأثير عن بعد.

ينص قانون ديميتير (Law of Demeter) على أن الكائن يجب أن يتفاعل فقط مع الكائنات الأخرى القريبة منه. وإذا كان التأثير مطلوباً في جزء بعيد من النظام، فيجب تنفيذه عن طريق تمرير رسالة. ويحد التصميم السليم بشدة من حدوث التأثير عن بعد، مما يساهم في جعل البرامج قابلة للصيانة. وينتج الضغط لإنشاء كائنات متداخلة بشكل مفرط (object orgy) عن سوء تصميم الواجهات، وربما يتخذ شكل الكائن الإله (God object)، أو عدم تطبيق الكائنات الحقيقية، أو الفشل في مراعاة قانون ديميتير.

ومن مزايا البرمجة الوظيفية أنه لا يتم التركيز على التأثير عن بعد، لدرجة أنه قد يستحيل التعبير عنه على الإطلاق في لغة المصدر.

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