# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > تحلیل و طراحی نرم افزار >  دیاگرامهای UML و ارتباط بین آنها

## Elham_gh

مقاله ساده ولی کاربردی گیر اوردم که گفتم حتما به درد شما هم می خوره. به همین جهت ترجمه اونو براتون در این تاپیک قرار می دم. امیدوارم براتون سودمند باشه و کاربردی.
این مقاله توسط  João Oliveira  نوشته شده. و اگر در Google هم جستجو کنید  تحت عنوان 
UML DIAGRAMS AND RELATIONS BETWEEN THEM 
Pdf اونو می تونید پیدا کنید.

توضیح: هر آنچه در این مقاله خواهید خواند عینا نظرات  نویسنده است . و هر انچه مربوط به من باشه اون رو مشخص خواهم کرد و خوشحال می شم که در موردشون بتونیم بحث و تبادل نظر کنیم.

و حالا مقاله:
*1.	دیاگرامهای Use case:*
دیاگرام use case  چیست؟
دیاگرامهای use case  با استفده از Use case و Actor عملکرد (Functionality) سیستم رامدلسازی می کنند.

Use case  چیست؟
Use Case ها که در فاز آنالیز پروژه برای شناساسیی و تقسیم بندی فعالیت های سیستم استفاده می شوند و می تونند به عنوان سرویس ها یا کارکردهایی که سیستم برای کاربران خودش فراهم می کنه نیز توصیف بشوند.
دو دیدگاه وجود دارد: یکی داخلی ,  دید ساختاری و دیگری خارجی و دید وظیفه گرایی(task Oriented)
در دیدگاه اول ما باید کلاسها و متدها را تعریف کنیم و سپس  واسطهای کاربری (user interface)را تعریف کنیم. مشکل اینجاست که برای کاربر مهمترین چیز رفتار سیستم است ولی  واسطهای کاربری تنها قسمت آخر فرآیند را تعریف می کنند. و این مارو به سمت مشکلاتی می بره نظیر اینکه سیستم تمام کارکردهایی که ما می خواهیم در اختیارمون قرار نمی ده و یا کارکردهایی رو داره که مورد نیاز ما نبوده.
در دید دوم ،سیستم از Actor ها و فعالیتها و کلاسهایی که به فعالیتها وصل شده اند پشتیبانی می کند.در این دیدگاه هیچ کار ناخواسته ای وجود ندارد و سیستم تمام فعالیتهای کاربر را پشتیبانی می کند که همه آنها در Use case Diagram  نمایش داده می شود.

Actor چیست؟
Actor ها نقشهایی را ارائه می دهند که توسط کاربران سیستمهای اطلاعاتی(Information System=IS) انجام می شه. این Actor ها می تونند انسانها ,کامپیوترها , سخت افزارها و حتی نرم افزار ها باشند.تنها چیزی که اونها را Actor  می کنه اینه که آنها باید بیرون قسمتی باشند که توسط سیستم به use case ها تقسیم شده است ویکسری ورودی  برای سیستمهای اطلاعاتی فراهم می کنند و  یکسری از آنها خروجی می گیرند.


ارتباطات بین use case ها چگونه است؟
ارتباط بین use case  ها یا به صورت Extends  است و یا به صورت Uses. Uses دلالت بر این دارد که یک use case برای انجام وظیفه و فعالیتش نیازمند use case  دیگری است.Extends   دلالت بر این دارد که use case ی یک امکان و گزینه اختیاری برای use case  دیگر است که در بعضی شرایط از آن استفاده می کند.

در باره سیستمهای اطلاعاتی
یک سیستم اطلاعاتی ، مثل اغلب چیزها ، محدودیتهایی دارد.ما تمام use case ها و ارتباطاتشان را با یکدیگر در سیستم قرار می دهیم و با محدوده ای (Boundary) مشخص می کنیم و Actor ها در بیرون این مجموعه می گذاریم. بنابراین سیستم محدوده ها ومرزهای IS را مشخص و برقرار می کند.

چه زمان باید از use case  ها استفاده کرد؟
Use Case ها باید برای متصور ساختن نیازمندیها ، برای برنامه ریزی و کنترل یک پروژه تکرار پذیر (Iterative Project) استفاده شود. و خیلی می تونه براتون مفید باشه وقتی که دارین پیش نویس و طرحی از نیازمندی ها رو آماده می کنید , ارتباطات بین کاربران و سیستم می تونه خیلی کمکتون کنه که بدونید چه چیزهایی رو فراموش کردید.
Use case ها نمی تونند بهتون داخل یک فرآیند و پروسس رو نشون بدن(خودم- فقط اعلام می کنند که چنین فرآیند و فعالیتی وجود دارد) و برای دیدن داخل یک فعالیت و فرآیند بهتر از Activity Diagram  و یا  Iteration diagram  ها استفاده کنید.

