إن كنت تتعامل مع OOP فأنصحك أن تطلع على AOP أيضاً
لا شك أن الغالبية من المبرمجين يعرفوا ما هي الـ OOP Object Oriented Programming
التي يقابلها عدة ترجمات مثل :
البرمجة غرضية التوجه
أو البرمجة غرضية المنحى
أو البرمجة الشيئية
أو البرمجة الموجهة نحو الهدف
وما شابه ذلك
باختصار هي نمط برمجي ولا دخل للغة بها إلا من كون اللغة تدعم هذا النمط أو لا
وما نقصد بالنمط يعني طريقة أو أسلوب ما يستخدم في كتابة البرامج من خلال أي لغة تدعم هذا النمط
وللتوضيح سنضرب مثالا من حياتنا
فاللغات لدينا العربية والإنجليزية والفرنسية و غيرها الكثير
أما الأنماط فلدينا الكتابة العادية ولدينا الشعر ولدينا النثر ولدينا الحوار ولدينا عدة أنماط
ومن هنا فيمكن كتابة شعر باللغة العربية كما يمكننا كتابة الشعر بلغات أخرى تدعم كتابة الشعر
لن أخوض في شرح نمط الـ OOP فمصادرها أكثر من أن تحصى
ولكن فقط سأتطرق ما سيلزمنا لاستكمال الحديث عن AOP
في الـ OOP لدينا شيء اسمه كلاس Class يضم أعضاء عبارة عن خصائص Property و مناهج Method و أحداث Event و حقول Field
وكان الهدف الرئيسي هو تغليف مجموعة الأعضاء بفئة واحدة لها خصوصيتها
ومنطق AOP Aspect Oriented Programming والتي لها عدة ترجمات مثل :
البرمجة جانبية المنحى
أو البرمجة تقاطعية المنحى
أو البرمجة اعتراضية التوجه
وجاء هذا النمط لتلافي عدة سلبيات في نمط OOP
مثل تكرار الكود التشاركي
بمعنى لو أنني أريد حفظ العمليات التي تجري كأرشيف للمراجعة فأنا مطالب بزرع كود حفظ كل عملية في كل ميثود في كل كلاس وعندما أريد التعديل يجب أن أمر عليها جميعا لتعديلها
وقس على هذا الأمر مثلا كود التحقق من صلاحية المستخدم أو كود قياس زمن التنفيذ أو كود إرسال إشعار لمركز التنبيهات
وغيرها من الأكواد التي لا تتعلق بنوع الفئة أو المنهج
وقس عليه مثلا التقاط الأخطاء
وقس عليه بعض العمليات الافتتاحية من تهيئة القيم الأولية للبارمترات أو الخصائص
هذه الأمور تعتبر تشاركية و لا دخل لها بالهدف أي أنها تعتبر جانبية
ولهذا تجدونها أثناء تمثيل التطبيق كرسم طبقي على أنه في طبقة مستقلة عمودية مقابلة لكل الطبقات أي أنها مشتركة للكل
وطالما أنها ليست متعلقة بنوع الهدف أي ال كلاس Class أو أي من أعضاءه
إذا فهي تعتبر جانبية وتكرارها يعتبر سلبي من حيث زيادة الكود و إضاعة الوقت وحاجة أكبر للتصحيح مع احتمال الإصلاح في مكان ونسيان مكان آخر
من هنا جاءت فكرة نمط AOP أي البرمجة وفق المنحى الجانبي أو الاعتراضي وهو عزل كل ما هو تشاركي في مكان مستقل والإشارة إليه من حيث نريد أو زرعه حيث يكون
طبعا اللغات التي تعتمد نمط OOP بشكل كبير مثل #C لا تدعم نمط AOP بشكل مباشر أي لا تدعمه ضمنا
ولكن وجدت أطر عمل أو تطبيقات طرف ثالث وسيطة تضيف دعم النمط AOP إلى مثل هذه اللغات
منها ما هو مفتوح المصدر ومنها ما هو بشراء رخصة
خذ مثال شركة بوست شارب PostSHARP
http://www.postsharp.netفهي تقدم إضافة وأدوات تدعم نمط AOP بشكل كامل
لديها ترخيص مجاني ولديها تراخيص متقدمة
وأنا استخدمها حاليا لأني بعد بحث وجدتها قوية جدا
حيث يقوم مبدأها على حشر الكود أثناء الترجمة
مثال :
أنا أريد أن أسجل كل عملية في سجل التغييرات
فيكفي أن أصرح عن منهج تقاطعي أو اعتراضي Aspect موروث من إحدى الفئات الجاهزة في المكتبة لديهم وتضع فيه الكود الذي تريد
وطبعا المنهج هو يرث الفئة Attribute وعليه
يكفي أن تضع اسم الفئة التي صنعتها فوق أي كلاس أو ميثود أو خاصية كأتربيوت Attribute ليتم حشر الكود ضمنه
طبعا يوجد عدة أنواع من الفئات الاعتراضية منها ما هو مخصص لاعتراض المناهج أثناء الدخول و الخروج وفي حال النجاح أو الفشل لتضع كودك في المكان المناسب
ويوجد أتربيوت Attribute خاص باعتراض المتغيرات والخصائص كأن يعترضها أثناء الكتابة أو القراءة لتضع كود فحص أو تعيين قيمة أو غيرها
كما يوجد شيء اسمه حشر بالجملة
يعني مثلا لديك برنامج كبير وفجأة أحببت أن تدخل عليه نمط AOP وتريد أن تلتقط كل الاستثناءات لتعرف مكانه
فيكفي أن تصرح عن فئة اعتراض الاستثناء مرة واحدة
ثم تضع في ملف تعريف التطبيق أنك تريد تطبيقه على كل المناهج فيقوم هو بحشر الكود في الجميع
ومن هنا أي خطأ يحصل في أي مكان ودون الحاجة لاستخدام try catch سيمر على الكود الاعتراضي حاملا نوع الاستثناء ومكانه
وقس عليها مثلا يمكنك اعتراض المناهج بحيث تبدأ عداد الوقت أثناء الدخول و توقفه عند الخروج لتفحص أداء جميع المناهج وأين يستهلك الوقت
أو أن تضع عدادات ضمن المناهج لقياس مقدار التكرارات لتعرف ما هي المناهج التي يتم استدعاءها عدة مرات متعاقبة دون مبرر
ويوجد أنواع كثيرة من الاعتراضات تجدونها في الموقع المذكور
http://doc.postsharp.net/#conceptual-documentation
طبعا مفهوم AOP أوسع مما ذكرت ولكن أردت تبسيط الأمر لجعله كمفتاح لدخول هذا العالم ومن ثم يمكن التوسع إلى المفاهيم الأخرى داخله
عبد الرحمن أحمد
11-02-2014
دمتم بخير
التعليقات