11

مبدأ هوليوود (برمجة)

مبدأ هوليوود ينص على "لا تتصل بنا، نحن من سنتصل بك" أو "Don't call us, we'll call you"

ما علاقته بالبرمجة؟!

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

الحل هو تطبيق مبدأ هوليوود بأن يكون كل جزء مسؤول عن نفسه، أنا لن أتصل بك لكن إذا حدث "حدث معين" اتصل بي فسأعرف ما يجب علي فعله. وهذا يتم عن طريق كتابة callback functions ليتم تنفيذها عند حدوث هذا "الحدث المعين".

مثال على callback function (jQuery)

$("button").click(function(){
    $("p").hide("slow", function(){
        alert("The paragraph is now hidden");
    });
});

في هذا المثال، بدل أن أتصل بالمتصفح مرارا وتكرارا، لأسأله هل أحد ضغط على الزر، هو من سيتصل بي، ومن ثم سأنفذ الدالة التي عرفتها داخل event handler

مثال آخر: دالة java.awt.Component.paint

التي سترسم الجرافكس على الشاشة. الدالة فقط يتم تعريفها (اختياريا) لكن من الذي يقوم بعمل call لها؟

للاستزادة:

Book: Head First Design Pattern

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

لم أفهم أى شئ , أعتقد أننى بحاجه لتعلم البرمجة أولاً :)

الكاتب يتحدث عن ال Observer pattern و ال Publish-Subscribe pattern.

بالبدايه لم افهم شي .. المراد من "لا تتصل بنا٫ نحن من سنتصل بك" غريب جداً وكانها بعيده عن لغه البرمجه .. لكن المحاوله لستوعاب ان هوليوود عباره عن method

شرح "callback functions" اتوقع لا ياتي بهذo الطريقه ..

function click(fn) { fn() }

fn متغيير نوع method وبالتالي يتم استغلاله method

الcallback ياتي علي ترتيب وفلسفه بسيطه جداً .. منها المحدوده حيث ترسل function واحد ومنها ترسل عدد كبير ومنها لا ترسل شي وانما توفر callback functions في array ويتم المرور بهم جميعاً

وهذا المفهوم نستطيع استعماله في الكثر من لغات البرمجه ما عدا php4 وفي الجافا يتم استخدامه مع interface وطالما الكثير يعلم ماهو ووردبريس فا الاضافات تعتبر callback functions يتم التسجيل كل call في array وعند الحدث يتم استدعاء كافه الcallback functions المسجله به

اعتذر منك علي المداخله الثقيله وربما غير مفهومه :)