# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > تحلیل و طراحی نرم افزار > سوال: فرق رابطه Extend و Include در Usecase دياگرام

## shayesteh_bh

با سلام خدمت دوستان, 
ممكنه فرق رابطه Extend و Include در Usecase دياگرام را برام توضيح بدين؟
با تشكر.

----------


## CAPABLE

رابطه Include يعني اجباري و رابطه Extend يعني اختياري.
به اين معني كه اگر use case ي مثلا A با رابطه Include به يك use case ديگر مثل B وصل شود ( جهت فلش ازAبه B است)  ، actor ي كه كار A را انجام ميدهد، _حتما_ بايد كار B را نيز *انجام دهد* ولي اگر اين رابطه Extend باشد ( جهت فلش ازB به A است) ، actor ي كه كار A را انجام مي دهد *مي تواند* كار B را انجام دهد.

----------


## smhoseyni

> رابطه Include يعني اجباري و رابطه Extend يعني اختياري.
> به اين معني كه اگر use case ي مثلا A با رابطه Include به يك use case ديگر مثل B وصل شود ( جهت فلش ازAبه B است)  ، actor ي كه كار A را انجام ميدهد، _حتما_ بايد كار B را نيز *انجام دهد* ولي اگر اين رابطه Extend باشد ( جهت فلش ازB به A است) ، actor ي كه كار A را انجام مي دهد *مي تواند* كار B را انجام دهد.


فاعل اجرای use-case ها سیستم است نه actor

----------


## shayesteh_bh

> فاعل اجرای use-case ها سیستم است نه actor


ببخشيد ميشه راجع به اين جمله بيشتر توضيح دهيد تا بتونم به  نتيجه اي برسم؟

----------


## CAPABLE

actor مي تواند انساني، سيستمي و يا سخت افزار باشد.

----------


## Homa2008

اگر use case اصلی شما با Usecase دیگری نسبت Include پیدا می کند  در واقع Usecase اصلی به آن وابسته اجباری می شود و تا وقتی عملیات آن Usecase پایان نپذیرد (خواه توسط Actor خواه یک عملیات درون سیستمی مانند محاسبه تخفیف فاکتور) usecase اصلی عملیاتش پایان نخواهد یافت ، در حالی که رابطه Extend  وابستگی از نوع اختیاری یعنی تکمیل عملیات Usecase فرعی تاثیری در اجرای usecase اصلی ندارد مانند: چاپ فاکتور در صدور فاکتور

----------


## shayesteh_bh

بله اين رو مي دونم , منظورم گفته كاربر  *smhoseyni* بود كه گفته بودند : "فاعل اجرای use-case ها سیستم است نه actor"

----------


## smhoseyni

use-case ها برای توصیف نیازمندی های رفتاری سیستم مورد استفاده قرار میگیرند. در نتیجه عملیاتی که در آنها توصیف میشود را سیستم اجرا میکند و نقش actor صرفا تبادل اطلاعات مورد نیاز برای اجرای ان عملیات است. 
در واقع هدف از بیان ان جمله تصحیح عبارت دوستمان بود مبنی بر اینکه "actor بخشهای include شده را الزاما اجرا میکند"؛ در واقع* سیستم* بخش های include شده را الزاما اجرا میکند.

اما در مورد تفاوت Extend  و UML هم چند نکته عرض کنم. 
بطور کلی از extend براي مدل‌كردن بخش‌هاي اضافي و الحاقي يك use-case پايه استفاده مي‌شود ولی از include بيشتر براي مدل‌كردن بخش‌هاي مشترك use-case هاي مختلف استفاده مي‌شود. و اگر بخواهم دقیق تر بیان کنم،
*معمولا از extend در یکی از حالات زیر استفاده می‌شود* :
- مدل کردن حالتی که اختیاری (انتخابی) است و جزئی از جریان اصلی و ضروری نیست.
- مدل کردن بخش ELSE که بخش IF در use-case پایه قرار گرفته است.
- مدل کردن وضعیتی که در آن یکی از چند حالت ممکن رخ می‌دهد (همانند switch case)
*ولی کاربرد include معمولا در یکی از موارد زیر است* : 
- بخواهیم یک بخش مشترک که در چندین use-case مورد استفاده قرار میگیرد را یک بار تعریف کنیم و در چند جا مورد استفاده قرار دهیم (یک مثال معروف : بخش هویت شناسی کاربر برای use-case های پرداخت پول و انتقال پول در ATM)
- بخواهیم یک بخش از جریان کاری use-case را که فقط نتیجه آن برایمان مهم است از جریان اصلی جدا کنیم تا بیان فهمیدن جریان اصلی ساده تر شود. (مثلا نتیجه ارزیابی اعتبار یک مشتری برای انجام فروش الکترونیکی)

