تاريخچه ي پيدايش زبان هاي برنامه نويسي جنبه گرا Aspect Oriented Programming
جنبهها انقلابي در شيگرايي هستند و راه حلهايي را براي برخي از مشکلاتي ارائه ميدهند که ممکن است در مسير مدلسازي برنامهها با آنها مواجه شويد.
در ابتداي پيدايش علوم کامپيوتر، برنامهنويسان کدهايي در سطح ماشين مينوشتند. به همين دليل بيشتر توجه آنان معطوف به مجموعه دستورات ماشين بود. به تدريج زبانهاي سطح بالا ايجاد شد و در نتيجه توجه برنامهنويسان بيشتر به اصل مسئله معطوف گرديد. اکنون سطح انتزاعي بر روي کامپيوترهاي مختلف ايجاد شده است. يعني برنامهي نوشته شده روي هر ماشين اجرا ميشود.
در زبانهاي ساختيافته ، برنامه را به تعدادي روال تقسيم مينمودند، بدين صورت که هر روال کار خاصي را انجام ميداد. برنامهنويسي شيگرايي اجازه ميدهد تا سيستمي داراي اشياي مرتبط و همکار داشته باشيد. کلاس ها اين امکان را فراهم ميکنند که جزييات پيادهسازي را پشت واسط برنامهنويسي پنهان نماييد. چندشکلي يا چندريختي ، رفتار و واسط مشترکي را براي مفاهيم مشابه نشان ميدهد. بدين وسيله قادر خواهيد بود تا پيمانههاي خاص و جديدي را بدون نياز به دستکاري در پيادهسازي مفاهيم پايه ايجاد نماييد.
روشهاي برنامهنويسي و زبانها در واقع راه ارتباط با ماشين را تعريف ميکنند. هر روش جديد، شيوههاي نو را براي تجزيهي مساله ارائه ميدهد که عبارتند از: کد ماشين، کد مستقل از ماشين، روالها، کلاسها و غيره. هر شيوهي جديد، نگرشي تازه جهت تبديل نيازهاي سيستم به زيرساختهاي برنامهنويسي ارائه ميدهد. تکامل اين نوع شيوههاي برنامهنويسي امکاني را فراهم مينمايد تا سيستمهاي پيچيدهتري ايجاد کنيد. عکس اين مطلب نيز صادق ميباشد. يعني سيستمهاي پيچيده ميتوانند پيادهسازي شوند.
اکنون، برنامهنويسي شيگرا به عنوان روش ايجاد پروژههاي نرمافزاري استفاده ميشود. اين شيوه قدرت خود را در مدلسازي رفتارهاي معمولي نشان داده است. اما اين روش به خوبي نميتواند بر روي رفتارهايي که بين چندين پيمانه مشترک وجود دارند، کار کند. برعکس، شيوهي جنبهگرا تا حد قابل توجهي اين مشکل را برطرف ميکند.
در سال 1972 پارانز مفهومي به نام جداسازي دغدغهها را مطرح کرده که امروزه جزء مفاهيم اساسي در فرآيند مهندسي نرمافزار به شمار ميآيد. اين مفهوم به صورت زير تعريف شده است:
"قابليت تشخيص، کپسولهسازي و کار با دغدغه، هدف و يا مقصود هستند"
دغدغه را ميتوان به عنوان محرکي براي تقسيم نرمافزار به بخشهاي قابل مديريت درنظر گرفت. براي نمونه، يک وظيفهمندي خاص نرم افزار و مسائلي که به خواستههاي غيروظيفهمندي مرتبط ميشوند مانند ثبت وقايع، امنيت و غيره، همگي به عنوان دغدغه هستند، البته با توجه به جداسازي دغدغهها آنها را در قالب واحدهاي مستقل کپسوله کردهاند.
در سال 1997، مشهورترين رويکرد زبان جنبهگرا به نام AspectJ ابتدا توسط گروهي در Xerox PARC عموميت يافت. اين گروه روي پروتکلها و ايدهي مدلسازي دغدغههاي مشترک کار ميکردند. در همان حال، گروهي در شرکت IBM برنامهنويسي موضوعگرا را مطرح کردند. برنامهنويسي موضوعگرا و عناوين بعدي آن، تحت نام "جداسازي چندبعدي دغدغهها"، به جداسازي و ادغام پيمانههاي مختلف برنامهنويسي بر پايهي دغدغههايي در ابعاد مختلف پرداختهاند. [1]
نخستين کار در دانشگاه Twente هلند انجام يافت که در مورد فيلترهاي ادغامسازي کار ميکردند. به طوري که در پيادهسازي فيلترهايي که رفتار شي را در اجرا پيشرفت ميدادند دخيل بودند. در دانشگاه Northeastern نيز انتزاعي از ساختار کلاسها انجام گرفت که پشتيباني بهتري از مفهوم دانش و رفتار عملياتي ارائه ميداد. در سال 1997، کريستيانا لوپز از هر دو مقاله استفاده کرد و زبان D-Java را به عنوان اولين مجموعهي رسمي از زبان جنبهگرا ارائه نمود.
شيوهي موضوعي اولين روشي بود که مفاهيم جنبهگرايي را با زبان مدلسازي يکپارچه ادغام کرد. اين کار مشترکي از چندين گروه با گروه برنامهنويسي موضوعگرا است. برنامهنويسي موضوعگرا به طراحي موضوعگرا تبديل شده و در سال 2001 به Theme/UML تبديل گرديد. تعريف و نمايش دغدغهها براي نخستين بار در مستندات اليسا و گيل مورفي از دانشگاه British Columbia ارائه شد و در سال 2003 به عنوان بخشي از شيوهي موضوعي طراحي جنبهگرا به نام Theme/Doc مطرح گرديد.
حدود يک دههي قبل، به دنبال موفقيت درخور توجه ابزار CASE ، چيکوفسکي و کراس مبحث مهندسي معکوس و بازيابي طراحي را مطرح نمودند. تعريفي که آنها از مهندسي معکوس داشتند در زير ارائه شده است:
"مهندسي معکوس، تحليل يک سيستم به منظور تشخيص اجزا، ترکيبات فعلي، روابط بينابين آنها، استخراج و توليد تجريدهاي موجود در سيستم و دادههاي مربوط به طراحي است." [2]
در دو دههي قبل، محققان امکاناتي را به منظور کشف، اعمال تغيير، تحليل، جمعبندي، توليد، تجزيه و به تصوير کشيدن محصولات نرمافزاري ابداع کردند. اين امکانات شامل تهيهي اسناد نرمافزاري در شکلهاي گوناگون، نمايش کد مياني، داده و معماري بود. اغلب ابزارهاي مهندسي معکوس بر استخراج ساختار دروني سيستم موجود با هدف انتقال آن به ذهن مهندس نرم افزار تمرکز دارد. در هر صورت، اين ابزارها راه زيادي در پيش دارند تا به مرحلهاي برسند که مورد استفادهي روزانهي مهندسان نرمافزار قرار گيرند. مطالعه و درک برنامه در صنعت نرمافزار به منظور کنترل هزينه و ريسک چرخهي تحولات سيستمهاي نرمافزاري از اهميت بالايي برخوردار ميباشد.
منابع :
1. R. Laddad, “AspectJ in Action - PRACTICAL ASPECT-ORIENTED PROGRAMMING”, Manning Publications, 2003 .
2. H. A. Muller, “Reverse Engineering: A Roadmap”, ComputerScienceDepartmentUniversity of Victoria, Canada . * ارسال مقاله توسط عضو محترم سايت با نام کاربري : sm1372/خ