چه زمان باید از Uses و  Extends استفاده کرد؟
Uses را زمانی استفاده کنید که  استفاده از Use case  دوم اجباری است
Extends رو زمانی استفاده کنید که استفاده از use case  دوم اختیاری است
(خودم- یک Actor می تواند یک Use case  که extend  شده را مستقیما استفاده کند , اما نمی تواند ارتباط مستقیم با یک Use case ی داشته باشد که جایی Use  شده.)


دیاگرام:




قسمت بعدی Class Diagram

----------


## Elham_gh

*2.	دیاگرامهای Class:*
Class Diagram چیست؟
این دیاگرام استخوانبندی و پایه و اساس تقریبا تمام روشهای Object Orient مبتنی بر UML است.آنها انواع Object های سیستم را تعریف و توصیف می کنند و انواع ارتباطاط استاتیکی بین آنهاست را نمایش می دهند. در برنامه های مبتنی بر Object Oriented هر Class ها  دارای یکسری Attribute ، Operation  هستند و با سایر کلاسها در ارتباطند

چگونه کلاسها عینیت خارجی پیدا می کنند؟
می توانید از علامتهای Visibility  استفاده کنید که  تعیین می کند که چگونه می توانند به اطلاعات داخل ملاس دسترسی داشته باشند. (اصطلاحا می گویند Visibility را تعیین می کنند) اگر Visibility  را Private تعیین کنید، اطلاعات از هر چیزی خارج از کلاس مخفی می ماند. اگر Visibility را Public در نظر بگیرید ، این اجازه را داده اید که همه به اطلاعت دسترسی داشته باشند و اگر Visibility  را Protected فرض کنید تنها خود کلاس و کلاسهای فرزندش امکان دسترسی به اطلاعات را دارند.

ارتباط با سایر کلاسها چگونه است؟
*Association ها:*
Association ها  ارتباطات استاتیک بین کلاسها را بر قرار می کنند. هر Association دو نقش دارد (Role). که هر نقش می گوید که هر کلاس در این Association چی کار می کند.(یعنی هر کلاس شرکت کننده در Association یک نقش دارد). همچنین هر نقش هم یک  کثرت(Multiplicity  یا cardinality)  دارد.
*Multiplicity  :*
یک عدد یا علامت است. این علائم نشون می دهند که چند نمونه از یک کلاس به یک نمونه از کلاس دیگر طرف Association مرتبط می شوند. مثلا یک شرکت می تواند یک یا چند کارمند داشته باشد(1..*) اما هر کارمند فقط برای یک کمپانی کار می کند(1)
*محدودیتها(Constraints):*
محدودیتها داخل کروشه نمایش داده می شوند و روی ارتباطات تعریف می شوند ت محدودیتهای ارتباطی را بیان کنند. البته نمی توان گاهی تمام محدودیتها را روی ارتباط نشان داد، در اینصورت فقط محدودیتهای مهم را نمایش می دهند.
*سلسله مراتبی(Generalization):*
سلسله مراتب نام دیگریست برای وراثت و ارتباط بین 2 کلاس اشاره می کند که یک کلاس حالت خاص شده ای از کلاس دیگر است.از دید پیاده سازی می توان گفت که اون کلاس خاص شده subclass یا زیر کلاس  از کلاس عمومی تر است و  خصوصیات و عملکردهای آن کلاس را به ارث می برد با این امکان که می تواند بعضی از آنها را مجددا باز سازی کند انجور که خودش لازم دارد.
*ترکیب و تجمیع(Composition & Aggregation):*
تجمیع یا aggregation  نوعی ارتباط بین دو کلاس است که بیان می کند یک کلاس جزئی از کلاس دیگر است. مشکل شباهتهای بین aggregation و composition است.ترکیب یا composition  حالت خاصی از aggregation  است که مشخص  میکند یک مالکیت قوی بین کلاس اول (کلاس کل) و کلاس دیگر(کلاس جزء) است. به زبان ساده تر در composition شما می توانید بعضی از خصوصیات sub-class را تغییر دهید  ولی نمی توانید آنچه از Super-class میاد تغییر دهید.Composition  یک ارتباط بسیار قوی تری نسبت به aggregation  تعرف می کند.



چه موقع باید از Class Diagram استفاده کنیم؟
این دیاگرام را اغلب اوقات میشه استفاده کرد. این دیاگرامها بسیار مفید هستند ، وقتی که  کلاسهای سیستم را بررسی و طراحی  می کنید و ارتباطات بین آنها را بدست می آورید. 