*از تفاوت های دیگر Include و extend می توان به موارد زیر اشاره کرد :* 
1- در مورد include، مورد کاربرد پایه به آنکهinclude شده وابسته است و در مورد extend برعکس است.
2- در extend، مورد-کاربرد پايه بدون منشعب شده هم بايد كامل باشد ولی در مورد include پايه بدون include شده ناقص است.

----------


## SHAHAB_ERP

لطفا هم براي Business usecase مثال بزنيد و هم براي system usecase مرسي.
فكر ميكنم دوستاني كه روي Actor  بحث ميكنند اين دو بخش را تفكيك نميكنند . چون Actor  در نمودارهاي business و در نمودارهاي system  مفهوم متفاوتي دارد .
خود usecase  هم در يك دياگرام business  و در يك نمودار system ‌مفاهيم متفاوتي دارد .
مثلا business actor‌ حتما خارج از سازمان است مثلا مشتري يا ارباب رجوع است . و ممكن است هيچ كاري هم به كار سيستم ما نداشته باشد .

----------


## impression

> لطفا هم براي Business usecase مثال بزنيد و هم براي system usecase مرسي.
> فكر ميكنم دوستاني كه روي Actor بحث ميكنند اين دو بخش را تفكيك نميكنند . چون Actor در نمودارهاي business و در نمودارهاي system مفهوم متفاوتي دارد .
> خود usecase هم در يك دياگرام business و در يك نمودار system ‌مفاهيم متفاوتي دارد .
> مثلا business actor‌ حتما خارج از سازمان است مثلا مشتري يا ارباب رجوع است . و ممكن است هيچ كاري هم به كار سيستم ما نداشته باشد .


 من فکر می کنم که به انتظارات کاربر از سیستم می گوییم system use caseو به انتظارات business می گوییم business use case. به بیان دیگر business use case نیازمندی business‌ است و system use case نحوه ای است که ما به این نیازمندی پاسخ می دهیم.
به عنوان مثال فرض کنید که ما در یک سازمان یک contact centre‌ می زنیم که مسئولیت آن پاسخ گویی به امور مشتریان است. حالا اینکه در سازمان یک جایی برای برقراری ارتباط با مشتری باشد، یک business use case‌ است چرا که برای مشتری تنها این برقراری ارتباط مهم است و نه شیوه انجام آن. ولی اینکه  ما این نیازمندی را از چه طریقی برطرف می کنیم، می شود system use case.
لطفا اگر اشتباه می کنم، اساتید گرامی تصحیح کنند.

----------


## Elham_gh

برداشت impression   درست است.Business Use case مربوط به Problem space است , system use case  مربوط به Solution space.فقط مفهوم  System  Use case   استفاده نمي شود. چون اگر use caseي business ي نباشد ، سيستمي است. حتي فط  notation مروبوط به business use case  يا  business Actor  متفاوت است.

----------


## SHAHAB_ERP

> من فکر می کنم که به انتظارات کاربر از سیستم می گوییم system use caseو به انتظارات business می گوییم business use case. به بیان دیگر business use case نیازمندی business‌ است و system use case نحوه ای است که ما به این نیازمندی پاسخ می دهیم.
> به عنوان مثال فرض کنید که ما در یک سازمان یک contact centre‌ می زنیم که مسئولیت آن پاسخ گویی به امور مشتریان است. حالا اینکه در سازمان یک جایی برای برقراری ارتباط با مشتری باشد، یک business use case‌ است چرا که برای مشتری تنها این برقراری ارتباط مهم است و نه شیوه انجام آن. ولی اینکه ما این نیازمندی را از چه طریقی برطرف می کنیم، می شود system use case.
> لطفا اگر اشتباه می کنم، اساتید گرامی تصحیح کنند.


ببخشيد اومدم بحث رو فيصله بدم بيشتر منحرفش كردم .
من مثال ميخوام در اين دو وادي براي تفاوت includ ‌و extend ‌نه مقايسه business و system.

----------


## behrouzlo

رابطه Include يعني اجباري و رابطه Extend يعني اختياري.
در رابطه Include تصور کنید که یک تابع تابع دیگر را بدون هیچ شرطی اجراء می کند.


function1(){
....
function2()
......
}

در رابطه Extend  تصور کنید که یک تابع تابع دیگر را وقتی که شرط خاص رخ می دهد اجراء می کند.


function1(){
....
if(){
function2()
}

......
}

----------


## behrouzlo

