البرمجة موضوعية التوجه Aspect Oriented Programming AOP
البرمجة موضوعية التوجه AOP هي تقنية جديدة و منهجية لتطوير لبرمجيات على مبدأ تقسيم النظام البرمجي الى جزاء بحيث يكون التراكب الوظيفي فيما بينها اقل ما يمكن .
ابتدع هذه التقنية جورج كيزاليز وفريقه من مركز Xeror PARC للأبحاث وطوروا أول لغة برمجة تدعم هذه التقنية AspectJ كإمتداد للغة البرمجة الشائعة جافا واليوم تدعم معظم لغات البرمجة هذه التقنية ابحثوا في الانترنت وستجدون AspectC# و AspectC و Aspect C++ و Aspect .Net و غير ذلك كثير .
في البرمجة الغرضية التوجه OOP غالبا يكون لكل صف وظيفة أو مهمة أساسية (محور اهتمام) ولكن يلاحظ ان هنك بعض المتطلبات الثانوية التي تتكرر في اكثر من صف في النظام البرمجي وتتشابك مع وظائف هذه الصفوف بحيث تصبح عملية فصلها شبه مستحيلة .
ومحاولة ستخد م OOP لتحقيق مثل هذه المحاور يؤدي الى نظام برمجي صعب الفهم (كود متشابك والمفاهيم مبعثرة )
وخاصة في صفوف قواعد البيانات حيث يستوجب مراعاة الكثير من الاجراءات (التقاط الاستثناءات ومعالجة امر السجلات الفارغة ومشكلة الادخالات الغير منطقية .....الخ) بسطور وسطور فائضة من الكود من اجل صف بسيط هدفه استعلام اضافة أو حذف قاعدة البيانات ممكن كتبته بسطرين .
باالإضافة انه محاولة التعديل في سلوك احدى هذه المحاور في مراحل متأخرة من مرحلة كتابة الكود تمثل كارثة حقيقة في المشاريع الضخمة .
أثبتت OOP قوتها في نمذجة سلوك معين ومحدد ولكنها لا تملك شيئا لتفعله حيال بعض السلوكيات التي تمتد فعاليتها وتأثيرها على وحدت وكتل متعددة في البرنامج وجاءت AOP لتغطي هذه الثغرة .
حيث باستخدمها صار بالامكان تحقيق نظام برمجي اسهل بالتصميم والفهم والصيانة مما يؤدي الى انتاجية افضل وقدرة افضل لاضفة مميزات جديدة على التطبيق .
معظم الأنظمة البرمجية تحتوي على محاور اهتمام يجب مراعاتها في جزء ووحدات عديدة في التطبيق البرمجي .
قد يكون محور الاهتمام هدف معين أو مفهوم
أمثلة لمحاور الاهتمام التي يجب مراعاتها في معظم التطبيقات البرمجية :
منطق التطبيق , الأداء والسرعة , ادارة الذكرة , الاستيقان أو التوثق , السرية والامن والخصوصية , الولوج ..... الخ
مثلا قد نقوم بإضافة بعض سطور الكود لأجل عملية الولوج Logging في صفوف التعامل مع قاعدة البيانات كما اننا سنضيف ايضا كود يتعلق بعملية الولوج في صفوف واجهة المستخدم الرسومية للبرنامج GUI على الرغم من ن الوظيقة الأساسية لكل من هذه الصفوف شيء مختلف تماما عن عملية الولوج .
وغالب يكون كود المهمة الثانوية ذاته تقريبا في الصفوف المختلفة المضاف اليها كما في اكواد التقاط الاستثناءات
Exception Handeling ومعالجتها (غالبا برسالة خطأ) .
يقال عن هذه المتطلبات الثانوية انها قطاعات مستعرضة Crosscut في وحدات (كتل) النظام البرمجي المحققة للمتطلبات الأساسية .

فجاءت AOP لتقدم فصلا أفضل لمثل هذا النوع من المتطلبات (المستعرضة) من المنهجيات الأخرى .
بتوفير منهجية معيارية (بروتوكول) للمطورين للتعامل مع محاور الاهتمام المستعرضة تمثل مستوى أعلى من التجريد.
لغة البرمجة المحققة لمنهجية AOP يجب ان يكون لها القدرة على تغليف محاور الاهتمام المستعرضة في التطبيق البرمجي في بنية تصميمية تسمى aspect حيث تبقى المحاور الأساسية مغلفة ضمن بنيتها التقليدية المعروفة Class .
هذا ال aspect يمتلك القدرة على تعديل سلوك الصف الاساسي بإضافة سلوك إضافي Additional Behaviour (Advice)
ممثلة ببعض سطر الكود بتعويضها مكان بعض نقاط الربط Join Point وهي نقاطة مختارة بعناية في مجرى تنفيذ الصف الاساسي في المواضع التي يراد فيها اضافة سلوك اضافي مثل الولوج ومعالجة الاستثناءات
النقاط القطعية Point Cut ليست اكثر من تعبير منطقي في عرف AOP عن مجموعة نقاط الربط التي تندرج تحت محور اهتمام محدد .
وبهاذا صار النظام البرمجي في عرف AOP مكون من صفوف class و سمات aspect يتم الربط المتأخر بينها Late Binding
في زمن التنفيذ عن طريق مترجم خاص بهذه التقنية تسميه AOP الحابكWeaver لأنه يقوم بإعادة تشكيل (حبك) الكود واضافة السلوك الاضافي في اماكنه (نقاط الربط) Joint Points وفقا لقواعد الربط الذي عينها المطور في الaspect