دیاگرام:



قسمت بعدی دیاگرامهای Iteration

----------


## navid4558

سلام مرس از درس

----------


## behzadnet

خیلی عالی بود. شما که کارت درسته اگه در مورد sequence digram, collaboration diagram, activity diagram, state diagram هم مطلب داشته باشی فکر کنم به یک مقاله کامل و بی‌نظیر تبدیل میشه. بازم از زحمتی که کشیدی تشکر می‌کنم.

----------


## Elham_gh

> خیلی عالی بود. شما که کارت درسته اگه در مورد sequence digram, collaboration diagram, activity diagram, state diagram هم مطلب داشته باشی فکر کنم به یک مقاله کامل و بی‌نظیر تبدیل میشه. بازم از زحمتی که کشیدی تشکر می‌کنم.


از دوستان عزيزم تشكر مي كنم.
راستش اون زمان ديدمكسي پيگير اين مقاله نيست رهاش كردم.
اما چشم، ادامش رو هم مي ذارم

----------


## Elham_gh

*3.	دیاگرامهای Iteration:*
درباره دیاگرامهای Iteration
دياگرامهاي Iteration نشان مي دهند چگونه object ها در بعضي رفتارها(Behavior) با هم مشاركت دارند.اين نمودارها Objectها و پيغامهاي ردو بدل شده را در يك use case مشخص نشان مي دهند. دو نوع نمودار Iteration وجود دارد:
نمودار Sequence
نمودار Collaboration

Object naming schema:
يكياز جزئئياتي كه بايد بهش اشاره بشه Object naming schema است كه در داخل Class role ها از آن استفاده مي شود. و به فرم object name: Class name است كه هم اسم object و هم اسم كلاس را مي توان حذف كرد اما هميشه : را باقي مي گذاريم كه معلوم شود كه اين فيلد به چي چيزي شاره مي كند.


*3.1.	دیاگرامهای Sequence:*
در باره دیاگرامهای Sequence
نمودارهاي Sequence ، عكس العملهاي متقابل كلاسها را توصيف مي كنه، به اصطلاح ردو بدل پيغامهاي يك lifeline.

پیغامها
پيغامها فلشهايي هستند كه ارتباطات بين object ها در زمان  حيات  object را  نشان مي دهند.
اين زمان حيات خطي عمودي است كه lifeline(خط عمر) ناميده مي شود كه مدت حيات يك object را در مدت iteration يا عكس العملها نشان مي دهد. پيغامهاي خاص نيز وجود دارند مثل پيغام self delegation كه object پيغامي رو به خودش در همان lifeline ارسال مي كند.
ما مي توانيم به پيغامها بيتهاي كنترلي هم اضافه كنيم. 2 بيت كنترلي وجود دارد:
شرط(condition) :يك گزاره منطقي استكه تعيين مي كند كي پيغام فرستاده شود(فقط زماني كه شرط درست باشد)

شاخص iteration : شاخصي كه تعيين ميكند كه پيغام جند بار به object هاي متعدد فرستاده شود.
نوع ديگري از پيغامهاي خاص ،پيغام بازگشتي است.پيغام بازگشتي را نمي توان به عنوان پيغام معمولي و عادي در نظر گرفت به خاطر اينكه در واقع پيغام بازگشتي ، يك پيغام واقعي نيست. اون بيشتر شبيه برگشت از يك پيغام است. اين بازگشتها نبايد براي هر پيغامي استفاده شوند ،مگر تنها زماني كه به واضح شدن دياگرام كمك مي كنند.

