مفاهيم توسعه مبتني بر جنبه (ادامه)

Download Report

Transcript مفاهيم توسعه مبتني بر جنبه (ادامه)

‫بسمهتعالي‬
‫فصل شانزدهم‬
‫توسعه مبتني بر جنبه ( ‪)Aspect-oriented Development‬‬
‫اهداف جلسه‬
‫‪‬‬
‫ذاتي بودن پيچيدگي نرمافزار‬
‫‪‬‬
‫توسعه نرمافزار مبتني بر جنبه‬
‫‪‬‬
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫انواع جنبهها و دستهبندي آنها‬
‫‪‬‬
‫توسعه نرمافزار مبتني بر جنبه‬
‫‪2‬‬
‫فهرست مطالب‬
‫‪‬‬
‫پيچيدگي ذاتي نرمافزار‬
‫‪‬‬
‫توسعه نرمافزارهاي مدرن و مشکالت آن‬
‫‪‬‬
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫نمونههاي توجه به جنبه‬
‫‪‬‬
‫تفاوت شي با جنبه‬
‫‪‬‬
‫توسعه نرمافزار مبتني بر جنبه‬
‫‪3‬‬
‫توسعه نرم‌افزار‬
‫نرمافزارهاي آينده‬
‫نرمافزارهاي موجود‬
‫نرمافزارهاي قديمي‬
‫توسعه نرمافزار از حالت ثابت‪ ،‬محاسباتي و دادهگرا‬
‫به حالت پويا‪ ،‬بسته به نياز و مولفهگرا تبديل شده است‬
‫‪4‬‬
)‫(ادامه‬
Complexity
‫واحدبندي روش ي‬
‫براي مهار پيچيدگي‬
‫است‬
‫توسعه نرم‌افزار‬
Object Oriented Programming
Data Abstraction
Modular Programming
Structured Programming
Compiled Programming Languages
Modularity
5
‫توسعه نرم‌افزار‬
‫(ادامه)‬
‫برنامهنويس ي ساختاريافته‬
‫‪ ‬راحتي خواندن و نوشتن‬
‫‪ ‬قابليت توسعه پائين‬
‫‪ ‬قابليت نگهداري پائين‬
‫‪ ‬قابليت استفاده مجدد پائين‬
‫‪ ‬فاقد واحدبندي‬
‫‪Program‬‬
‫‪Main program‬‬
‫‪data‬‬
‫‪i = 1‬‬
‫{ )‪while (i < 4‬‬
‫)‪print(i‬‬
‫‪i = i + 1‬‬
‫}‬
‫‪6‬‬
‫توسعه نرم‌افزار‬
‫(ادامه)‬
‫برنامهنويس ي رويه‌اي‬
‫‪Program‬‬
‫‪ ‬راحتي خواندن و نوشتن‬
‫‪ ‬قابليت توسعه بهبوديافته‬
‫‪Main program‬‬
‫‪data‬‬
‫‪ ‬قابليت نگهداري بهبوديافته‬
‫‪ ‬قابليت استفاده‌مجدد بهبوديافته‬
‫‪ ‬واحدبندي بهبوديافته‬
‫‪Procedure‬‬
‫‪1‬‬
‫‪Procedure‬‬
‫‪2‬‬
‫‪Procedure‬‬
‫‪n‬‬
‫‪7‬‬
‫توسعه نرم‌افزار‬
‫(ادامه)‬
‫برنامهنويس ي ش ي‌گرا‬
‫‪Program‬‬
‫‪ ‬راحتي خواندن و نوشتن‬
‫‪Object 1‬‬
‫‪data‬‬
‫‪ ‬قابليت توسعه خوب‬
‫‪ ‬قابليت نگهداري خوب‬
‫‪ ‬قابليت استفاده‌مجدد خوب‬
‫‪Object 4‬‬
‫‪data‬‬
‫‪Object 2‬‬
‫‪data‬‬
‫‪ ‬واحدبندي خوب‬
‫‪Object 3‬‬
‫‪data‬‬
‫‪8‬‬
‫توسعه نرم‌افزار‬
‫(ادامه)‬
‫نيازهاي وظيفهمندي‬
‫‪+‬‬
‫نيازهاي غيروظيفهمندي‬
‫‪+‬‬
‫نيازمنديهاي توسعه نرمافزار‬
‫پيچيدگي‬
‫‪9‬‬
‫توسعه نرم‌افزار‬
‫‪‬‬
‫(ادامه)‬
‫مشکالت روشهاي شيگرا از آنجا ناشي ميشود که‬
‫‪‬‬
‫نگاشت بين مولفهها اغلب يک به يک است‬
‫سبب تغيير يک يا چند‬
‫ميتواند‬
‫توسعهنيازمندي‬
‫تغيير‬
‫شودنگاهي بر‬
‫مولفه) با‬
‫‪Aspect-oriented‬‬
‫جنبه (‬
‫مبتنيهابر‬
‫‪‬‬
‫‪‬‬
‫دشوار‬
‫‪)Concerns‬‬
‫دغدغهوهاي (‬
‫محلي نمودن‬
‫استاست‬
‫شده‬
‫عموميارائه‬
‫بهينه آنها‬
‫پوشش‬
‫نيازمنديها‬
‫‪‬‬
‫‪‬‬
‫برخي اوقات اين کار امکانپذير نيست‬
‫تمرکز شيگرايي برر روي بهبرود برنامهنويسري و کردها اسرت‪ ،‬در حاليکره‬
‫نياز است تا تمرکز بر روي نيازمنديها باشد‬
‫‪‬‬
‫چالش اصلي توسعه نرمافزار‪ ،‬برآوردهسازي نيازمنديهاست‬
‫‪10‬‬
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫دغدغه (‪)Concern‬‬
‫‪‬‬
‫نيازمندي سيستم که براي ذينفعان اولويت دارد‬
‫‪‬‬
‫مجموعه خاصي از رفتارهاي مورد نياز براي يک برنامه‬
‫‪‬‬
‫بر ماژولهاي مختلف نرمافزار تاثير ميگذارد‬
‫‪‬‬
‫ميتوانند وظيفهمندي يا غيروظيفهمندي باشند‬
‫‪‬‬
‫‪‬‬
‫‪Logging and Debugging ،Performance ،Business logic‬‬
‫ميتوانند سطح باال يا سطح پائين باشند‬
‫‪‬‬
‫‪Caching ، Security, QoS‬‬
‫‪11‬‬
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫(ادامه)‬
‫جداسازي دغدغهها (‪ )Separation of concerns‬روشري برراي توجره‬
‫به آنها به صورت مجزاست که اجازه رهگيري شفاف نيازمنرديها‬
‫به پيادهسازي را ميدهد‬
‫‪‬‬
‫جداسازي در روشهاي سنتي از طريق واحدبندي و كپسولهسازي‬
‫فراهم ميگردد‬
‫‪‬‬
‫زبانهاي رويهاي دغدغهها را به رويهها تبديل ميكنند‬
‫‪‬‬
‫زبانهاي شيگرا دغدغهها را اشياء تبديل ميكنند‬
‫‪‬‬
‫طراحيهاي سرويسگرا دغدغهها را به سرويس تبديل ميكنند‬
‫‪12‬‬
)‫(ادامه‬
concern
concern
13
‫مفاهيم توسعه مبتني بر جنبه‬
concern
concern
Separation of concerns
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫(ادامه)‬
‫‪Core concerns‬‬
‫‪‬‬
‫دغدغههايي هستند که به اهداف اصلي سيستم مرتبط هستند و معموالً در‬
‫يک رويه‪ ،‬ماژول يا شي قرار ميگيرند‬
‫‪‬‬
‫‪Crosscutting Concerns‬‬
‫‪‬‬
‫بطور معمول در چندين رويه‪ ،‬ماژول يا شي قرار ميگيرند‬
‫‪‬‬
‫در هنگام تغيير به دو صورت مشکل ايجاد ميشود‬
‫‪‬‬
‫‪ : Tangling‬يک مولفه بيش از يک نيازمندي را پيادهسازي ميکند‬
‫‪‬‬
‫‪ : Scattering‬پيادهسازي يک نيازمندي توسط چند مولفه انجام ميشود‬
‫‪14‬‬
)‫(ادامه‬
‫مفاهيم توسعه مبتني بر جنبه‬
Program
Object 1
data
Object 4
data
Object 2
data
Object 3
data
Concern
Implementation
A
Object 1
B
Object 2
C
Object 3
D
Object 4
E
Object 1,2,3
Crosscutting Concerns
15
‫نمونه توجه به جنبه‬
Good modularization
XML parsing is implemented in its own module
16
)‫(ادامه‬
‫نمونه توجه به جنبه‬
Good modularization
URL pattern matching is implemented in 2 modules
17
)‫(ادامه‬
‫نمونه توجه به جنبه‬
Bad modularization
Logging is implemented in a lot of different places
18
)‫(ادامه‬
‫مفاهيم توسعه مبتني بر جنبه‬
)Tangling( ‫درهم پيچيدگي‬
synchronized void put (SensorRecoed rec) throws Interrupted Exception
{
if (numberOfEntries == bufsize)
wait ();
store [back] = new SensorRecord (rec.sensorId, rec.sensoral) ;
back = back + 1;
if (back == bufsize)
back =0;
numberOfEntries = numberOfEntries +1;
notify();
} // put
19
)‫(ادامه‬
‫مفاهيم توسعه مبتني بر جنبه‬
)Scattering( ‫پراكندگي‬
Patient
20
Image
Consultation
<attribute decls>
<attribute decls>
<attribute decls>
getName ()
editName ()
getAddress ()
editAddress ()
...
anonymise ()
...
getModality ()
archive ()
getDate ()
editDate ()
...
saveDiagnosis ()
saveType ()
...
makeAppoint ()
cancelAppoint ()
assignNurse ()
bookEquip ()
...
anonymise ()
saveConsult ()
...
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫(ادامه)‬
‫پيامدهاي درهم پيچيدگي و پراكندگي‬
‫‪‬‬
‫تغيير در يك دغدغه موجب تغيير در دغدغههاي ديگر مي شود‬
‫‪‬‬
‫عدم كشف نيازمنديهاي هر دغدغه از طريق كد منبع‬
‫‪‬‬
‫از بين بردن واحدبندي سيستم‬
‫‪‬‬
‫ضعف در درك و فهم‬
‫براي سيستم هاي بزرگ‬
‫قابليت درك‬
‫ضعيف‬
‫قابليت ضعيف‬
‫ي‬
‫نگهدار ‌‬
‫سختي توسعه‬
‫‪21‬‬
‫مفاهيم توسعه مبتني بر جنبه ‪ -‬انواع دغدغه‌ها‬
‫‪‬‬
‫کارکردي (‪)Functional‬‬
‫‪‬‬
‫‪‬‬
‫کيفيت سرويس (‪)Quality of Service‬‬
‫‪‬‬
‫‪‬‬
‫سياستهايي که بر استفاده از سيستم حاکم هستند‬
‫سيستم (‪)System‬‬
‫‪‬‬
‫‪‬‬
‫رفتار غيروظيفهمندي سيستم مرتبط هستند‬
‫سياست (‪)Policy‬‬
‫‪‬‬
‫‪‬‬
‫با وظيفهمندي خاصي از سيستم مرتبط هستند‬
‫برره خصوصرريات سيسررتم بررهعنوان يررک کررل ماننررد قابليررت نگهررداري و پيکربنررديش مرررتبط‬
‫هستند‬
‫سازماني (‪)Organisational‬‬
‫‪‬‬
‫به اهداف سازماني و اولويتهاي آن مرتبط هستند‬
‫‪22‬‬
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫(ادامه)‬
‫جنبه (‪)Aspect‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫تجريدي است که کد مرتبط با دغدغههاي ‪ cross-cutting‬را کپسوله ميکند‬
‫در هر جنبه اطالعاتي در مورد اينکه چه وقت بايرد بره کرد برنامره اضرافه‬
‫شود‪ ،‬وجود دارد‬
‫يك جنبه متشكل از دو بخش ‪ Pointcut, Advice Code‬است‬
‫جررايي در برنامرره کرره جنبرره ميتوانررد در آنجررا افررزوده شررود‪ ،‬نقطرره اتصررال‬
‫(‪ )Joint Point‬نام دارد‬
‫به مجموعهاي از نقاط اتصال در برنامه ‪ Pointcut‬گويند‬
‫‪23‬‬
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫‪Advice‬‬
‫‪‬‬
‫‪‬‬
‫پيادهسازي کد يک دغدغه‬
‫‪Waving‬‬
‫‪‬‬
‫‪‬‬
‫(ادامه)‬
‫تلفيق کد ‪ Advice‬در برنامه با استفاده از‬
‫‪Aspect Weaver‬‬
‫‪Joint Point Model‬‬
‫‪‬‬
‫مجموعهاي از رويدادها که ميتوانند در يرک ‪ Pointcut‬مرورد اشراره قررار‬
‫گيرند‬
‫‪24‬‬
‫مفاهيم توسعه مبتني بر جنبه‬
‫‪‬‬
‫انواع محلهاي قرارگيري‬
‫(ادامه)‬
‫‪JP‬‬
‫‪‬‬
‫متدها‪ :‬فراخواني و اجراي متد دو تا ‪ JP‬محسوب ميشوند‬
‫‪‬‬
‫سازندهها‪ :‬فراخواني و اجراي يك سازنده‪ ،‬نوعي از ‪ JP‬ها است‬
‫‪‬‬
‫استتنناهها‪ :‬رخ دادن استثناء و اجراي رفتار مورد انتظار‪ -‬دو نقطه اصلي‬
‫در اجراي يك برنامه كاربردي‪ -‬نوعي از ‪ JP‬ها است‬
‫‪‬‬
‫فيلتدها‪ :‬عمليات خواندن و نوشتن بر روي فيلدها ميتوانند بره عنروان‬
‫‪JP‬‬
‫در نظر گرفته شوند‬
‫‪25‬‬
Aspect ‫نمونه‬
aspect authentication
{
before: call (public void update* (..)) // this is a pointcut
{
// this is the advice that should be executed when woven into
// the executing system
int tries = 0 ;
string userPassword = Password.Get ( tries ) ;
while (tries < 3 && userP assword != thisUser.password ( ) )
{
// allow 3 tries to get the password right
tries = tries + 1 ;
userPassword = Password.Get ( tries ) ;
}
if (userPassword != thisUser.password ( )) then
//if password wrong, assume user has forgotten to logout
System.Logout (thisUser.uid) ;
}
} // authentication
26
Aspect weaving
‫ کد منبع را پردازش نموده و جنبهها را در برنامه‬Aspect Weavers

‫ خاصي قرار ميدهد‬Pointcut ‫و در‬
‫سه روش براي قرار دادن جنبهها‬
27
Source Code pre-processing

Link-time weaving

Dynamic, Execution-time weaving


Aspect weaving
28
‫نمونه استفاده از جنبه‬
‫‪‬‬
‫سيستم مديريت هتل‬
‫‪29‬‬
‫نمونه استفاده از جنبه‬
‫‪‬‬
‫(ادامه)‬
‫تحقق بخشيدن به دغدغهها‬
‫‪30‬‬
‫نمونه استفاده از جنبه‬
‫‪‬‬
‫(ادامه)‬
‫تحقق بخشيدن به دغدغهها‬
‫‪31‬‬
‫نمونه استفاده از جنبه‬
‫‪‬‬
‫(ادامه)‬
‫تحقق بخشيدن به دغدغهها‬
‫‪32‬‬
)‫(ادامه‬
‫نمونه استفاده از جنبه‬
‫كد پيادهسازي‬
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
33
public aspect CheckInCustomer {
...
public void Room.assignCustomer ()
{
// code to check in customer
}
public void Reservation.consume()
{
// code to consume reservation
}
public void Payment.createBill()
{
// code to generate an initial outstanding bill
}

‫ش ي و جنبه‬
‫‪‬‬
‫‪‬‬
‫شباهت‬
‫‪‬‬
‫هر دو داراي نوع هستند‬
‫‪‬‬
‫ميتوانند به کالسهاي ديگر يا جنبههاي ديگر توسعه داده شوند‬
‫‪‬‬
‫ميتوانند بهصورت تجريد باشند‬
‫‪‬‬
‫ميتوانند داراي فيلد‪ ،‬متدها و نوع داده باشند‬
‫تفاوت‬
‫‪‬‬
‫جنبهها ميتوانند به صفات ديگر اعضا دسترسي داشته باشند‬
‫‪34‬‬
‫توسعه نرم‌افزار مبتني بر جنبه‬
‫‪‬‬
‫توسررعه مبتنرري بررر جنبرره برره اسررتفاده از جنبرره در توليررد و توسررعه‬
‫نرمافزار اشاره دارد‬
‫‪‬‬
‫هماننررد مترردولوژيهاي ديگررر‪ ،‬مترردولوژيهاي مبتنرري بررر جنبرره نيررز‬
‫فازهاي مشابه خود را دارند‪ ،‬اما خود را مبتني بر جنبه ميدانند‬
‫‪35‬‬
)‫(ادامه‬
‫توسعه نرم‌افزار مبتني بر جنبه‬
... Requirements Engineering
... Architecture
... Design
Aspect-oriented...
... Programming
... Verification techniques
... Middleware
36
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
‫‪‬‬
‫روشي بهمنظور تمرکز بر روي دغدغههاي مشتري کره برا توسرعه‬
‫جنبهگرا سازگار است‬
‫‪‬‬
‫پايه اين روش ‪Viewpoint‬ها هستند‬
‫‪‬‬
‫استفاده از ‪Viewpoint‬ها براي جداسازي دغدغهها‬
‫‪‬‬
‫اسرررتفاده از ‪Viewpoint‬هرررا برررراي نمرررايش نيازمنرررديهاي گروههررراي مررررتبط‬
‫ذينفعان‬
‫‪‬‬
‫‪concerns‬‬
‫‪ Cross-cutting‬دغدغههايي که توسط تمرام ‪Viewpoint‬هرا مشرخ‬
‫ميشوند‬
‫‪37‬‬
)‫(ادامه‬
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
Viewpoints
Concerns
Equ ipmen t
Users
Man ag ers
THE SYSTEM
Organisatio n
Society
Reg ulatio n
38
Secu rity
Dep en dab ility
Cross-cutting
concerns
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
‫‪‬‬
‫‪‬‬
‫(ادامه)‬
‫نيازمنديهاي اصلي (‪)Core Requirements‬‬
‫‪‬‬
‫همان دغدغههاي اصلي (‪ )Core Concerns‬هستند‬
‫‪‬‬
‫هدف از توسعه سيستم دستيابي به نيازمنديهاي اصلي است‬
‫نيازمنديهاي توسعهاي (‪)Extension Requirements‬‬
‫‪‬‬
‫مجموعهاي از ‪ Cross-cutting Concerns‬هستند‬
‫‪39‬‬
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫نمونه‪ :‬فروشگاه زنجيرهاي آنالين‬
‫‪‬‬
‫مجموعهاي از فروشگاهها که خدمات خرود را بره صرورت اينترنتري ارائره‬
‫ميدهند‬
‫‪‬‬
‫کاربران با مشاهده کاالها‪ ،‬درخواست خريد خود را ارائه ميدهند‬
‫‪‬‬
‫کاال براي کاربر بوسيله پست ارسال ميشود‬
‫‪‬‬
‫‪‬‬
‫ايررن فروشررگاهها داراي يررک انبررار مرکررزي هسررتند کرره کاالهرراي خررود را از‬
‫آنجا تهيه و در صورت خرابي به آنجا ارسال مينمايند‬
‫در صررورت خرابرري يررا نقر‬
‫خريد آن را عودت دهد‬
‫در کرراال‪ ،‬کرراربر ميتوانررد ‪ 48‬سرراعت پررس از‬
‫‪40‬‬
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫نمونه ديدگاه‪ :‬فروشگاه زنجيرهاي آنالين‬
‫‪‬‬
‫ديد کاربران‬
‫‪‬‬
‫جستجوي کاالها‬
‫‪‬‬
‫مشاهده موجودي هر کاال‬
‫‪‬‬
‫مشاهده موجودي کاال در فروشگاههاي خا‬
‫‪‬‬
‫پيدا کردن نزديکترين فروشگاه‬
‫‪‬‬
‫درخواست خريد کاال‬
‫‪‬‬
‫گزارش عدم دريافت کاال‬
‫‪‬‬
‫گزارش خرابي کاالي خريداري شده‬
‫‪‬‬
‫‪...‬‬
‫‪41‬‬
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫نمونه ديدگاه‪ :‬فروشگاه زنجيرهاي آنالين‬
‫‪‬‬
‫ديد فروشنده‬
‫‪‬‬
‫تقاضاي کاال از انبار مرکزي‬
‫‪‬‬
‫جستجوي کاالها‬
‫‪‬‬
‫مشاهده موجودي کاالها‬
‫‪‬‬
‫مشاهده‪ ،‬بررسي و تائيد درخواست خريد کاال‬
‫‪‬‬
‫مشاهده‪ ،‬بررسي و تائيد گزارش خرابي کاال‬
‫‪‬‬
‫ارسال کاالي داراي نق‬
‫‪‬‬
‫‪...‬‬
‫به انبار مرکزي‬
‫‪42‬‬
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫نمونه ديدگاه‪ :‬فروشگاه زنجيرهاي آنالين‬
‫‪‬‬
‫ديد انباردار‬
‫‪‬‬
‫ارسال کاال به فروشگاه متقاضي‬
‫‪‬‬
‫جستجوي کاالها در انبار مرکزي‬
‫‪‬‬
‫بررسي و تعويض کاالي داراي نق‬
‫‪‬‬
‫بارکدگذاري کاالهاي انبار‬
‫‪‬‬
‫بروز نگهداري اطالعات موجودي انبار‬
‫‪‬‬
‫‪...‬‬
‫‪43‬‬
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫نمونه ديدگاه‪ :‬فروشگاه زنجيرهاي آنالين‬
‫‪‬‬
‫نيازمنديهاي اصلي‬
‫‪‬‬
‫کاربران ميتوانند کاالها را جستجو و مشاهده نمايند‬
‫‪‬‬
‫کررراربران مجررراز (شناسرررايي شرررده) ميتواننرررد اطالعرررات کامرررل کررراال را مشررراهده و‬
‫درخواست خريد کنند‬
‫‪‬‬
‫فروشندگان ميتوانند موجودي کاالي خود را مشاهده و تغيير دهند‬
‫‪‬‬
‫انباردار ميبايست برنامه زمانبندي تعويض کاال را ايجاد نمايد‬
‫‪‬‬
‫‪...‬‬
‫‪44‬‬
‫مهندس ي نيازمندي‌هاي جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫نمونه ديدگاه‪ :‬فروشگاه زنجيرهاي آنالين‬
‫‪‬‬
‫نيازمنديهاي توسعهاي‬
‫وظيفهمندي‬
‫‪‬‬
‫کاربر و فروشنده ميتوانند برنامه زماني تعويض کاال را مشاهده نمايرد (ديرد کراربر‬
‫‪ +‬ديد فروشنده ‪ +‬ديد انباردار)‬
‫‪‬‬
‫کرراربر و انبرراردار ميتواننررد گررزارش خرابرري کرراالي تائيررد شررده توسررط فروشررنده را‬
‫غيروظيفهمندي‬
‫مشاهده نمايند (ديد کاربر ‪ +‬ديد فروشنده ‪ +‬ديد انباردار)‬
‫‪‬‬
‫اطالعات کاربران‪ ،‬فروشندگان و انبارداران به صورت رمزشده ذخيره ميشود‬
‫‪45‬‬
‫معماري جنبه‌گرا‬
‫‪‬‬
‫معمراري سيسرتم جنبررهگرا برپايرا معمراري سيسررتمهاي اصرلي (‬
‫‪Core‬‬
‫‪ )Systems‬و توسعهها (‪ )Extensions‬است‬
‫‪Ext 2‬‬
‫‪Ext 1‬‬
‫‪Ext 3‬‬
‫‪Core system‬‬
‫نيازمنديهاي اصلي‬
‫نيازمنديهاي توسعهاي‬
‫‪Ext 4‬‬
‫‪Ext 6‬‬
‫‪Ext 5‬‬
‫‪46‬‬
‫معماري جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫انواع توسعهها‬
‫‪‬‬
‫توسعههاي کارکردي ثانويه‬
‫‪‬‬
‫‪‬‬
‫توسعههاي سياستي (‪)Policy‬‬
‫‪‬‬
‫‪‬‬
‫قابليتهررراي کرررارکردي را برررراي حمايرررت از سياسرررتهاي سرررازماني (ماننرررد امنيرررت)‬
‫ميافزايد‬
‫توسعههاي کيفيت سرويس (‪)QoS‬‬
‫‪‬‬
‫‪‬‬
‫قابليتهايي کارکردي اضافهاي را به سيستم اصلي ميافزايد‬
‫قابليتهاي کارکردي را براي کمک به نگهداري کيفيت سرويس ميافزايد‬
‫توسعههاي زيرساختي (‪)Infrastructure‬‬
‫‪‬‬
‫قابليتهاي کارکردي را براي حمايت از پيادهسازي سيسرتم روي سرکوهاي مختلرف‬
‫ميافزايد‬
‫‪47‬‬
‫طراحي جنبه‌گرا‬
‫‪‬‬
‫فرآيند طراحي سيستمي از جنبهها براي پيادهسرازي‬
‫‪cross-cutting‬‬
‫‪ concerns‬و ديگرررر نيازمنرررديهايي کررره در طرررول فرآينرررد مهندسررري‬
‫نيازمنديها شناسايي شدهاند‪ ،‬استفاده ميکند‬
‫‪‬‬
‫طراحرررري جنبررررهگرا بايررررد بهگونررررهاي انجررررام شررررود کرررره دو مشررررکل‬
‫‪ Scattering‬و ‪ Tangling‬به کمترين حد خود برسد‬
‫‪48‬‬
)‫(ادامه‬
‫طراحي جنبه‌گرا‬
Program
Program
Object 1
data
Object 1
data
Object 4
data
Object 2
data
Object 2
data
Object 3
data
Object 3
data
Aspect
Implicit invocation
49
Object 4
data
‫طراحي جنبه‌گرا‬
‫(ادامه)‬
‫‪‬‬
‫مورد کاربري ميتواند به عنوان جنبه در نظر گرفته شود‬
‫‪‬‬
‫ايده اسرتفاده از مرورد کراربري برراي جنبره توسرط ‪ Jacobsen‬و براا‬
‫استفررااده از مفررااهيم جاديررادي چرراون‬
‫‪slices‬‬
‫‪ use-case‬و‬
‫‪use-case‬‬
‫‪ modules‬ارائه شده است‬
‫‪‬‬
‫مررورد کرراربري توسررعهاي بررراي نمررايش مرردل معمرراري جنبررهگراي‬
‫اصلي ‪ +‬توسعهها بکار ميرود‬
‫‪50‬‬
)‫(ادامه‬
‫طراحي جنبه‌گرا‬
‫مورد کاربري توسعهاي‬
ĒextendČ
View maintenance
schedule
User
51
View item

‫طراحي جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫فرآيند انجام طراحي جنبهگرا‬
‫‪‬‬
‫براي بررسي عدم همپوشاني جنبهها بايد تعارض بين جنبهها شناسايي و‬
‫رفع شود‬
‫‪52‬‬
)‫(ادامه‬
‫طراحي جنبه‌گرا‬
‫ براي جنبهها‬UML ‫استفاده از‬
‫مدلي نه چندان کامل از تعريف جنبه‬
ĒaspectČ
Maintenance
pointcuts
viewMain = call getItemInfo (..)
mainco = call removeItem (..)
main ci = call addItem (..)
class extensions
ViewMaintenanceHistory
<viewItem> { after (<viewMain>)displayHistory}
More extensions here
53


‫برنامه‌نويس ي جنبه‌گرا‬
‫‪‬‬
‫‪‬‬
‫انقالبي در شيوه فكر كردن در زمينه مهندسي نرمافزار‬
‫بررراي اولررين بررار توسررط‬
‫‪Kiczales‬‬
‫‪ Gregor‬در سررال ‪ 1997‬معرفرري‬
‫شد‬
‫‪‬‬
‫مكانيزم جداسازي پيشرفته دغدغهها نيز اطالق ميشود‬
‫‪‬‬
‫زبانهاي پشتيبانيكننده جنبه‬
‫‪‬‬
‫‪ :AspectJ‬يررك بسررته كرره امكانررات ‪ AOP‬را برره زبرران برنامرره نويسرري جرراوا‬
‫اضافه ميكند‬
‫‪‬‬
‫‪, HyperJ‬‬
‫‪Aspeckwerkz , Jboss-AOP‬‬
‫‪54‬‬
‫آزمايش جنبه‌گرا‬
‫‪‬‬
‫هماننررد سرراير سيسررتمها‪ ،‬سيسررتمهاي جنبررهگرا ميتواننررد بهص رورت‬
‫جعبه سياه مورد آزمايش قرار گيرند‬
‫‪‬‬
‫‪‬‬
‫آزمايش جعبه سفيد آنها پيچيده و وابسته به کد برنامه‬
‫مشکالت آزمايش جنبهها‬
‫‪‬‬
‫رابط جنبه چگونه ميتواند آزمايش شود؟‬
‫‪‬‬
‫چگونه جنبهها ميتوانند مستقل از سيستم اصلي آزمايش شوند؟‬
‫‪‬‬
‫چگونه ميتوان آزمايشي طراحي نمود که همه نقراط اتصرال اجررا شرده و‬
‫جنبههاي مناسب مورد آزمايش قرار گيرند؟‬
‫‪55‬‬
‫آزمايش جنبه‌گرا‬
‫‪‬‬
‫(ادامه)‬
‫توليد گراف جريان برنامه براي جنبهها غيرممکن است‪ ،‬به همرين‬
‫دليل طراحي آزمايشراتي کره تضرمين دهنرد همره ترکيبرات جنبرهها و‬
‫کد اصلي اجرا شوند‪ ،‬دشوار است‬
‫‪‬‬
‫پوشش آزمايش (‪ )test coverage‬معناي خاصي ندارد‬
‫‪‬‬
‫کد هر جنبه يکبار اجرا شود؟‬
‫‪‬‬
‫کد هر جنبه در هر نقطه اتصالي که جنبه قرار داده شده است يکبار اجرا‬
‫شود؟‬
‫‪‬‬
‫؟‬
‫‪56‬‬
‫پرسش و پاسخ‬
‫‪57‬‬