امروزه توسعهدهندگان برای بیان طرحی کاملاً پیمانهای و مدل کپسولهسازی مشکل دارند. در واقع تکنیکهای برنامهنویسی شیگرا تمامی طراحیهای مهم مورد نیاز در پیادهسازی برنامهها را تامین نمیکنند. همچنین باید گفت که متدها نیز در بعضی از اوقات کارایی ندارند. به عنوان مثال، قصد دارید در برنامهنویسی شیگرا خطوطی از کد را در کلاسهای متعددی تکرار نمایید. بنابراین هر کلاس نیاز به یک متد خواهد داشت که این کد را درون کلاس پیادهسازی نماید. با روش شیگرا قادر نخواهید بود آن متد را در یک کلاس جداگانه پیادهسازی کنید. این فرآیند بیان کنندهی نیاز به استخراج جنبهها است. در شیگرایی، نرمافزار را از بعد وظیفهمندی به اجزای کوچکتری تقسیم کرده و به بعد غیروظیفهمند به اندازهی بعد وظیفهمند بها داده نمیشود. وجود بعد غیروظیفهمند در درون بعد وظیفهمند سبب میگردد تا موارد مرتبط با بعد وظیفهمندی، در قالب کپسولهسازی مستقل پدیدار نگردند. درعوض، اجزایی از نرمافزار که مسئول پوشش وظیفهمندی سیستمها هستند پراکنده میشوند. مفاهیمی که به خواستههای غیروظیفهمند مربوط میشوند، محیط اشیا را تشکیل میدهند. در صورتی که نرمافزار را با شیوهی شیگرایی به اجزای کوچکتری تقسیم کنید، مشکلات زیر را در آن مشاهده خواهید کرد: • درهمریختگی کد برنامه: بدینمعنی که یک کلاس، دربرگیرندهی چند مفهوم میباشد. مفاهیم مربوط به خود کلاس و مفاهیم مربوط به خواستههای غیروظیفهمندی که محیط کلاس را تشکیل میدهند. این امر سبب پیچیدگی شده و نگهداری نرمافزار را مشکل مینماید. • پراکندگی مفاهیم در کد برنامه: به دلیل آنکه مفاهیم مربوط به خواستههای غیروظیفهمند در قالب واحدهای کپسولهسازی مجزا ظاهر نمیشوند، از این رو در کلاسهای مختلف پراکنده میگردند. این پراکندگی سبب کاهش تحملپذیری کلاس در برابر تغییرات این مفاهیم میشود. همچنین قابلیت استفادهی مجدد کلاسها پایین میآید. با توجه به مشکلات یاد شده، بهتر است تغییراتی در نرمافزارهایی که قابلیت استفادهی مجدد آنها بالا است اعمال گردد. بدینسان، قابلیت پیکربندی اجزای مختلف نرمافزار برای قرار گرفتن در محیطهای مختلف مهیا میگردد. علاوه براین، قابلیت استفادهی مجدد به محیط اشیا و خواستههای غیروظیفهمندی نیز داده میشود. روش جنبهگرا با تقسیمبندی بخشهای مختلف برنامه، پیچیدگی برنامه را کاهش میدهد. در واقع با کاهش پیچیدگی، طراحی، درک و همچنین نگهداری سیستم نرمافزاری آسانتر خواهد شد. علاوه بر این، برنامهنویسی جنبهگرا باعث تولید محصولاتی با بهرهوری بالا، کیفیت بهتر و اضافه کردن قابلیتهای بیشتر میگردد. مشکل دیگر در برنامههای شیگرا، وجود دغدغه است. دغدغه هدفی مشخص، مفهوم یا یک حوزهی کاری میباشد. یک سیستم نرمافزاری عادی دارای دغدغههای متعددی است. این دغدغهها از لایهی مرکزی تا لایههای سیستمی یک برنامهی نرمافزاری ادامه دارند. برای نمونه، دغدغهی اصلی یک سیستم پردازش کارت اعتباری، پردازش پرداختها میباشد. اما دغدغههای سیستمی آن، ثبت وقایع، یکپارچه کردن تراکنشها، شناسایی کاربر، امنیت، کارآیی و غیره هستند. بسیاری از این دغدغهها به دغدغههای تداخلی معروف هستند که بر پیادهسازی پیمانههای مختلف برنامه تاثیر میگذارند. شیوهی جنبهگرا مکانیزمهایی را در اختیار توسعهدهندگان قرار میدهد تا بتوانند کدهایی که بیانگر دغدغههای متداخل باشد را بنویسند. در صورت استفاده از شیوههای برنامهنویسی کنونی، دغدغههای تداخلی روی تعداد زیادی از پیمانههای برنامه پخش شده و اثر میگذارند. به همین دلیل طراحی و درک سیستم مورد نظر سختتر و همچنین پیادهسازی آن پیچیدهتر خواهد شد. تغییر در چنین سیستمی دشوار است. برنامهنویسی جنبهگرا بهتر از روشهای متداول قبلی، دغدغهها را از پیمانههای سیستم جدا میکند. پس میتوان از تداخل دغدغهها جلوگیری نمود. میتوان بطور خلاصه چنین نتیجهگیری نمود که هر جنبه، شاخص وظیفهای خاص از وظایف یک سیستم است. به همین دلیل جهت تشخیص وظایف، نیاز به استخراج جنبهها از متن برنامههای شیگرا میباشد. استخراج جنبهها و تعیین حدود هر جنبه در داخل کد برنامهها موجب افزایش خوانایی و قابلیت توسعه برنامه میگردد. مقولهی استفادهی مجدد معمولاً در قالب عملیات مطرح است و نه کلاسها. لذا، با استخراج و تعیین سرحد جنبهها امکان استفادهی مجدد از کد برنامهها افزایش مییابد.منبع: G. Kiczales, J. Lamping, A. Mendhekar, C. Maeda, C. V. Lopes, J. M. Loingtier and J. Irwin, “Aspect-Oriented Programming”, proceedings of the European Conference on Object-Oriented Programming (ECOOP), Finland, 1997. E. Filman, T. Elrad, S. Clarke and M. Aksit, “Aspect-Oriented Software Development”, Addison Wesley Professional, 2004. J. D. Gradecki and N. Lesiecki, “Mastering AspectJ - Aspect-Oriented Programming in Java”, Wiley Publishing, 2003. N. Loughran and A. Rashid, “Mining Aspects”, Lancaster University, UK, 2002. |