بوينتكت

في البرمجة الموجهة نحو الجوانب ، تُعرف نقطة الربط بأنها مجموعة من نقاط الربط . تُحدد نقطة الربط بدقة مكان تطبيق التوجيه ، مما يسمح بفصل الاهتمامات ويساعد في تصميم منطق العمل بشكل معياري. [ 1 ] غالبًا ما تُحدد نقاط الربط باستخدام أسماء الفئات أو أسماء الدوال، وفي بعض الحالات باستخدام تعابير نمطية تُطابق أسماء الفئات أو الدوال. تدعم الأطر البرمجية المختلفة تعابير نقاط الربط المختلفة؛ ويُعتبر بناء جملة AspectJ معيارًا فعليًا. تتوفر أطر برمجية للغات برمجة متنوعة مثل Java و Perl و Ruby وغيرها الكثير التي تدعم نقاط الربط .

خلفية

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

تنفيذ

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

مثال

لنفترض وجود تطبيق يسمح لنا بتعديل السجلات في قاعدة بيانات . عندما يُعدّل المستخدمون قاعدة البيانات، نرغب في الحصول على سجل معلومات حول هوية المُعدِّل. الطريقة التقليدية للتسجيل هي استدعاء دالة تسجيل قبل تعديل قاعدة البيانات مباشرةً. باستخدام البرمجة الموجهة نحو الجوانب، يمكننا تطبيق نقطة قطع على دالة تعديل قاعدة البيانات، والحصول على توجيه يتم استدعاؤه لتسجيل المعلومات المطلوبة. [ 3 ]

تعابير الوجه

فيما يلي بعض تعابير القطع المهمة التي يدعمها AspectJ . يمكن دمج هذه التعابير باستخدام عوامل التشغيل المنطقية. [ 4 ]

التنفيذ ( void User . setPassword ( password ))

تتوافق نقطة القطع هذه مع تنفيذ طريقة User.setPassword.

استدعاء ( void User . getPassword ())

عند استدعاء User.getPassword، تتم مطابقة نقطة الربط هذه.

المعالج ( ArrayIndexOutOfBounds )

ستتطابق نقطة القطع عند حدوث استثناء ArrayIndexOutOfBounds

هذا ( نوع المستخدم )

ستتطابق نقطة القطع عندما يكون الكائن الذي يتم تنفيذه حاليًا من نوع المستخدم.

الهدف ( نوع المستخدم )

ستتطابق نقطة القطع عندما يكون الكائن المستهدف من نوع المستخدم.

ضمن ( نوع المستخدم )

ستتطابق نقطة القطع عندما ينتمي الكود الذي يتم تنفيذه إلى نوع المستخدم.

الانتقادات

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

مراجع

  1. "تصنيف بنى اللغة ذات النقاط المقطوعة" (ملف PDF) . تم الاطلاع عليه بتاريخ 29 ديسمبر 2019 .
  2. "مقدمة إلى AspectJ" . تم الاطلاع عليه بتاريخ 14 سبتمبر 2016 .
  3. "دليل مستخدم JBoss AOP" . docs.jboss.org . تم الاطلاع عليه بتاريخ 14-09-2016 .
  4. "نقاط الربط والوصلات" . تم الاطلاع عليه بتاريخ 14 سبتمبر 2016 .
  5. 1 2 "نقاط القطع المولدة استقرائياً لدعم إعادة هيكلة الجوانب". 2004. CiteSeerX 10.1.1.2.594 .