فرآیند های همزمان
از نمودار Sequence  براي نمايش دادن فرآيندهاي همزمان نيز استفاده مي شود.در اين نوع نمودارها ، ما مي تونيم Activationها ، پيغامهاي غير همزمان (asynchronous) و حذفيات(deletions) به عنوان add-ones ببينيم.
*Activationها*: بلكهايي از زمان هستند كه تععين مي كنند كه چه زماني يك فرايند مشخص فعال مي شود.
*پيغام غير همزمان:*از object ي فرستاده مي شود كه قبل ادامه كارش منتظر پاسخي از گيرنده پيغام نيست (مترجم-يعني پيغام مي فرستد ، بدون اينكه منتظر جوابي بماند به بقيه كارش ادامه مي دهد. معمولا  اين گونه پيغامها به 3 منظور استفاده مي شوند:
•	ايجاد thread جديد
•	ساختن object جديد
•	ارتباط با thread ي كه  در حال حاضر در حال اجراست.

*حذفيات(deletions):* براي نمايش دادن حذف يك object استفاده مي شود. يك object مي تواند خودش ، خودش را نابود كند يا توسط پيغامي از object ديگر نابود شود.
*حلقه ها(loops):* تكرار يا  حلقه در نمودار Sequence   به صورت يك مستطيل نمايش داده مي شود.

دیاگرام



*3.2.	دیاگرامهای Collaboration:*
درباره دیاگرامهای Collaboration
در نمودار Collaboration ،به جاي يك باكس در بالاي نمودار(مثل نمودار Sequence  ) ، هر object با يك آيكن نشون داده مي شود وترتيب پيغامها با شماره مشخص مي شود.
به خاطر اينكه ديدن و متوجه شدن نمودار Sequence سخت تر است ،نمودار هاي Collaboration تمركزشون روي همكاري Objectهاست، (اينكه چطور با هم ارتباط دارند).


شماره گذاری سریال و پشت سر هم
براي نمايش توالي مي توان از شماره گذاري ساده يا اعشاري پيغامها استفاده كرد. با شماره گذاري ساده پيغامها پيگيري توالي راحتتر است. هر چند در UML شماره گذاري اعشاري هم استفاده مي شود ، براي اينكه بتوان فهميدكدام operation ، ديگر Operation هاي جديد را فراخواني مي كند.

دیاگرام



مقایسه دایاگرامهای Sequence  و  Collaboration
همانطور كه قبلا گفته شد، نمودار Sequence روي توالي تمركز دارد در حاليكه نمودار Collaboration بر اين تمركز دارد كه چطور Object هاي مختلف با هم ارتباط دارند.
نكته مهم اينه كه چه نمودار Sequence و چه مودار Collaboration يك مشخه اصلي دارند و آن هم سادگي است.(مترجم-بايد ساده و به دور از پيچيدگي پياده سازي شوند)


چه زمان باید از دیاگرامهای Iteration استفاده کرد؟
همانطور كه قبلا گفته شد، نمودارهاي iteration براي نمايش رفتار object ها متفاوت داخل يك use case  ساده ، استفاده مي شوند. مشخصه اصليشون سادگي است به همين جهت اگر بخواهيد  رفتارهاي پيچيده بيشتري به آنها اضافه كنيد وضوح خود را از دست خواهند داد. اين نمودارها براي نمايش همكاري بين object ها مناسبند ، اما به يك طريق.


قسمت بعدیState diagram

----------


## engineer_tanha

دوست خوبم به خاطر اطلاعات خوبی که در اختیارمون گذاشتین تشکر می کنم.برکت باشد :قلب:

----------


## nasha260

با سلام و خسته نباشید. دو تا سوال ؟ 
۱- منظورتون از use  همون <<include>> هستش ؟ 
۲- چرا یک اکتور نمینوته مستقیم با usecase در رابطه باشه ؟

----------


## Elham_gh

> با سلام و خسته نباشید. دو تا سوال ؟ 
> ۱- منظورتون از use  همون <<include>> هستش ؟ 
> ۲- چرا یک اکتور نمینوته مستقیم با usecase در رابطه باشه ؟


در جواب سوال اول بله
در جواب سوال دوم، کی گفته نمی تونه؟ اتفاقاً باهم مستقیماً رابطه دارند.

----------


## BANKER

State diagram
قسمت بعدی رو  هم لطفا آموزش بدید بسیار کاربردی و مفید بود 
باتشکر از پیگیری 
 :بوس:  :قلب:  :تشویق:  :تشویق:  :تشویق:  :تشویق:

----------


## albertar

با سلام.یه سوال داشتم.این دیاگرام ها رو باید برای همه ویندوز فرمهای برنامه کشید؟فرض کنید یه برنامه 15 تا فرم داره،یعنی باید 15 تا دیاگرام activity بکشیم ?

----------


## png_92

سلام 
ممنون از توضیحاتتون استفاده کردم. اگه ممکنه درباره domain model هم توضیحاتی بذارید.
 و اینکه چطور با مشخص کردن concept ها میتونیم دامین مدل رو رسم کنیم؟؟؟
فرق بین دامین مدل با کلاس دیاگرام چی هست؟ 
مرسی

----------


## noroozifar

از چه ابزاری برای رسم دیاگرامها استفاده میکنید   مثلا  viso یا خود  visual studio

----------


## png_92

مگه فرقی میکنه؟؟!!
یکی از ابزاری که استفاده کردم staruml ه...

----------


## grt685

سلام در خصوص دیاگرام خودتون فرمودید که یه اکتور نمیتونه یوس کیسی رو که use شده استفاده کنه ولی در دیاگرام actor 2   داره مستقیما یه چنین use case رو استفاده میکنه!!!

----------

