اسپکت‌جی

AspectJ یک تعمیم برنامه‌نویسی جنبه‌گرا است که برای زبان برنامه‌نویسی جاوا در شرکت PARC ایجاد شده است. این افزونه در بنیاد پروژه‌های متن باز Eclipse Foundation در دسترس است. اما هر دو مستقل و یکپارچه شده‌اند. AspectJ به طور گسترده‌ای برای برنامه‌نویسی جنبه‌گرا استاندارد شده است و همزمان بر سادگی و قابلیت استفاده برای کاربران نهایی تاکید دارد. این زبان از نحو سبه جاوا استفاده می‌کند وشامل یک محیط یکپارچه توسعه نرم‌افزار برای نمایش ساختار Cross-cutting است. انتشار اولیه آن در سال ۲۰۰۱ بوده است.
توضیح ساده زبان
همه برنامه‌های معتبر جاوا (زبان برنامه‌نویسی) همچنین برنامه‌های AspectJ معتبر هستند. اما AspectJ به برنامه نویسان اجازه می‌دهد تا تعریف خاص یک ساختار به نام جنبه را ایجاد کنند. . aspects می‌تواند شامل چندین موجودیت غیرقابل دسترس به استاندارد کلاس باشد. اینها هستند:
روش‌های توسعه
به یک برنامه‌نویس اجازه می‌دهد تا روش، زمینه، یا رابط به کلاس‌های موجود از درون جنبه را اضافه کند به عنوان مثال یک acceptVisitor (نگاه کنید به الگوی بازدید کننده) روش به کلاس نقطه :
aspect VisitAspect {
void Point.acceptVisitor(Visitor v) {
v.visit(this);
نقاط برش
به برنامه‌نویس اجازه می‌دهد برای مشخص کردن نقاط اتصال (حالت‌های به خوبی تعریف شده در اجرای یک برنامه مانند روش تماس شی نمونه یا متغیر دسترسی). همه pointcuts عباراتی (quantifications) هستند که تعیین می‌کنند که آیا یک نقطه اتصال منطبق م ناسب است یا خیر. برای مثال این نقطه برش منطبق اجرای هر روش نمونه در یک شی از نوع Point که با set آغاز می‌شود:
pointcut set() : execution(* set*(..) ) -- this(Point);
توصیه‌ها و کمک‌ها
AspectJ به برنامه‌نویس اجازه می‌دهد برای اتصال به نقطه همسان با pointcutکد اجرا را تعیین کند. این اقدامات انجام می‌شود قبل بعدو یا در حین مشخص شدن نقطه اتصال انجام می‌شود. در اینجا advice برای هر چیزی که در point تنظیم شده است عمل تازه سازی نمایش را انجام می‌دهد. با استفاده از pointcut که در بالا توضیخ داده شد:
after () : set() {
Display.update();
برای توضیحات بیشتر را ببینید.
سازگاری و پیاده‌سازی AspectJ
AspectJ می‌تواند در بسیاری از روش هااجرا شود از جمله منبع بافی یا bytecode بافی و همچنین به طور مستقیم در ماشین مجازی (VM). در تمام موارد AspectJ به عموان یگ برنامه معتبر در ماشین مجازی جاوا
اجرا می‌شود. کلاس‌های متاثر از جنبه‌های دودویی-سازگار با تاثیرپذیری از کلاس (برای باقی ماندن سازگاری با کلاس‌های وارد شده با تاثیرپذیری اصلی). حمایت از پیاده‌سازی‌های متعدد اجازه می‌دهد تا زبان به رشد تغییرات تکنولوژی و پلت فرم در دسترس سازگار با جاوا را تضمین می‌کند.
کلید موفقیت آن، مهندسی و زبان تصمیم‌گیری است که آن را تبدیل به یک زبان قابل استفاده و برنامه‌های گسترش پذیر می‌کند.. AspectJ اصلی شرکت زیراکس برای اجرای منبع بافی مورد استفاده که نیاز به دسترسی کد منبعرا داراست. زمانی که زیراکس کد منبع را با اکلیپس به اشتراک گذاشت.AspectJ با استفاده از Eclipse Java compiler و یک bytecode ویور بر اساس BCELدوباره پیاده‌سازی شده بود؛ بنابراین توسعه دهندگان می‌تواند نوشتن جنبه به صورت کد باینری (کلاس) را انجام دهند. در این زمان زبان برنامه‌نویسی AspectJ به حمایت چند کلاس مدل ضروری محدود شده بود. این محیط یکپارچه توسعه نرم‌افزار باعث افزایش جذابیت نسبت دیگر همتایانه جاوایی خود شد؛ و آن توسعه دهندگان اجازه استقرار جنبه‌های بدون تغییر ساخت روند می‌داد. این منجر به افزایش پذیرش AspectJ به عنوان یک زبان قابل استفاده برای برنامه نویسان جاوا و حتی در سطح سازمانی شد. پس از آن تیم اکلیپس عملکردو صحت آن را افزایش داد. به روز رسانی زبان AspectJ برای پشتیبانی از ویژگی‌های زبان Java 5 مانند generics و حاشیه نویسیو حاشیه نویسی یکپارچه-سبک خالص-جاوا.
پروژه اکلیپس هم از خط فرمان و هم مورچه رابط پشتیبانی می‌کند.. یک پروژه مرتبط با پروژه اکلیپس به طور پیوسته Eclipse IDE پشتیبانی (AJDT) را برای AspectJ بهبود می‌دهد. IDE از ایمکس، NetBeans و JBuilder را زمانی که زیراکس آن را در در کد کتن باز قرار داده است پشتیبانی می‌کند اما پشتیبانی اوراکل از JDeveloper ظاهر می‌شود. IDE وسیله‌ای شده است برای برنامه نویسانی جاوا یی که ازبان AspectJ استفاده می‌کنند برای درک و ربط به crosscutting.
BEA یک VM محدود شده برای حمایتافزونه س جنبه گرای پیشنهاد داد ولی برایافزونه ئهای پشتیبانی شده در تمام Java VMها نیازمند تایید Java Community Process است.
علاقه علمی در معانی و اجرای زبان‌های جنبه گرادر احاطه AspectJ پس از انتشار آن است. تحقیقات آینده در رابطه با کاپایلر aspect bench یا abcاست؛ که از افزونه تغییر متن کد یامعانی زبان برنامه‌نویسی و فرم‌های پایه‌ای بسیاری از آزمایش‌های AOP که تیم Aspectj از ان پشتیبانی کمی کرد، پشتیبانی می‌کند؛ که به آن یک پایه گسترده کاربری می‌کند.
بسیاری از برنامه نویسان پی برده‌اند که زبان برنامه‌نویسی AspectJ به عنوان یک فناوریدر دسترس برای دیگر پروژه‌ها به ویژه اسپرینگ فریمورک
می‌تواند باشد. خواهر خوانده پروژه اسپرینگ Spring Roo به طور خودکار توضیح نوع ورودی AspectJ را به عنوان کد خروجی تولیدی اصلی ادامه می‌دهد.
تاریخچه و همکاران
توسط Gregor Kiczales آغاز شده و توسط تیم شرکت Xerox PARC هدایت شده که در نهایت باعث توسعه AspectJ شد. او واژه crosscutting را بداع کرد. Chris Maeda واژه برنامه‌نویسی جنبه گرا را ابداع کرد. Jim Hugunin و Erik Hilsdale کامپایلر اصلی. Mik Kersten اجرا IDEو شروع پروژه Eclipse AJDT با Adrian Colyer (رهبر حال حاضر پروژه ) و اندرو کلمنت (مهندس زمان کامپایلر).
کامپایلر AspectBench توسعه یافته و نگهداری می‌شود به عنوان یک تلاش مشترک از ابزارهای برنامه‌نویسی گروهی در آزمایشگاه دانشگاه آکسفورد، تیم تحقیقاتی sable در دانشگاه مک گیل و موسسه تحقیقات پایه در علوم رایانه (BRICS).
AspectWerkz
AspectWerkz پویا، سبک و با کارایی بالا ی فریمورک AOP/PIPO برای جاوا است. باادغام آن با پروژه که باعث پشتیبانی از قابلیت‌های AspectWerkz پس از AspectJ 5 شده.
Jonas Boner و Alex Vasseur پروژه AspectWerkz را مهندسی کرده‌اند و بعد از آن که پروژه AspectJ با AspectWerkz ادغام شد سبک حاشیه نویسی و زمان بارگذاری پشتیبانی می‌کند.
بر خلاف زبان برنامه‌نویسی AspectJ قبل از نسخه 5 AspectWerkz، هیچ ساختار زبانی جدیدی به جاوا اضافه نکرد، اما به جای آن از توضیح جنبه‌های حاشیه نویشی جاوا پشتیبانی کرد. آن با بهره‌گیری از اصلاح bytecodeبرای درست کردن کلاس‌ها در پروژه، زمان لود شدن کلاس و همچنین در زمان اجرا. آن از JVM level APIs. استاندارد شده استفاده کرد. جنبه‌ها می‌توانند تعریف بشوند با استفاده از حاشیه نویسی جاوا.
AspectWerkz از یک API برای استفاده از جنبه‌های مشابه برای پروکسی‌ها فراهم کرده است. از این رو یک تجربه انتقال فراهم کرده که یک ارائه شفاف انتقال برای استفاده کنندهگان مشابه پروکسی‌ها است.
AspectWerkz یک نرم‌افزار رایگان است. مجوز گنو ال‌جی‌پی‌ال اجازه می‌دهد از AspectWerkz 2.0 در هر دو حالت تجاری و پروژه‌های منبع باز استفاده شود.
Aspect-oriented programming
Spring AOP (بخشی از چارچوب بهار)
توسعه نرم‌افزار جنبه گرا
کتابشناسی
زیراکس دارای پتنت برای AOP/AspectJ اما کد منبع AspectJ تحت منتشر شده استکه کمک‌های مالی برخی از حقوق ثبت اختراع است.
http://www.eclipse.org/aspectj/doc/released/progguide/index.html
http://www.sable.mcgill.ca/abc
http://www.ibm.com/developerworks/java/library/j-aspectj