یک مثال دیگر را در نظر بگیرید فکر کنید شما می خواهید از روی یک کتاب آشپزی پیتزا درست کنید، انواع مختلف از پیتزاها در کتاب شرح داده شده است ولی در تهیه همه این پیتزاها یک مرحله مشترک است تهیه خمیر پیتزا. پس برای ساده تر شدن کار نویسنده یک قسمت ( usescase) را به تهیه خمیر تخصیص می دهد و دیگر تهیه خمیر را برای تک یک پیتزاها به صورت جداگانه نمی نویسد. و هر وقت شما خواستید یک پیتزا تهیه کنید به بخش تهیه خمیر ارجاع داده می شود و پس از تهیه خمیر ادامه سناریو تهیه پیتزا مورد نظر خود را ادامه می دهید. این یعنی رابطه Include 
فرضی کنید شما در حال تهیه سوپ از روی همان کتاب آشپزی هستید، و نمک زیادی روی آش می ریزد و آش شور می شود (قسمت شرطی) در این حالت نویسنده شما را به قسمت ترفندهای آشپزی ارجاع می دهد و می گوید که مثلا با ریختن سیب زمینی می توانید باعث جذب شوری آش شوید.  ولی اگر آش شور نشود شما نیازی به مراجعه به قسمت ترفندهای آشپزی ندارید
این یعنی رابطه Extend

----------


## impression

یک مثال یک کم کامپیوتری تر:
هویت شناسی در سیستم باید در ابتدای ورود کاربر انجام شود و بعد از آن کاربر می تواند با توجه به سطح دسترسی خود از امکانات سیستم استفاده کند. بنابراین هویت شناسی usecase ای است که در تمام usecase‌های دیگر include‌می شود.
اما به عنوان مثال فرض کنید که شما پس از ورود به سایت برنامه نویس و انجام هویت شناسی، چه کارهایی می توانید انجام دهید؟ مثلا می توانید یک تاپیک را بخوانید. بعد از خواندن آن تاپیک شما می توانید روی آن پاسخ بگذارید یا اینکه از نویسنده تاپیک تشکر کنید. گذاشتن پاسخ و تشکر از نویسنده، دو usecase است که در خواندن یک تاپیک extend می شود. یعنی کاربر می تواند آنها را انجام بدهد یا انجام ندهد.

----------


## Neo2011

اشتباه میکنید عزیزم. business UC یعنی تمام عملیاتی که در سیستم انجام میشود. منظور از تمام عملیات اینه که هم عملیاتی که توسط نرم افزار انجام میشه و هم عملیاتی که توسط انسان و .... . اما System UC عملیاتی که فقط توسط نرم افزار انجام میشه رو نشون میدیم.

----------


## sand3vich2631

سلام.
*smhoseyni ،تفاوت Extend  و Include را خیلی خوب توضیح دادین.
*

می شه لطفا در مورد مثالی که ذکر می کنم هم توضیح بدین؟
مثلا در مورد ثبت پرداخت های متفاوت یک شرکت ، که این پرداخت ها ممکن است از طریق چک،فیش،نقد و یا کارت اعتباری باشند.
Actor که مسئول ثبت این پرداخت ها است ، اطلاعات مربوط به پرداخت ها را در سیستم ثبت می کند. و یک Use Case کلی برای مدیریت پرداخت هست که actor به آن مرتبط می شود.
حال می خواهم بدانم Use Case 4 (پرداخت چک،نقد و . . . ) به طور Extend  به Use Case مدیریت پرداخت متصل می شوند یا Include ؟!!
ممنون.

----------


## Elham_gh

> سلام.
> *smhoseyni ،تفاوت Extend  و Include را خیلی خوب توضیح دادین.
> *
> 
> می شه لطفا در مورد مثالی که ذکر می کنم هم توضیح بدین؟
> مثلا در مورد ثبت پرداخت های متفاوت یک شرکت ، که این پرداخت ها ممکن است از طریق چک،فیش،نقد و یا کارت اعتباری باشند.
> Actor که مسئول ثبت این پرداخت ها است ، اطلاعات مربوط به پرداخت ها را در سیستم ثبت می کند. و یک Use Case کلی برای مدیریت پرداخت هست که actor به آن مرتبط می شود.
> حال می خواهم بدانم Use Case 4 (پرداخت چک،نقد و . . . ) به طور Extend  به Use Case مدیریت پرداخت متصل می شوند یا Include ؟!!
> ممنون.


دوست عزیز  ارتباط اینها Extend یا Includeنیست، Generalization است.

----------


## sand3vich2631

ممنون الهام جان :لبخند:

----------


## mohamad100000

دوستان عزيز اين فايل pdf مي تونه تمام سوال هاي شما رو رابطه با فرق رابطه هاي Extend و Include ، جواب بده
تست مثال ها در نرم افزار Visual Paradigm
استفاده از منابع هاي مختلف
لينك دانلود
http://mohamad100000.persiangig.com/...d%20Extend.pdf

----------


## roghayeh j

سلام خسته نباشید 
میشه ببینید تو این عکسی که فرستادم include و extended درسته یا نه؟
ممنون میشم

----------

