البرمجة الموجهة نحو الجوانب
في مجال الحوسبة ، تُعدّ البرمجة الموجهة نحو الجوانب ( AOP ) نموذجًا برمجيًا يهدف إلى زيادة نمطية البرنامج من خلال فصل الاهتمامات المتداخلة . ويتم ذلك بإضافة سلوكيات إلى الشيفرة البرمجية الموجودة ( نصيحة ) دون تعديلها، بل بتحديد الشيفرة التي سيتم تعديلها بشكل منفصل عبر تحديد " نقطة قطع "، مثل "تسجيل جميع استدعاءات الدوال عندما يبدأ اسم الدالة بـ 'set ' " . يتيح هذا إضافة سلوكيات غير أساسية لمنطق العمل (مثل التسجيل) إلى البرنامج دون إثقال شيفرة الدوال الأساسية.
يتضمن AOP أساليب وأدوات البرمجة التي تدعم تقسيم الاهتمامات إلى وحدات على مستوى الكود المصدري، بينما يشير تطوير البرمجيات الموجهة نحو الجوانب إلى تخصص هندسي كامل.
تتضمن البرمجة الموجهة نحو الجوانب تقسيم منطق البرنامج إلى مجالات وظيفية متماسكة (تُعرف باسم الاهتمامات ). تدعم جميع نماذج البرمجة تقريبًا مستوىً ما من تجميع الاهتمامات وتغليفها في كيانات منفصلة ومستقلة، وذلك من خلال توفير تجريدات (مثل الدوال والإجراءات والوحدات والفئات والأساليب) التي يمكن استخدامها لتنفيذ هذه الاهتمامات وتجريدها وتركيبها. بعض الاهتمامات "تتداخل" مع تجريدات متعددة في البرنامج، وتتحدى هذه الأشكال من التنفيذ. تُسمى هذه الاهتمامات بالاهتمامات المتداخلة أو الاهتمامات الأفقية.
يُعدّ التسجيل مثالاً على الاهتمام الشامل، إذ يجب أن تؤثر استراتيجية التسجيل على كل جزء مسجل من النظام. وبالتالي، يشمل التسجيل جميع الفئات والأساليب المسجلة.
تتضمن جميع تطبيقات البرمجة الموجهة نحو الجوانب (AOP) بعض التعبيرات الشاملة التي تُغلف كل جانب من جوانب البرنامج في مكان واحد. ويكمن الاختلاف بين هذه التطبيقات في قوة وأمان وسهولة استخدام البنى المُقدمة. على سبيل المثال، تُحدد المُعترضات الطرق للتعبير عن شكل محدود من التداخل، دون دعم كبير لأمان النوع أو تصحيح الأخطاء. يحتوي AspectJ على عدد من هذه التعبيرات ويُغلفها في فئة خاصة تُسمى جانبًا (Passed ). على سبيل المثال، يُمكن للجانب تغيير سلوك الكود الأساسي (الجزء غير المُتعلق بالجانب من البرنامج) من خلال تطبيق نصيحة (سلوك إضافي) عند نقاط ربط مُختلفة (نقاط في البرنامج) مُحددة في عملية تحديد كمية أو استعلام يُسمى نقطة قطع (pointcut ) (يكشف ما إذا كانت نقطة ربط مُعينة مُطابقة). كما يُمكن للجانب إجراء تغييرات هيكلية مُتوافقة ثنائيًا على فئات أخرى، مثل إضافة أعضاء أو عناصر أصلية.
تاريخ
للبرمجة الموجهة نحو الجوانب عدة أسلاف مباشرة: [ 1 ] بروتوكولات الانعكاس والكائنات الفوقية ، والبرمجة الموجهة نحو الموضوع ، ومرشحات التركيب، والبرمجة التكيفية. [ 2 ]
قام غريغور كيتزاليس وزملاؤه في مركز أبحاث زيروكس بارك بتطوير المفهوم الصريح للبرمجة الموجهة نحو الجوانب (AOP)، وأتبعوا ذلك بامتداد AspectJ للبرمجة الموجهة نحو الجوانب في لغة جافا. واتبع فريق البحث في شركة آي بي إم نهجًا قائمًا على الأدوات بدلًا من نهج تصميم اللغة، وفي عام 2001 اقترحوا Hyper/J وبيئة معالجة الاهتمامات ، والتي لم تشهد استخدامًا واسع النطاق.
تستخدم الأمثلة الواردة في هذه المقالة AspectJ.
يُعتبر خادم معاملات مايكروسوفت أول تطبيق رئيسي لتقنية البرمجة الموجهة نحو الجوانب (AOP)، يليه برنامج Enterprise JavaBeans . [ 3 ] [ 4 ]
الدافع والمفاهيم الأساسية
عادةً ما يكون جانبٌ ما مُشتتًا أو مُتشابكًا في الكود، مما يُصعّب فهمه وصيانته. ويحدث التشتت نتيجةً لتوزع وظيفته (مثل التسجيل) على عددٍ من الوظائف غير المترابطة التي قد تستخدمها ، ربما في أنظمةٍ مُختلفة تمامًا أو مكتوبة بلغاتٍ برمجيةٍ مُتباينة. لذا، قد يتطلب تغيير التسجيل تعديل جميع الوحدات النمطية المُتأثرة. ولا يقتصر تشابك الجوانب على الوظيفة الرئيسية للأنظمة التي تُعبَّر فيها فحسب، بل يشمل أيضًا تشابكها فيما بينها. وبالتالي، فإن تغيير جانبٍ واحدٍ يستلزم فهم جميع الجوانب المُتشابكة أو وجود وسيلةٍ ما لاستنتاج تأثير التغييرات.
على سبيل المثال، لنفترض تطبيقًا مصرفيًا يحتوي على طريقة بسيطة للغاية لتحويل مبلغ من حساب إلى آخر. يبدو هذا المثال بلغة جافا كما يلي:
فئة BankingException المغلقة التي ترث من Exception تسمح بـ InsufficientFundsException و UnauthorisedUserException { // ... }public class Bank { public void transfer ( Account fromAcc , Account toAcc , int amount ) throws BankingException { if ( fromAcc . getBalance () < amount ) { throw new InsufficientFundsException (); }fromAcc.draw ( amount ) ; toAcc.deposit ( amount ) ; } }ومع ذلك، فإن طريقة النقل هذه تتجاهل بعض الاعتبارات التي يتطلبها التطبيق المنشور، مثل التحقق من أن المستخدم الحالي مخول لتنفيذ هذه العملية، وتغليف معاملات قاعدة البيانات لمنع فقدان البيانات العرضي، وتسجيل العملية لأغراض التشخيص.
قد تبدو النسخة التي تتضمن كل هذه المخاوف الجديدة على النحو التالي:
استيراد java.util.logging.* ;فئة BankingException المغلقة التي ترث من Exception تسمح بـ InsufficientFundsException و UnauthorisedUserException { // ... }public class Bank { private static final Logger logger ; private final Database database ; public void transfer ( Account fromAcc , Account toAcc , int amount , User user ) throws BankingException { logger . info ( "جاري تحويل الأموال..." ); if ( ! isUserAuthorised ( user , fromAcc )) { logger . log ( Level . WARNING , "المستخدم ليس لديه إذن." ); throw new UnauthorisedUserException (); } if ( fromAcc . getBalance () < amount ) { logger . log ( Level . WARNING , "الرصيد غير كافٍ." ); throw new InsufficientFundsException (); }fromAcc.draw ( amount ) ; toAcc.deposit ( amount ) ;database.commitChanges ( ); // عملية ذرية.logger.log ( Level.INFO , " تمت العملية بنجاح." ) ; } }في هذا المثال، تداخلت مصالح أخرى مع الوظائف الأساسية (والتي تُسمى أحيانًا بمنطق الأعمال ). وتُعدّ المعاملات والأمان والتسجيل أمثلة على الاهتمامات المتداخلة .
والآن، لنفترض أننا احتجنا فجأةً إلى تغيير اعتبارات الأمان الخاصة بالتطبيق. في الإصدار الحالي من البرنامج، تبدو العمليات المتعلقة بالأمان موزعة على عدة طرق، وسيتطلب مثل هذا التغيير جهداً كبيراً.
تحاول البرمجة الموجهة نحو الجوانب (AOP) حل هذه المشكلة من خلال تمكين المبرمج من التعبير عن الاهتمامات المشتركة في وحدات مستقلة تُسمى الجوانب . يمكن أن تحتوي الجوانب على نصائح (كود مُرتبط بنقاط محددة في البرنامج) وتصريحات بين الأنواع (أعضاء هيكلية مُضافة إلى فئات أخرى). على سبيل المثال، يمكن أن تتضمن وحدة الأمان نصيحة تُجري فحصًا أمنيًا قبل الوصول إلى حساب مصرفي. تُحدد نقطة الربط الأوقات ( نقاط الربط ) التي يُمكن فيها الوصول إلى الحساب المصرفي، ويُحدد الكود الموجود في نص النصيحة كيفية تنفيذ الفحص الأمني. بهذه الطريقة، يُمكن الاحتفاظ بكل من الفحص والأماكن في مكان واحد. علاوة على ذلك، يُمكن لنقطة الربط الجيدة توقع التغييرات اللاحقة في البرنامج، لذلك إذا أنشأ مطور آخر طريقة جديدة للوصول إلى الحساب المصرفي، فسيتم تطبيق النصيحة على الطريقة الجديدة عند تنفيذها.
لذا، بالنسبة للمثال أعلاه الذي يوضح كيفية تطبيق التسجيل في أحد الجوانب:
جانب المُسجِّل { مُسجِّل مُسجِّل ؛void Bank.transfer ( Account fromAcc , Account toAcc , int amount , User user ) { logger.info ( " جاري تحويل الأموال... " ) ; }void Bank.getMoneyBack ( User user , int transactionId ) { logger.info ( " طلب المستخدم استرداد أمواله . " ) ; }// كود شامل آخر. }يمكن اعتبار البرمجة الموجهة نحو الجوانب (AOP) أداةً لتصحيح الأخطاء أو أداةً على مستوى المستخدم. ينبغي حصر استخدام هذه التقنية في الحالات التي يتعذر فيها تغيير الدالة (على مستوى المستخدم) [ 5 ] أو عندما لا يرغب المستخدم في تغيير الدالة في كود الإنتاج (لتصحيح الأخطاء).
نماذج نقطة الربط
يُعرّف المكون المتعلق بالنصائح في لغة البرمجة الموجهة نحو الجوانب نموذج نقطة الربط (JPM). ويُعرّف نموذج نقطة الربط ثلاثة أشياء:
- متى يمكن تنفيذ النصيحة؟ تُسمى هذه النقاط بنقاط الربط لأنها نقاط في البرنامج قيد التشغيل حيث يمكن إضافة سلوكيات إضافية بشكل مفيد. يجب أن تكون نقطة الربط قابلة للعنونة والفهم من قِبل المبرمج العادي لتكون مفيدة. كما يجب أن تكون مستقرة عبر تغييرات البرنامج غير الجوهرية للحفاظ على استقرار الجوانب. تدعم العديد من تطبيقات البرمجة الموجهة نحو الجوانب (AOP) تنفيذ الأساليب ومراجع الحقول كنقاط ربط.
- طريقة لتحديد (أو قياس ) نقاط الربط، تُسمى نقاط الربط . تُحدد نقاط الربط ما إذا كانت نقطة ربط معينة مطابقة. تستخدم معظم لغات نقاط الربط المفيدة بنيةً مشابهةً للغة الأساسية (على سبيل المثال، يستخدم AspectJ توقيعات Java) وتسمح بإعادة الاستخدام من خلال التسمية والدمج.
- وسيلة لتحديد التعليمات البرمجية التي سيتم تشغيلها عند نقطة الربط. يُطلق AspectJ على هذه الميزة اسم "التوجيه" ، ويمكن تشغيلها قبل نقاط الربط وبعدها وحولها. كما تدعم بعض التطبيقات تعريف دالة في جانب من جوانب فئة أخرى.
يمكن مقارنة نماذج نقاط الربط بناءً على نقاط الربط المكشوفة، وكيفية تحديد نقاط الربط، والعمليات المسموح بها عند نقاط الربط، والتحسينات الهيكلية التي يمكن التعبير عنها.
نموذج نقطة الربط في AspectJ
- تشمل نقاط الربط في AspectJ استدعاء أو تنفيذ الدوال أو المُنشئات، وتهيئة الصنف أو الكائن، والوصول إلى الحقول للقراءة والكتابة، ومعالجات الاستثناءات. ولا تشمل الحلقات، أو استدعاءات الدوال الأصلية، أو عبارات throws، أو العبارات المتعددة.
- تُحدد نقاط القطع بواسطة مجموعات من مُعرّفات نقاط القطع الأولية (PCDs). تُطابق مُعرّفات نقاط القطع "المُتشابهة" نوعًا مُعينًا من نقاط الربط (مثل تنفيذ دالة) وغالبًا ما تأخذ توقيعًا شبيهًا بتوقيع جافا كمدخل. يبدو أحد هذه النقاط على النحو التالي:
التنفيذ ( * مجموعة * ( * ))
تتطابق نقطة القطع هذه مع نقطة ربط تنفيذ الأسلوب، إذا كان اسم الأسلوب يبدأ بـ "
set" وكان هناك وسيط واحد فقط من أي نوع.تقوم وحدات التحكم الديناميكية (PCDs) بفحص أنواع وقت التشغيل وربط المتغيرات. على سبيل المثال،
هذه ( نقطة )
تتطابق نقطة الربط هذه عندما يكون الكائن قيد التنفيذ حاليًا نسخة من فئة معينة
Point. لاحظ أنه يمكن استخدام الاسم غير المؤهل للفئة عبر البحث العادي عن النوع في جافا.تحدد "نطاقات" PCDs النطاق المعجمي لنقطة الربط. على سبيل المثال:
ضمن ( com . company . * )
تُطابق نقطة القطع هذه أي نقطة ربط في أي نوع ضمن
com.companyالحزمة. وهي*إحدى صيغ الأحرف البديلة التي يمكن استخدامها لمطابقة عناصر متعددة بتوقيع واحد.يمكن إنشاء نقاط القطع وتسميتها لإعادة استخدامها. على سبيل المثال:
تُطابق نقطة الربط هذه نقطة ربط تنفيذ الأسلوب، إذا كان اسم الأسلوب يبدأ بـ "pointcut set () : execution ( * set * ( * ) ) && this ( Point ) && within ( com . company . * );
set"thisوكان مثيلاً لنوعPointفيcom.companyالحزمة. ويمكن الإشارة إليه باستخدام الاسم "set()". - تُحدد النصيحة تنفيذ جزء معين من التعليمات البرمجية (محدد مثل التعليمات البرمجية في دالة) عند (قبل، أو بعد، أو حول) نقطة ربط (محددة بنقطة قطع). يستدعي وقت تشغيل البرمجة الموجهة نحو الجوانب النصيحة تلقائيًا عندما تتطابق نقطة القطع مع نقطة الربط. على سبيل المثال: وهذا يحدد بشكل فعال ما يلي: "إذا كانت
بعد () : تعيين () { عرض . تحديث (); }
set()نقطة القطع تتطابق مع نقطة الربط، فقم بتشغيل الكودDisplay.update()بعد اكتمال نقطة الربط".
نماذج أخرى محتملة لنقاط الربط
توجد أنواع أخرى من نماذج إدارة الوظائف (JPMs). يمكن تعريف جميع لغات التوجيه من حيث نموذج إدارة الوظائف الخاص بها. على سبيل المثال، قد تحتوي لغة الجوانب الافتراضية لـ UML على نموذج إدارة الوظائف التالي:
- جميع نقاط الربط هي عناصر نموذجية.
- تُعدّ نقاط القطع تعبيرًا منطقيًا يجمع عناصر النموذج.
- تتمثل وسائل التأثير في هذه النقاط في تصور جميع نقاط الربط المتطابقة.
التصريحات بين الأنواع
تُتيح التصريحات بين الأنواع طريقةً للتعبير عن الاهتمامات المشتركة التي تؤثر على بنية الوحدات. تُعرف هذه الطريقة أيضًا باسم الفئات المفتوحة وطرق التوسيع ، وهي تُمكّن المبرمجين من تعريف أعضاء أو أصول فئة أخرى في مكان واحد، وذلك عادةً لدمج جميع التعليمات البرمجية المتعلقة باهتمام معين في جانب واحد. على سبيل المثال، إذا قام مبرمج بتنفيذ اهتمام العرض والتحديث المشترك باستخدام الزوار، فقد يبدو التصريح بين الأنواع باستخدام نمط الزائر كما يلي في AspectJ:
aspect DisplayUpdate { void Point . acceptVisitor ( Visitor v ) { v . visit ( this ); } // كود شامل آخر... }تضيف هذه الشفرة البرمجية acceptVisitorالطريقة إلى Pointالفئة.
يجب أن تكون أي إضافات هيكلية متوافقة مع الفئة الأصلية، بحيث يستمر عملاء الفئة الحالية في العمل، ما لم يكن بإمكان تطبيق AOP أن يتوقع التحكم في جميع العملاء في جميع الأوقات.
تطبيق
يمكن لبرامج البرمجة الموجهة نحو الجوانب (AOP) أن تؤثر على البرامج الأخرى بطريقتين مختلفتين، وذلك اعتمادًا على اللغات والبيئات الأساسية:
- يتم إنتاج برنامج مُدمج، صالح في اللغة الأصلية ولا يمكن تمييزه عن برنامج عادي بالنسبة للمترجم النهائي
- يتم تحديث المترجم أو البيئة النهائية لفهم وتنفيذ ميزات البرمجة الموجهة نحو الجوانب (AOP).
نظراً لصعوبة تغيير بيئات البرمجة، فإن معظم التطبيقات تُنتج برامج مُدمجة متوافقة من خلال نوع من تحويل البرامج يُعرف باسم "الدمج" . يقوم مُدمج الجوانب بقراءة الكود المُوجّه نحو الجوانب، ثم يُولّد كوداً مُناسباً مُوجّهاً نحو الكائنات مع دمج الجوانب. يُمكن تطبيق لغة البرمجة المُوجّهة نحو الجوانب نفسها من خلال طرق دمج مُتعددة، لذا لا ينبغي فهم دلالات اللغة من منظور تطبيق الدمج. فقط سرعة التطبيق وسهولة نشره هما ما يتأثران بطريقة الدمج المُستخدمة.
يمكن للأنظمة تنفيذ عملية الربط على مستوى المصدر باستخدام معالجات مسبقة (كما تم تنفيذ لغة C++ في الأصل في CFront ) والتي تتطلب الوصول إلى ملفات مصدر البرنامج. مع ذلك، فإن الشكل الثنائي المحدد جيدًا للغة Java يُمكّن مُعالجات البايت كود من العمل مع أي برنامج Java بصيغة ملف .class. يمكن نشر مُعالجات البايت كود أثناء عملية البناء، أو أثناء تحميل الفئات إذا كان نموذج الربط خاصًا بكل فئة. بدأ AspectJ بالربط على مستوى المصدر في عام 2001، وقدم مُعالج بايت كود خاصًا بكل فئة في عام 2002، ووفر دعمًا متقدمًا لوقت التحميل بعد دمج AspectWerkz في عام 2005.
أي حل يجمع البرامج أثناء التشغيل يجب أن يوفر طرق عرض تفصلها بشكل صحيح للحفاظ على نموذج المبرمج المنفصل. يدعم كود البايت في جافا ملفات المصدر المتعددة، مما يُمكّن أي مصحح أخطاء من تتبع خطوات ملف .class مُدمج بشكل صحيح في محرر المصدر. مع ذلك، لا تستطيع بعض برامج فك التجميع الخارجية معالجة الكود المُدمج لأنها تتوقع كودًا مُنتجًا بواسطة Javac بدلاً من جميع أشكال كود البايت المدعومة (انظر أيضًا قسم النقد أدناه).
يُقدّم أسلوب الدمج أثناء النشر نهجًا آخر. [ 6 ] يتضمن هذا الأسلوب معالجة لاحقة، ولكن بدلًا من تعديل الكود المُولّد، يقوم هذا الأسلوب بتوريث الفئات الموجودة بحيث تُطبّق التعديلات من خلال إعادة تعريف الدوال. تبقى الفئات الموجودة دون تغيير، حتى أثناء التشغيل، ويمكن استخدام جميع الأدوات المتاحة، مثل أدوات تصحيح الأخطاء وأدوات تحليل الأداء، أثناء التطوير. وقد أثبت نهج مماثل فعاليته في تنفيذ العديد من خوادم تطبيقات Java EE ، مثل WebSphere من IBM .
مصطلحات
قد تتضمن المصطلحات القياسية المستخدمة في البرمجة الموجهة نحو الجوانب ما يلي:
- اهتمامات شاملة
- على الرغم من أن معظم الفئات في نموذج البرمجة الكائنية تؤدي وظيفة واحدة محددة، إلا أنها غالبًا ما تشترك في متطلبات ثانوية مع فئات أخرى. على سبيل المثال، قد نرغب في إضافة تسجيل للفئات ضمن طبقة الوصول إلى البيانات، وكذلك للفئات في طبقة واجهة المستخدم، عند دخول أو خروج أي خيط من دالة. ويمكن أن تتعلق مخاوف أخرى بالأمان، مثل التحكم في الوصول [ 7 ] أو التحكم في تدفق المعلومات [ 8 ] . وعلى الرغم من اختلاف الوظيفة الأساسية لكل فئة اختلافًا كبيرًا، إلا أن الشيفرة اللازمة لأداء الوظيفة الثانوية غالبًا ما تكون متطابقة.
- نصيحة
- هذا هو الكود الإضافي الذي ترغب في تطبيقه على النموذج الحالي. في مثالنا، هذا هو كود التسجيل الذي نرغب في تطبيقه كلما دخل الخيط إلى دالة أو خرج منها.
- بوينتكت
- يشير هذا إلى نقطة التنفيذ في التطبيق التي يجب عندها تطبيق الاهتمامات المتداخلة. في مثالنا، يتم الوصول إلى نقطة تقاطع عندما يدخل الخيط إلى دالة، ويتم الوصول إلى نقطة تقاطع أخرى عندما يخرج الخيط من تلك الدالة.
- وجه
- يُطلق على الجمع بين نقطة الربط والنصيحة اسم "الجانب". في المثال أعلاه، نضيف جانب تسجيل إلى تطبيقنا من خلال تحديد نقطة ربط وتقديم النصيحة الصحيحة.
مقارنة بنماذج البرمجة الأخرى
نشأت الجوانب من البرمجة الكائنية والبرمجة الانعكاسية . تتمتع لغات البرمجة الموجهة نحو الجوانب بوظائف مشابهة لبروتوكولات الكائنات الوصفية ، ولكنها أكثر تقييدًا منها . ترتبط الجوانب ارتباطًا وثيقًا بمفاهيم البرمجة مثل المواضيع ، والمزيجات ، والتفويض . تشمل الطرق الأخرى لاستخدام نماذج البرمجة الموجهة نحو الجوانب مرشحات التركيب ومنهج الشرائح الفائقة . منذ سبعينيات القرن الماضي على الأقل، استخدم المطورون أشكالًا من الاعتراض وتصحيح الإرسال تُشبه بعض أساليب تنفيذ البرمجة الموجهة نحو الجوانب، ولكنها لم تكن تمتلك الدلالات التي توفرها المواصفات الشاملة في مكان واحد.
لقد نظر المصممون في طرق بديلة لتحقيق فصل التعليمات البرمجية، مثل الأنواع الجزئية في لغة C# ، لكن هذه الأساليب تفتقر إلى آلية قياس تسمح بالوصول إلى نقاط ربط متعددة للتعليمات البرمجية بعبارة تصريحية واحدة.
على الرغم من أن الأمر قد يبدو غير ذي صلة، إلا أن استخدام الكائنات الوهمية أو البدائل في الاختبار يتطلب استخدام تقنيات البرمجة الموجهة نحو الجوانب (AOP)، مثل التوجيه المحيطي. هنا، تُعدّ الكائنات المتعاونة، لأغراض الاختبار، عنصرًا أساسيًا مشتركًا. ولذلك، توفر أطر عمل الكائنات الوهمية المختلفة هذه الميزات. على سبيل المثال، تستدعي عملية ما خدمةً للحصول على رصيد. في اختبار هذه العملية، لا يهم مصدر الرصيد، بل المهم هو أن تستخدم العملية الرصيد وفقًا للمتطلبات.
مشاكل التبني
يحتاج المبرمجون إلى القدرة على قراءة وفهم الشيفرة البرمجية لتجنب الأخطاء. [ 9 ] حتى مع التعليم المناسب، قد يكون فهم الجوانب المتداخلة صعبًا دون دعم مناسب لتصور كل من البنية الثابتة والتدفق الديناميكي للبرنامج. [ 10 ] بدءًا من عام 2002، بدأت AspectJ بتوفير إضافات لبيئات التطوير المتكاملة (IDE) لدعم تصور الجوانب المتداخلة. أصبحت هذه الميزات، بالإضافة إلى ميزة المساعدة في شيفرة الجوانب وإعادة هيكلتها ، شائعة الآن.
بالنظر إلى قوة البرمجة الموجهة نحو الجوانب (AOP)، فإن ارتكاب خطأ منطقي في التعبير عن الجوانب المتداخلة قد يؤدي إلى فشل واسع النطاق في البرنامج. في المقابل، قد يُغير مبرمج آخر نقاط الربط في البرنامج، كإعادة تسمية الدوال أو نقلها، بطرق لم يتوقعها كاتب الجانب، مما يُسبب عواقب غير متوقعة . إحدى مزايا تقسيم الاهتمامات المتداخلة إلى وحدات نمطية هي تمكين مبرمج واحد من التأثير بسهولة على النظام بأكمله. ونتيجة لذلك، تظهر هذه المشكلات على شكل نزاع حول المسؤولية بين اثنين أو أكثر من المطورين عن فشل معين. يمكن للبرمجة الموجهة نحو الجوانب (AOP) تسريع حل هذه المشكلات، حيث لا يلزم سوى تغيير الجانب. بدون البرمجة الموجهة نحو الجوانب (AOP)، قد تنتشر المشكلات المقابلة على نطاق أوسع.
نقد
يُعدّ النقد الأساسي لتأثير البرمجة الموجهة نحو الجوانب (AOP) هو إخفاء مسار التحكم، وأنها ليست أسوأ من عبارة GOTO سيئة السمعة فحسب ، بل تُشبه إلى حد كبير عبارة COME FROM المُستهجنة . [ 10 ] إنّ تجاهل التطبيق ، وهو أمر أساسي في العديد من تعريفات AOP (لا يُشير الكود المذكور إلى تطبيق نصيحة، بل يتم تحديدها في نقطة القطع)، يعني أن النصيحة غير مرئية، على عكس استدعاء دالة صريح. [ 10 ] [ 11 ] على سبيل المثال، قارن برنامج COME FROM: [ 10 ]
5 أدخل X 10 اطبع 'النتيجة هي:' 15 اطبع X 20 احسب من 10 25 X = X * X 30 أرجعمع جزء من AOP ذي دلالات مماثلة:
main () { input x print ( result ( x )) }input result ( int x ) { return x } around ( int x ): call ( result ( int )) && args ( x ) { int temp = proceed ( x ) return temp * temp }في الواقع، قد يعتمد موضع القطع على ظروف وقت التشغيل، وبالتالي قد لا يكون محددًا بشكل ثابت. يمكن التخفيف من هذه المشكلة، ولكن لا يمكن حلها تمامًا، من خلال التحليل الثابت ودعم بيئة التطوير المتكاملة (IDE) الذي يُظهر التوصيات التي قد تتطابق.
تُوجَّه انتقادات عامة لبرمجة AOP، مفادها أنها تدّعي تحسين "كلٍّ من نمطية البرمجة وبنية الكود"، لكن البعض يُعارض ذلك، مُشيرًا إلى أنها تُقوِّض هذه الأهداف وتُعيق "التطوير المُستقل وفهم البرامج". [ 12 ] فعلى وجه التحديد، يُخلّ التحديد الكمي باستخدام نقاط الربط بنمطية البرمجة: "يجب، بشكل عام، امتلاك معرفة شاملة بالبرنامج لفهم التنفيذ الديناميكي لبرنامج مُوجَّه نحو الجوانب". [ 13 ] علاوة على ذلك، فبينما تُفهم أهدافها (نمطية الاهتمامات المُتداخلة) جيدًا، إلا أن تعريفها الفعلي غير واضح، ولا يُمكن تمييزها بوضوح عن التقنيات الأخرى الراسخة. [ 12 ] قد تتداخل الاهتمامات المُتداخلة فيما بينها، مما يتطلب آلية حل، مثل الترتيب. [ 12 ] في الواقع، يُمكن أن تنطبق الجوانب على نفسها، مما يُؤدي إلى مشاكل مثل مُفارقة الكاذب . [ 14 ]
تشمل الانتقادات التقنية أن تحديد نقاط القطع (التي تحدد أماكن تنفيذ التوجيهات) "حساس للغاية للتغييرات في البرنامج"، وهو ما يُعرف بمشكلة نقاط القطع الهشة . [ 12 ] تُعتبر مشاكل نقاط القطع مستعصية على الحل. إذا استُبدل تحديد نقاط القطع بتعليقات توضيحية صريحة، فسنحصل على برمجة موجهة نحو السمات ، وهي ببساطة استدعاء روتيني صريح، وتعاني من نفس مشكلة التشتت التي صُممت البرمجة الموجهة نحو السمات لحلها. [ 12 ]
التطبيقات
قامت العديد من لغات البرمجة بتطبيق البرمجة الموجهة نحو الجوانب (AOP)، إما داخل اللغة نفسها أو كمكتبة خارجية ، بما في ذلك:
- لغات إطار عمل .NET ( C# ، Visual Basic (.NET) (VB.NET)) [ 15 ]
- PostSharp هو تطبيق تجاري لتقنية البرمجة الموجهة نحو الجوانب (AOP) مع إصدار مجاني ولكنه محدود.
- توفر Unity واجهة برمجة تطبيقات (API) لتسهيل الممارسات المثبتة في المجالات الأساسية للبرمجة بما في ذلك الوصول إلى البيانات والأمان والتسجيل ومعالجة الاستثناءات وغيرها.
- AspectDN هو تطبيق AOP يسمح بدمج الجوانب مباشرة في ملفات .NET القابلة للتنفيذ.
- ActionScript [ 16 ]
- آدا [ 17 ]
- AutoHotkey [ 18 ]
- C ، C++ [ 19 ]
- كوبول [ 20 ]
- إطار عمل Cocoa Objective -C [ 21 ]
- ColdFusion [ 22 ]
- Common Lisp [ 23 ]
- دلفي [ 24 ] [ 25 ] [ 26 ]
- منشور دلفي [ 27 ]
- e (IEEE 1647)
- Emacs Lisp [ 28 ]
- رائع
- هاسكل [ 29 ]
- جافا [ 30 ]
- جافا سكريبت [ 31 ]
- Logtalk [ 32 ]
- لوا [ 33 ]
- اصنع [ 34 ]
- ماتلاب [ 35 ]
- ML [ 36 ]
- نيميرل [ 37 ]
- بيرل [ 38 ]
- PHP [ 39 ]
- مقدمة [ 40 ]
- بايثون [ 41 ]
- المضرب [ 42 ]
- روبي [ 43 ] [ 44 ] [ 45 ]
- ثرثرة قصيرة صرير [ 46 ] [ 47 ]
- UML 2.0 [ 48 ]
- XML [ 49 ]
انظر أيضاً
- البرمجة الموجهة للجوانب الموزعة
- قواعد السمات ، وهي شكلية يمكن استخدامها للبرمجة الموجهة نحو الجوانب في لغات البرمجة الوظيفية
- نماذج البرمجة
- البرمجة الموجهة نحو الموضوع ، بديل للبرمجة الموجهة نحو الجوانب
- البرمجة الموجهة بالأدوار ، وهي بديل للبرمجة الموجهة بالجوانب
- إرسال المسند ، وهو بديل أقدم للبرمجة الموجهة نحو الجوانب
- UML قابل للتنفيذ
- نمط الزخرفة
- التصميم الموجه بالمجال
ملاحظات ومراجع
- ↑ كيتزاليس، ج .؛ لامبينغ، ج.؛ مينديكار، أ.؛ مايدا، س.؛ لوبيز، س.؛ لونغتير، ج.م.؛ إيروين، ج. (1997). البرمجة الموجهة نحو الجوانب (ملف PDF) . ECOOP'97. وقائع المؤتمر الأوروبي الحادي عشر حول البرمجة الموجهة نحو الكائنات . سلسلة محاضرات في علوم الحاسوب (LNCS). المجلد 1241. الصفحات 220-242 . CiteSeerX 10.1.1.115.8660 . doi : 10.1007/BFb0053381 . ISBN 3-540-63089-9تمت أرشفة الملف (PDF) من النسخة الأصلية في 12 يناير 2016.
- ↑ "البرمجة الكائنية التكيفية: منهج ديميتر مع أنماط الانتشار" كارل ليبهر 1996 ISBN 0-534-94602-Xيقدم نسخة جيدة الصنع من نفس الشيء أساسًا (أدرك ليبرهير ذلك لاحقًا وأعاد صياغة نهجه).
- ↑ دون بوكس؛ كريس سيلز ( 4 نوفمبر 2002). Essential.NET: بيئة تشغيل اللغة المشتركة . أديسون-ويسلي بروفيشنال. ص 206. ISBN 978-0-201-73411-9تم الاطلاع عليه بتاريخ 4 أكتوبر 2011 .
- ↑ رومان، إد؛ سريغانيش، ريما باتيل؛ بروس، جيرالد (1 يناير 2005). إتقان جافا بينز للمؤسسات . جون وايلي وأولاده. ص 285. ISBN 978-0-7645-8492-3تم الاطلاع عليه بتاريخ 4 أكتوبر 2011 .
- ↑ "gnu.org" . مشروع جنو. مؤرشف من الأصل في 24 ديسمبر 2017. تم الاطلاع عليه في 5 مايو 2018 .
- ↑ "نسخة مؤرشفة" (PDF) . مؤرشفة من الأصل (PDF) بتاريخ 8 أكتوبر 2005. تم الاطلاع عليها بتاريخ 19 يونيو 2005 .
{{cite web}}: CS1 maint: archived copy as title ( link ) - ↑ ب. دي وين، ب. فانهاوت، وب. دي ديكر. "الأمن من خلال البرمجة الموجهة نحو الجوانب". في كتاب " التطورات في أمن الشبكات والأنظمة الموزعة " (2002).
- ↑ تي. باسكييه، جيه. بيكون، وبي. شاند. "FlowR: البرمجة الموجهة نحو الجوانب للتحكم في تدفق المعلومات في روبي". في وقائع مؤتمر ACM الدولي الثالث عشر حول النمطية (تطوير البرمجيات الموجهة نحو الجوانب) (2014).
- ↑ إدسكار ديكسترا ، ملاحظات حول البرمجة الهيكلية، مؤرشفة بتاريخ 12-10-2006 في أرشيف الإنترنت ، الصفحات 1-2
- 1 2 3 4 قسطنطينيدس، قسطنطينوس؛ سكوتينيوتيس، ثيرابون؛ ستورزر، ماكسيميليان (سبتمبر 2004). اعتبار البرمجة الموجهة نحو الجوانب ضارة (ملف PDF) . ورشة العمل الأوروبية التفاعلية حول الجوانب في البرمجيات (EIWAS). برلين، ألمانيا. مؤرشف (ملف PDF) من الأصل في 23 مارس 2016. تم الاطلاع عليه في 5 مايو 2018 .
- ↑ C2: يأتي من
- 1 2 3 4 5 ستايمان، ف. (2006). "النجاح المتناقض للبرمجة الموجهة نحو الجوانب". إشعارات ACM SIGPLAN . 41 (10): 481-497 . CiteSeerX 10.1.1.457.2210 . doi : 10.1145/1167515.1167514 . ( الشرائح مؤرشفة بتاريخ 4 مارس 2016 على موقع Wayback Machine ، والشرائح 2 مؤرشفة بتاريخ 23 سبتمبر 2015 على موقع Wayback Machine ، والملخص مؤرشف بتاريخ 24 سبتمبر 2015 على موقع Wayback Machine )، فريدريش شتايمان، غاري تي. ليفنز، مؤتمر OOPSLA 2006
- ↑ "مزيد من الاستدلال المعياري للبرامج الموجهة نحو الجوانب" . مؤرشف من الأصل في 12 أغسطس 2015. تم الاطلاع عليه في 11 أغسطس 2015 .
- ↑ "AOP وتناقض الكاذب" (ملف PDF) . fernuni-hagen.de . مؤرشف (ملف PDF) من الأصل بتاريخ 9 أغسطس 2017. تم الاطلاع عليه بتاريخ 5 مايو 2018 .
- ↑ العديد: فكرة لاحقة مؤرشفة في 15 مارس 2016 على Wayback Machine ، LOOM.NET مؤرشفة في 27 أغسطس 2008 على Wayback Machine ، Enterprise Library 3.0 Policy Injection Application Block مؤرشفة في 19 يناير 2007 على Wayback Machine ، AspectDNG مؤرشفة في 29 سبتمبر 2004 على Wayback Machine ، DynamicProxy مؤرشفة في 5 ديسمبر 2015 على Wayback Machine ، Compose* مؤرشفة في 21 أغسطس 2005 على Wikiwix ، PostSharp مؤرشفة في 3 مايو 2016 على Wayback Machine ، Seasar.NET مؤرشفة في 25 يوليو 2006 على Wayback Machine ، DotSpect (.SPECT) مؤرشفة في 31 مارس 2006 على Wayback Machine ، Spring.NET مؤرشفة تمت أرشفة Wicca وPhx.Morph في 2 أبريل 2006 على موقع Wayback Machine (كجزء من وظائفها)، وتمت أرشفة SetPoint في 7 ديسمبر 2006 على موقع Wayback Machine .
- ↑ "مرحباً بكم في as3-commons-bytecode" . as3commons.org . مؤرشف من الأصل في 3 أكتوبر 2014. تم الاطلاع عليه في 5 مايو 2018 .
- ↑ "مبررات Ada2012" (ملف PDF) . adacore.com . مؤرشف (ملف PDF) من الأصل بتاريخ 18 أبريل 2016. تم الاطلاع عليه بتاريخ 5 مايو 2018 .
- ↑ "خطافات الوظائف" . autohotkey.com . تم الاطلاع عليه بتاريخ 5 مايو 2018 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ عدة: AspectC++ ، FeatureC++ ، AspectC (مؤرشف في 21 أغسطس 2006 على Wayback Machine) ، AspectC-oriented C (مؤرشف في 20 نوفمبر 2008 على Wayback Machine) ، Aspicere
- ↑ "Cobble" . vub.ac.be. تم الاطلاع عليه بتاريخ 5 مايو 2018 .
- ↑ "AspectCocoa" . neu.edu . مؤرشف من الأصل في 26 أكتوبر 2007. تم الاطلاع عليه في 5 مايو 2018 .
- ↑ "إطار عمل كولد سبرينغ: مرحباً" . 5 نوفمبر 2005. مؤرشف من الأصل في 5 نوفمبر 2005. تم الاطلاع عليه في 5 مايو 2018 .
{{cite web}}: CS1 maint: bot: حالة عنوان URL الأصلي غير معروفة ( رابط ) - ↑ "مشروع أقرب: AspectL" . مؤرشف من الأصل بتاريخ 23 فبراير 2011. تم الاطلاع عليه بتاريخ 11 أغسطس 2015 .
- ↑ "البنية التحتية - أطر عمل متكاملة لدلفي - استضافة مشاريع جوجل" . مؤرشف من الأصل في 9 سبتمبر 2015. تم الاطلاع عليه في 11 أغسطس 2015 .
- ↑ "meaop – MeSDK: MeObjects, MeRTTI, MeAOP – Delphi AOP (البرمجة الموجهة نحو الجوانب)، MeRemote، MeService... – استضافة مشاريع جوجل" . مؤرشف من الأصل بتاريخ 10 سبتمبر 2015. تم الاطلاع عليه بتاريخ 11 أغسطس 2015 .
- ↑ "استضافة مشاريع جوجل" . مؤرشف من الأصل بتاريخ 25 ديسمبر 2014. تم الاطلاع عليه بتاريخ 11 أغسطس 2015 .
- ↑ "RemObjects Cirrus" . codegear.com . مؤرشف من الأصل بتاريخ 23 يناير 2012. تم الاطلاع عليه بتاريخ 5 مايو 2018 .
- ↑ "وظائف نصائح إيماكس" . مشروع جنو. مؤرشف من الأصل في 24 أكتوبر 2011. تم الاطلاع عليه في 5 مايو 2018 .
- ↑ تسمح المونادات بتغيير دلالات البرنامج عن طريق تغيير نوع البرنامج دون تغيير شفرته: دي موتر، وولفغانغ (1997). "المونادات كأساس نظري للبرمجة الموجهة نحو الجوانب". ورشة العمل الدولية حول البرمجة الموجهة نحو الجوانب في مؤتمر ECOOP : 25. CiteSeerX 10.1.1.25.8262 . تابارو، نيكولاس؛ فيغيروا، إسماعيل؛ تانتر، إريك (مارس 2013). "تضمين أحادي مُنمذج للجوانب" . وقائع المؤتمر الدولي السنوي الثاني عشر حول تطوير البرمجيات الموجهة نحو الجوانب (ملف PDF) . Aosd '13. الصفحات 171-184 . doi : 10.1145/2451436.2451457 . ISBN 9781450317665. S2CID 27256161 . تتيح فئات الأنواع إضافة إمكانيات إضافية إلى نوع ما: سولزمان، مارتن؛ وانغ، مينغ (مارس 2007). "البرمجة الموجهة نحو الجوانب باستخدام فئات الأنواع" . وقائع ورشة العمل السادسة حول أسس لغات البرمجة الموجهة نحو الجوانب (ملف PDF) . الصفحات 65-74 . doi : 10.1145/1233833.1233842 . ISBN 978-1595936615. S2CID 3253858 . .
- ↑ العديد من البرامج الأخرى: CaesarJ ( مؤرشف بتاريخ 19-12-2008 في Wayback Machine) ، Compose* ( مؤرشف بتاريخ 21-08-2005 في Wikiwix) ، Dynaop ( مؤرشف بتاريخ 24-07-2007 في Wayback Machine) ، JAC ( مؤرشف بتاريخ 19-06-2004 في Wayback Machine )، Google Guice (كجزء من وظائفه)، Javassist ( مؤرشف بتاريخ 01-09-2004 في Wayback Machine )، JAsCo (وAWED) (مؤرشف بتاريخ 11-04-2005 في Wayback Machine)، JAML (مؤرشف بتاريخ 15-04-2005 في Wayback Machine ) ، JBoss AOP ( مؤرشف بتاريخ 17-10-2006 في Wayback Machine) ، LogicAJ ( مؤرشف بتاريخ 04-05-2006 في Wayback Machine) ، Object Teams (مؤرشف) مؤرشف بتاريخ 31 أغسطس 2005 في Wayback Machine ، PROSE مؤرشف بتاريخ 24 يناير 2007 في Wayback Machine ، مُجمِّع AspectBench لـ AspectJ (abc) مؤرشف بتاريخ 16 ديسمبر 2014 في Wayback Machine ، إطار عمل Spring (كجزء من وظائفه)، Seasar ، مشروع JMangler مؤرشف بتاريخ 28 أكتوبر 2005 في Wayback Machine ، InjectJ مؤرشف بتاريخ 5 أبريل 2005 في Wayback Machine ، GluonJ مؤرشف بتاريخ 6 فبراير 2007 في Wayback Machine ، Steamloom مؤرشف بتاريخ 18 أغسطس 2007 في Wayback Machine
- ↑Many: AdvisableArchived 2008-07-04 at the Wayback Machine, AjaxpectArchived 2016-07-09 at the Wayback Machine, jQuery AOP PluginArchived 2008-01-13 at the Wayback Machine, AspectesArchived 2006-05-08 at Wikiwix, AspectJSArchived 2008-12-16 at the Wayback Machine, Cerny.jsArchived 2007-06-27 at the Wayback Machine, Dojo ToolkitArchived 2006-02-21 at the Wayback Machine, Humax Web FrameworkArchived 2008-12-09 at the Wayback Machine, JooseArchived 2015-03-18 at the Wayback Machine, Prototype – Prototype Function#wrapArchived 2009-05-05 at the Wayback Machine, YUI 3 (Y.Do)Archived 2011-01-25 at the Wayback Machine
- ↑Using built-in support for categories (which allows the encapsulation of aspect code) and event-driven programming (which allows the definition of before and after event handlers).
- ↑"AspectLua". Archived from the original on 17 July 2015. Retrieved 11 August 2015.
- ↑"MAKAO, re(verse)-engineering build systems". Retrieved 11 August 2015.
{{cite web}}: CS1 maint: deprecated archival service (link) - ↑"McLab". Archived from the original on 24 September 2015. Retrieved 11 August 2015.
- ↑"AspectML – Aspect-oriented Functional Programming Language Research". Archived from the original on 5 December 2010. Retrieved 11 August 2015.
- ↑"nemerle/README.md at master · rsdn/nemerle". GitHub. Retrieved 22 March 2018.
- ↑Adam Kennedy. "Aspect – Aspect-Oriented Programming (AOP) for Perl – metacpan.org". Archived from the original on 31 August 2013. Retrieved 11 August 2015.
- ↑ عدة: PHP-AOP (AOP.io) مؤرشف بتاريخ 18-08-2014 على Wikiwix ، إطار عمل Go! AOP مؤرشف بتاريخ 01-03-2013 على Wayback Machine ، PHPaspect مؤرشف بتاريخ 22-08-2016 على Wayback Machine ، Seasar.PHP مؤرشف بتاريخ 26-12-2005 على Wayback Machine ، PHP-AOP ، Flow مؤرشف بتاريخ 04-01-2018 على Wayback Machine ، امتداد AOP PECL مؤرشف بتاريخ 11-04-2017 على Wayback Machine
- ↑ "البرمجة الموجهة نحو الجوانب في لغة برولوج" . bigzaphod.org . ١٤ ديسمبر ٢٠٠٥. مؤرشف من الأصل في ٣ مارس ٢٠١٢. تم الاطلاع عليه في ٥ مايو ٢٠١٨ .
- ↑ عدة: PEAK ( مؤرشف بتاريخ 9 أبريل 2005 في Wayback Machine) ، Aspyct AOP ، Lightweight Python AOP ( مؤرشف بتاريخ 9 أكتوبر 2004 في Wayback Machine) ، وحدة Aspect الخاصة بـ Logilab ( مؤرشف بتاريخ 9 مارس 2005 في Wayback Machine) ، Pythius ( مؤرشف بتاريخ 8 أبريل 2005 في Wayback Machine ) ، وحدة AOP الخاصة بـ Spring Python (مؤرشف بتاريخ 4 مارس 2016 في Wayback Machine) ، وحدة AOP الخاصة بـ Pytilities (مؤرشف بتاريخ 25 أغسطس 2011 في Wayback Machine ) ، aspectlib ( مؤرشف بتاريخ 5 نوفمبر 2014 في Wayback Machine)
- ↑ "مستودع حزم PLaneT : PLaneT > dutchyn > aspectscheme.plt" . مؤرشف من الأصل في 5 سبتمبر 2015. تم الاطلاع عليه في 11 أغسطس 2015 .
- ↑ "AspectR - برمجة بسيطة موجهة نحو الجوانب في روبي" . مؤرشف من الأصل بتاريخ 12 أغسطس 2015. تم الاطلاع عليه بتاريخ 11 أغسطس 2015 .
- ↑ دين وامبلر. "الوطن" . مؤرشف من الأصل في 26 أكتوبر 2007. تم الاطلاع عليه في 11 أغسطس 2015 .
- ↑ "gcao/aspector" . GitHub . مؤرشف من الأصل في 4 يناير 2015. تم الاطلاع عليه في 11 أغسطس 2015 .
- ↑ "AspectS" . tu-ilmenau.de . مؤرشف من الأصل في 6 يناير 2006. تم الاطلاع عليه في 5 مايو 2018 .
- ↑ "MetaclassTalk: Reflection and Meta-Programming in Smalltalk" . مؤرشف من الأصل بتاريخ 29 يوليو 2015. تم الاطلاع عليه بتاريخ 11 أغسطس 2015 .
- ↑ "WEAVR" . iit.edu . مؤرشف من الأصل في 12 ديسمبر 2008. تم الاطلاع عليه في 5 مايو 2018 .
- ↑ "aspectxml – محرك نسج XML موجه نحو الجوانب (AXLE) – استضافة مشاريع جوجل" . مؤرشف من الأصل بتاريخ 12 سبتمبر 2015. تم الاطلاع عليه بتاريخ 11 أغسطس 2015 .
للمزيد من القراءة
- كيتزاليس، ج .؛ لامبينغ، ج.؛ مينديكار، أ.؛ مايدا، س.؛ لوبيز، س.؛ لونغتير، ج.م.؛ إيروين، ج. (1997). البرمجة الموجهة نحو الجوانب (ملف PDF) . ECOOP'97. وقائع المؤتمر الأوروبي الحادي عشر حول البرمجة الموجهة نحو الكائنات . سلسلة محاضرات في علوم الحاسوب (LNCS). المجلد 1241. الصفحات 220-242 . CiteSeerX 10.1.1.115.8660 . doi : 10.1007/BFb0053381 . ISBN 3-540-63089-9.الورقة التي تعتبر عموماً المرجع الموثوق به لـ AOP.
- روبرت إي. فيلمان؛ تزيلا إلراد؛ سيوبان كلارك ؛ محمد أكسيت (2004). تطوير البرمجيات الموجهة نحو الجوانب . أديسون-ويسلي. ISBN 978-0-321-21976-3.
- رينو باولاك، ليونيل سينتورييه، وجان فيليب ريتيه (2005). أسس البرمجة الموجهة نحو الجوانب لتطوير تطبيقات جافا 2 إي إي . دار نشر أبريس. رقم ISBN 978-1-59059-507-7.
- لاداد، رامنيفاس (2003). AspectJ في العمل: البرمجة العملية الموجهة نحو الجوانب . مانينغ. ISBN 978-1-930110-93-9.
- جاكوبسون، إيفار ؛ بان-وي نغ (2005). تطوير البرمجيات الموجهة نحو الجوانب مع حالات الاستخدام . أديسون-ويسلي. ISBN 978-0-321-26888-4.
- تطوير البرمجيات الموجهة نحو الجوانب ولغة PHP، ديمتري شيكو، 2006
- سيوبان كلارك وإليسا بانياساد (2005). التحليل والتصميم الموجه نحو الجوانب: منهج الموضوع . أديسون-ويسلي. ISBN 978-0-321-24674-5.
- راغو يدولادودي (2009). تطوير البرمجيات الموجهة نحو الجوانب: منهج لتكوين نماذج تصميم UML . VDM. ISBN 978-3-639-12084-4.
- "البرمجة التكيفية الموجهة للكائنات باستخدام التخصيص القائم على الرسوم البيانية" - ليبرهير، سيلفا-ليبي، وآخرون - 1994
- زامبرانو بولو إي لا بوردا، أرتورو فيديريكو (5 يونيو 2013). "معالجة تفاعلات الجوانب في بيئة صناعية: تجارب ومشاكل وحلول" : 159. doi : 10.35537/10915/35861 . تاريخ الاسترجاع: 30 مايو 2014 .
{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal= - ويجيسوريا، فيراج برايان (30 أغسطس 2016) تطوير البرمجيات الموجهة نحو الجوانب، محاضرات، كلية علوم الحاسوب، جامعة كولومبو، سريلانكا
- غروفز، ماثيو د. (2013). البرمجة الموجهة نحو الجوانب في .NET . مانينغ. ISBN 9781617291142.
روابط خارجية
- قائمة إريك بودن لأدوات البرمجة الموجهة نحو الجوانب (AOP) في إطار عمل .NET
- تطوير البرمجيات الموجهة نحو الجوانب ، المؤتمر السنوي حول البرمجة الموجهة نحو الجوانب
- دليل برمجة AspectJ
- مُجمِّع AspectBench لـ AspectJ ، وهو تطبيق آخر للغة Java
- سلسلة مقالات من IBM developerWorks حول البرمجة الموجهة نحو الجوانب (AOP).
- لاداد ، رامنيفاس (18 يناير 2002). "أريد AOP الخاص بي!، الجزء الأول" . جافا وورلد . تم الاسترجاع في 20 يوليو 2020 .سلسلة مقالات مفصلة حول أساسيات البرمجة الموجهة نحو الجوانب و AspectJ
- ما هي البرمجة الموجهة نحو الجوانب؟، مقدمة مع RemObjects Taco
- معالج جوانب تحديد القيود
- البرمجة القائمة على الجوانب مقابل البرمجة الكائنية: أي تقنية، ومتى؟ (مؤرشف في 15 أبريل 2021 على موقع Wayback Machine)
- غريغور كيتشاليس، أستاذ علوم الحاسوب، يشرح مفهوم البرمجة الموجهة نحو الجوانب (AOP) ، فيديو مدته 57 دقيقة.
- البرمجة الموجهة نحو الجوانب في لغة كوبول ( مؤرشفة بتاريخ 17 ديسمبر 2008 على موقع Wayback Machine)
- البرمجة الموجهة نحو الجوانب في جافا باستخدام إطار عمل سبرينغ
- ويكي مخصص لأساليب البرمجة الموجهة نحو الجوانب (AOP) على .NET
- الجوانب المبكرة لنمذجة عمليات الأعمال (لغة موجهة نحو الجوانب لنمذجة عمليات الأعمال)
- مقدمة إلى Spring AOP و AspectJ
- دورة الدراسات العليا في معهد طب الأطفال في جامعة بيلكنت
- مقدمة إلى البرمجة الموجهة نحو الجوانب (AOP) - الحلقة 106 من بودكاست هندسة البرمجيات الإذاعي
- تطبيق Objective-C لـ AOP بواسطة Szilveszter Molnar
- البرمجة الموجهة نحو الجوانب لنظامي التشغيل iOS و OS X من تأليف مانويل جيبيلي
- إطار عمل DevExpress MVVM. مقدمة إلى نماذج عرض POCO
- البرمجة الموجهة نحو الجوانب
- تطوير البرمجيات الموجهة نحو الجوانب
- نماذج البرمجة
