• 0
ramyhhh

فصل الجوانب AOP - Aspect Oriented Programming

سؤال

السلام عليكم ورحمة الله

 

أود ان امر على موضوع مفيد جدا في عالم البرمجة عموما ثم توضيح تطبيقاته من خلال لغة سي شارب والذي يتطلب معرفة واتقال للبرمجة الكائنية أو غرضية التوجه OOP

 

ما هو فصل الجوانت Separation of concerns ؟

 

كما هو معلوم فإن البرمجية الكائنية أو غرضية التوجه طرحت مصطلح الكائن object والصنف class من أجل تنظيم الكود البرمجي ضمن هذه الأصناف بحيث يتحمل كل كلاس مسؤولية محددة من البرنامج ككل مثلا كلاس ادارة الحساب المصرفي , يتبادر إلى الذهن ان مثل هكذا كلاس سيحوي توابع متعلقة بالحساب المصرفي مثل سحب الرصيد والإيداع والتحويل على الشكل المبسط:

 

class BankAccount

{

      int Balance;

      

      bool Withdraw(int amount)

      {

            if(Balance >= amount) { Balance -= amount; return true;} else return false;

      }

 

}

 

المشكلة في تصميم الكلاسات في OOP أنها لا تحوي حل للجوانب المتشابكة cross cutting concerns أي بمعنى آخر هناك منطق في البرنامج يفرض نفسه في أكثر من مكان على سبيل المثال تابع التحقق من هوية المستخدم الحالي وعليه فإننا في التصميم السابق سنضيف استعاء لتابع تحقق من المستخدم الحالي قبل منطق التابع نفسه في كل من سحب الرصيد والايداع والتحويل وحتى في جوانب أخرى مثل تعديل المعلومات الشخصية للمستخدم.

 

 

class BankAccount

{

      int Balance;

      

      bool Withdraw(int amount)

      {

           if( ! ValidUser() ) throw new Exception("Not valid user");

 

            if(Balance >= amount) { Balance -= amount; return true;} else return false;

      }

 

}

 

وكمثال آخر تابع مثل التحقق من الاتصال قبل البداية بالإجراء ضمن كل تابع فيه اتصال سيجعل التحقق من الاتصال موجود في كلاسات لا تعنى بهذا الجانب ومن هنا جاءت فكرة البرمجة الموجه إلى فصل الجوانب AOP والتي تعرف مصطلحات جديدة للعالم البرمجة.

 

 

 

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

0 إجابة على هذا السؤال .

لاتوجد إجابات على هذا السؤال حتى الآن .

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .