اسپکت‌جی

بندانگشتی|AJDT in Eclipse
**AspectJ** یک تعمیم برنامه‌نویسی جنبه‌گرا است که برای زبان برنامه‌نویسی جاوا در شرکت **[[زیراکس پارک]]** ایجاد شده‌است. این افزونه در بنیاد پروژه‌های متن باز Eclipse Foundation در دسترس است. اما هر دو مستقل و یکپارچه شده‌اند. AspectJ به‌طور گسترده‌ای برای برنامه‌نویسی جنبه‌گرا استاندارد شده‌است و همزمان بر سادگی و قابلیت استفاده برای کاربران نهایی تأکید دارد. این زبان از نحو سبه جاوا استفاده می‌کند و شامل یک محیط یکپارچه توسعه نرم‌افزار برای نمایش ساختار Cross-cutting است. انتشار اولیهٔ آن در سال ۲۰۰۱ بوده‌است.

## توضیح سادهٔ زبان
همه برنامه‌های معتبر جاوا (زبان برنامه‌نویسی) همچنین برنامه‌های AspectJ معتبر هستند. اما AspectJ به برنامه نویسان اجازه می‌دهد تا تعریف خاص یک ساختار به نام جنبه* را ایجاد کنند. *. aspects می‌تواند شامل چندین موجودیت غیرقابل دسترس به استاندارد کلاس باشد. اینها هستند:

### روش‌های توسعه
: به یک برنامه‌نویس اجازه می‌دهد تا روش، زمینه، یا رابط به کلاس‌های موجود از درون جنبه را اضافه کند به عنوان مثال یک `acceptVisitor` (نگاه کنید به الگوی بازدید کننده) روش به کلاس `نقطه` :

: 
```aspectj
aspect VisitAspect {
  void Point.acceptVisitor(Visitor v) {
    v.visit(this);
  }
}
```


### نقاط برش
: به برنامه‌نویس اجازه می‌دهد برای مشخص کردن نقاط اتصال (حالت‌های به خوبی تعریف شده در اجرای یک برنامه مانند روش تماس شی نمونه یا متغیر دسترسی). همه pointcuts عباراتی (quantifications) هستند که تعیین می‌کنند که آیا یک نقطه اتصال منطبق م ناسب است یا خیر. برای مثال این نقطه برش منطبق اجرای هر روش نمونه در یک شی از نوع `Point` که با `set`آغاز می‌شود:

: 
```aspectj
pointcut set() : execution(* set*(..) ) && this(Point);
```


### توصیه‌ها و کمک‌ها
: AspectJ به برنامه‌نویس اجازه می‌دهد برای اتصال به نقطه همسان با pointcutکد اجرا را تعیین کند. این اقدامات انجام می‌شود *قبل* *بعد*و یا *در حین * مشخص شدن نقطهٔ اتصال انجام می‌شود. در اینجا advice برای هر چیزی که در `point` تنظیم شده است عمل تازه سازی نمایش را انجام می‌دهد. با استفاده از pointcut که در بالا توضیخ داده شد:

: 
```aspectj
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 (رهبر حال حاضر پروژه AspectJ) و اندرو کلمنت (مهندس زمان کامپایلر).

کامپایلر 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 در هر دو حالت تجاری و پروژه‌های منبع باز استفاده شود.

## جستارهای وابسته
* **[[برنامه‌نویسی جنبه‌گرا]]**
* Spring AOP (بخشی از چارچوب بهار)
* توسعه نرم‌افزار جنبه گرا
## پیوند به بیرون
* صفحهٔ رسمی

## منابع
* زیراکس دارای پتنت [//www.google.com/patents/US6467086 ایالات متحده ثبت اختراع 6,467,086] برای AOP/AspectJ اما کد منبع AspectJ تحت مجوز رایج عمومی منتشر شده‌استکه کمک‌های مالی برخی از حقوق ثبت اختراع است.
* http://www.eclipse.org/aspectj/doc/released/progguide/index.html
* AJDT
* https://web.archive.org/web/20170816093700/http://www.sable.mcgill.ca/abc/
* http://www.ibm.com/developerworks/java/library/j-aspectj
* Spring AOP and AspectJ مقدمه
* AspectWerkz صفحه خانگی پروژه

رده:اکلیپس
رده:برنامه‌نویسی جنبه‌گرا
رده:توزیع نرم‌افزار
رده:توسعه نرم‌افزار جنبه‌گرا
رده:خانواده زبان برنامه‌نویسی جاوا
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۲۰۰۱ (میلادی)
رده:زبان‌های برنامه‌نویسی سطح بالا
رده:فناوری اکلیپس
رده:نرم‌افزار اکلیپس
رده:نرم‌افزارهای آزاد چندسکویی
رده:نرم‌افزارهای چندسکویی
رده:نرم‌افزارهای ۲۰۰۱ (میلادی)
رده:نرم‌افزارهایی که از پروانه اکلیپس استفاده می‌کنند