تاریخچه ی پیدایش زبان های برنامه نویسی جنبه گرا 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”, Computer Science Department University of Victoria, Canada.
برداشت و نگارش: سیدمصطفی مفیدیان