توضیح دوات: وبسایت بایتبایتگو برگه تقلب بسیار خوبی به زبان انگلیسی داره. اینجا چکش کنید.
نمودار کلاس UML ابزاری بصری است که ساختار یک سیستم را با نمایش کلاسها، ویژگیها، متدها، و روابط بین آنها نشان میدهد. این نمودار به تمام افراد درگیر در پروژه، مانند توسعهدهندگان و طراحان، کمک میکند تا سازماندهی سیستم و نحوه تعامل اجزای آن را درک کنند.
نمودارهای کلاس چیست؟
نمودارهای کلاس نوعی نمودار UML (زبان مدلسازی یکپارچه) هستند که در مهندسی نرمافزار برای نمایش بصری ساختار و روابط کلاسها در یک سیستم استفاده میشوند، یعنی برای ساخت و تصور سیستمهای شیءگرا به کار میروند.
در این نمودارها، کلاسها بهصورت جعبههایی نمایش داده میشوند که هرکدام شامل سه بخش برای نام کلاس، ویژگیها، و متدها است. خطوطی که کلاسها را به هم متصل میکنند، ارتباطات و روابطی مانند یک به یک یا یک به چند را نشان میدهند.
نمودارهای کلاس دید کلی از طراحی یک سیستم ارائه میدهند و به برقراری ارتباط و مستندسازی ساختار نرمافزار کمک میکنند. این ابزار در طراحی شیءگرا اساسی است و نقش مهمی در چرخه حیات توسعه نرمافزار ایفا میکند.
کلاس چیست؟
در برنامهنویسی شیءگرا (OOP)، کلاس یک الگو یا قالب برای ایجاد اشیاء است. اشیاء نمونههایی از کلاسها هستند و هر کلاس مجموعهای از ویژگیها (اعضای داده) و متدها (توابع یا روشها) را تعریف میکند که اشیاء ایجاد شده از آن کلاس خواهند داشت. ویژگیها نمایانگر خصوصیات یا ویژگیهای شیء هستند، در حالی که متدها رفتارها یا اعمالی را که شیء میتواند انجام دهد تعریف میکنند.
نشانهگذاری کلاس UML
نشانهگذاری کلاس نمایش گرافیکی برای نشاندادن کلاسها و روابط آنها در مدلسازی شیءگرا است.
- نام کلاس:
نام کلاس معمولاً در قسمت بالای جعبه کلاس نوشته میشود و در مرکز و با فونت ضخیم است. - ویژگیها:
ویژگیها که به عنوان خصوصیات یا فیلدها نیز شناخته میشوند، اعضای داده کلاس را نمایان میکنند. آنها در بخش دوم جعبه کلاس فهرست شده و اغلب شامل قابلیت مشاهده (مثلاً عمومی، خصوصی) و نوع داده هر ویژگی هستند. - متدها:
متدها که به عنوان توابع یا عملیات نیز شناخته میشوند، رفتار یا کارکرد کلاس را نمایش میدهند. آنها در بخش سوم جعبه کلاس فهرست شده و شامل قابلیت مشاهده (مثلاً عمومی، خصوصی)، نوع بازگشتی، و پارامترهای هر متد هستند. - نشانهگذاری قابلیت مشاهده:
نشانههای قابلیت مشاهده سطح دسترسی ویژگیها و متدها را نشان میدهند. نشانههای معمول قابلیت مشاهده شامل:
+ برای عمومی (قابل مشاهده برای همه کلاسها)
– برای خصوصی (قابل مشاهده فقط درون کلاس)
# برای محافظت شده (قابل مشاهده برای زیرکلاسها)
~ برای سطح بسته یا پیشفرض (قابل مشاهده برای کلاسهای یک بسته)
جهتدهی پارامتر
در نمودارهای کلاس، جهتدهی پارامتر به نمایش جریان اطلاعات بین کلاسها از طریق پارامترهای متد اشاره دارد. این امر به مشخص کردن این که آیا یک پارامتر ورودی، خروجی، یا هر دو است کمک میکند. این اطلاعات برای درک نحوه عبور دادهها بین اشیاء در حین فراخوانی متدها بسیار مهم است.
سه نشانه اصلی جهتدهی پارامتر در نمودارهای کلاس استفاده میشود:
- ورودی (Input):
یک پارامتر ورودی پارامتری است که از شیء فراخوانیکننده (مشتری) به شیء فراخوانیشونده (سرور) در طول فراخوانی متد منتقل میشود.
این پارامتر با یک پیکان به سمت کلاس گیرنده (کلاسی که متد را در اختیار دارد) نمایش داده میشود. - خروجی (Output):
یک پارامتر خروجی پارامتری است که پس از اجرای متد از شیء فراخوانیشونده (سرور) به شیء فراخوانیکننده (مشتری) منتقل میشود.
این پارامتر با یک پیکان که از کلاس گیرنده دور میشود نمایش داده میشود. - ورودی/خروجی (InOut):
یک پارامتر InOut بهعنوان ورودی و خروجی عمل میکند. اطلاعات را از شیء فراخوانیکننده به شیء فراخوانیشونده و بالعکس منتقل میکند.
این پارامتر با یک پیکان که به سمت کلاس گیرنده و دور از آن است نمایش داده میشود.
روابط بین کلاسها
در نمودارهای کلاس، روابط بین کلاسها چگونگی اتصال یا تعامل کلاسها با یکدیگر در یک سیستم را توصیف میکنند. انواع مختلفی از روابط در مدلسازی شیءگرا وجود دارد که هرکدام برای یک هدف خاص به کار میروند. برخی از انواع متداول روابط در نمودارهای کلاس عبارتاند از:
همبستگی (Association)
یک همبستگی رابطهای دوطرفه بین دو کلاس را نشان میدهد. این امر بیان میکند که نمونههایی از یک کلاس به نمونههایی از کلاس دیگر متصل هستند. همبستگیها معمولاً بهصورت یک خط جامد که کلاسها را به هم متصل میکند و پیکانهای اختیاری که جهت رابطه را نشان میدهند نمایش داده میشوند.
برای درک همبستگی به یک مثال توجه کنیم:
فرض کنید یک سیستم ساده برای مدیریت یک کتابخانه داریم. در این سیستم دو موجودیت اصلی وجود دارد: کتاب و کتابخانه. هر کتابخانه شامل چندین کتاب است و هر کتاب متعلق به یک کتابخانه خاص است. این رابطه بین کتابخانه و کتاب یک همبستگی را نشان میدهد.
کلاس “کتابخانه” میتواند به عنوان کلاس منبع در نظر گرفته شود زیرا مرجعی به چندین نمونه از کلاس “کتاب” دارد. کلاس “کتاب” به عنوان کلاس هدف در نظر گرفته میشود زیرا متعلق به یک کتابخانه خاص است.
همبستگی جهتدار (Directed Association)
همبستگی جهتدار در نمودار کلاس UML رابطهای را بین دو کلاس نمایش میدهد که در آن همبستگی جهت دارد و نشان میدهد که یک کلاس به شکلی خاص با کلاس دیگر در ارتباط است.
در همبستگی جهتدار، یک پیکان به خط همبستگی اضافه میشود تا جهت رابطه را نشان دهد. این پیکان از کلاسی که همبستگی را آغاز میکند به کلاسی که هدف یا تحت تأثیر همبستگی است اشاره دارد. همبستگیهای جهتدار هنگامی استفاده میشوند که همبستگی دارای یک جریان یا جهت خاص باشد، مانند نشان دادن این که کدام کلاس مسئول شروع همبستگی است یا کدام کلاس وابسته به کلاس دیگر است.
به عنوان مثال، در یک سیستم دانشگاهی ممکن است یک کلاس “استاد” با یک کلاس “درس” مرتبط باشد. پیکان همبستگی جهتدار ممکن است از کلاس “استاد” به کلاس “درس” اشاره کند و نشان دهد که استاد یک درس خاص را تدریس میکند.
کلاس منبع “استاد” است که همبستگی را با تدریس یک درس خاص آغاز میکند.
کلاس هدف “درس” است که تحت تأثیر همبستگی قرار دارد زیرا توسط یک استاد تدریس میشود.
تجمیع (Aggregation)
تجمیع نوع خاصی از همبستگی است که رابطه “کل-جزء” را نشان میدهد. این رابطه به نوعی قویتر است که در آن یک کلاس (کل) حاوی یا مرکب از یک کلاس دیگر (جزء) است. تجمیع با یک شکل الماس باز در سمت کلاس کل نمایش داده میشود. در این نوع رابطه، کلاس جز میتواند به طور مستقل از کلاس والد خود وجود داشته باشد.
برای درک تجمیع به یک مثال توجه کنیم:
یک شرکت میتواند به عنوان کل و کارکنان آن به عنوان اجزاء در نظر گرفته شوند. کارکنان به شرکت تعلق دارند و شرکت میتواند چندین کارمند داشته باشد. با این حال، اگر شرکت از بین برود، کارکنان همچنان میتوانند به طور مستقل وجود داشته باشند.
ترکیب (Composition)
ترکیب شکل قویتری از تجمیع است و یک رابطه مالکیت یا وابستگی بیشتر را نشان میدهد. در ترکیب، کلاس جزء نمیتواند به طور مستقل از کلاس کل وجود داشته باشد. ترکیب با یک شکل الماس پر در سمت کلاس کل نمایش داده میشود.
برای درک ترکیب به یک مثال توجه کنیم:
تصور کنید یک برنامه دفترچه تماس دیجیتال وجود دارد. دفترچه تماس به عنوان کل و هر ورودی تماس به عنوان جزء در نظر گرفته میشود. هر ورودی تماس به طور کامل متعلق به دفترچه تماس است و توسط آن مدیریت میشود. اگر دفترچه تماس حذف یا نابود شود، تمام ورودیهای تماس مرتبط نیز حذف خواهند شد.
این مثال ترکیب را نشان میدهد زیرا وجود ورودیهای تماس کاملاً به حضور دفترچه تماس وابسته است. بدون دفترچه تماس، ورودیهای تماس به تنهایی بیمعنا خواهند بود و نمیتوانند به طور مستقل وجود داشته باشند.
تعمیم (ارثبری) (Generalization – Inheritance)
ارثبری نشاندهنده رابطه “یک-گونهای است از” بین کلاسها است که در آن یک کلاس (زیرکلاس یا فرزند) ویژگیها و رفتارهای یک کلاس دیگر (ابرکلاس یا والد) را به ارث میبرد. ارثبری با یک خط جامد و یک پیکان توخالی و بسته که از زیرکلاس به ابرکلاس اشاره دارد نشان داده میشود.
به عنوان مثال، در رابطه حساب بانکی میتوانیم انواع مختلف حسابها مانند حساب جاری، حساب پسانداز و حساب اعتباری را به تصویر بکشیم.
کلاس حساب بانکی به عنوان نماینده کلی از همه انواع حسابهای بانکی عمل میکند، در حالی که زیرکلاسها (حساب جاری، حساب پسانداز، حساب اعتباری) نسخههای تخصصی هستند که کارکردهای کلاس پایه را به ارث میبرند و گسترش میدهند.
تحقق (پیادهسازی رابط) (Realization – Interface Implementation)
تحقق نشان میدهد که یک کلاس ویژگیهای یک رابط را پیادهسازی میکند. این رابطه معمولاً در مواردی استفاده میشود که یک کلاس عملیات تعریفشده توسط یک رابط را پیادهسازی میکند. تحقق با یک خط نقطهچین و یک پیکان توخالی که از کلاس پیادهساز به رابط اشاره دارد نمایش داده میشود.
برای درک تحقق به یک مثال توجه کنیم:
فرض کنید یک کلاس “شخص” و یک کلاس “شرکت” وجود دارند که رابط “مالک” را پیادهسازی میکنند.
رابط مالک: این رابط شامل متدهایی مانند “acquire(property)” و “dispose(property)” است تا اقدامات مربوط به مالکیت و واگذاری مالکیت را نمایش دهد.
کلاس شخص (تحقق): کلاس شخص رابط مالک را پیادهسازی میکند و پیادهسازیهای واقعی برای متدهای “acquire(property)” و “dispose(property)” ارائه میدهد. به عنوان مثال، یک شخص میتواند مالکیت یک خانه را بگیرد یا یک خودرو را واگذار کند.
کلاس شرکت (تحقق): به طور مشابه، کلاس شرکت نیز رابط مالک را پیادهسازی میکند و پیادهسازیهای خاصی برای متدهای “acquire(property)” و “dispose(property)” ارائه میدهد. برای مثال، یک شرکت میتواند مالکیت املاک واقعی را بگیرد یا وسایل نقلیه شرکت را واگذار کند.
کلاسهای شخص و شرکت هر دو رابط مالک را تحقق میبخشند، به این معنا که آنها پیادهسازیهای واقعی برای متدهای “acquire(property)” و “dispose(property)” که در رابط تعریف شدهاند ارائه میدهند.
رابطه وابستگی (Dependency Relationship)
وابستگی بین دو کلاس زمانی رخ میدهد که یک کلاس به دیگری متکی است، اما رابطه به اندازه همبستگی یا ارثبری قوی نیست. این رابطه یک اتصال ضعیفتر بین کلاسها را نشان میدهد و اغلب به صورت یک پیکان نقطهچین نمایش داده میشود.
برای درک وابستگی به یک مثال توجه کنیم:
کلاس شخص: نشاندهنده یک فرد است که یک کتاب را میخواند. کلاس شخص به کلاس کتاب وابسته است تا به محتوا دسترسی پیدا کند و آن را بخواند.
کلاس کتاب: نشاندهنده یک کتاب است که محتوایی برای خواندن یک فرد دارد. کلاس کتاب مستقل است و میتواند بدون کلاس شخص وجود داشته باشد.
کلاس شخص به کلاس کتاب وابسته است زیرا نیاز به دسترسی به کتاب دارد تا محتوای آن را بخواند. با این حال، کلاس کتاب به کلاس شخص وابسته نیست و میتواند مستقل وجود داشته باشد و برای عملکرد خود به کلاس شخص متکی نیست.
رابطه استفاده-وابستگی (Usage – Dependency Relationship)
رابطه استفاده در نمودار کلاس UML نشان میدهد که یک کلاس (مشتری) از یک کلاس دیگر (تأمینکننده) برای انجام وظایف خاص یا دسترسی به عملکرد خاص استفاده میکند. کلاس مشتری به خدمات ارائهشده توسط کلاس تأمینکننده متکی است، اما مالک یا سازنده نمونههای آن نیست.
در نمودارهای کلاس UML، وابستگیهای استفاده معمولاً با یک خط پیکاندار نقطهچین که از کلاس مشتری به کلاس تأمینکننده اشاره میکند نمایش داده میشوند. پیکان جهت وابستگی را نشان میدهد و بیان میکند که کلاس مشتری به خدمات ارائهشده توسط کلاس تأمینکننده وابسته است.
برای درک استفاده به یک مثال توجه کنیم:
کلاس خودرو به کلاس باک سوخت برای مدیریت مصرف سوخت وابسته است.
کلاس خودرو ممکن است نیاز به دسترسی به متدها یا ویژگیهای کلاس باک سوخت داشته باشد تا سطح سوخت را بررسی کند، سوخت را پر کند، یا مصرف سوخت را نظارت کند.
در این مورد، کلاس خودرو یک وابستگی استفاده به کلاس باک سوخت دارد زیرا از خدمات آن برای انجام وظایف مربوط به مدیریت سوخت استفاده میکند.
هدف از نمودارهای کلاس
هدف اصلی استفاده از نمودارهای کلاس شامل موارد زیر است:
- این تنها نمودار UML است که میتواند جنبههای مختلف مفهوم شیءگرایی (OOPs) را بهدرستی به تصویر بکشد.
- طراحی و تحلیل مناسب برنامهها میتواند سریعتر و کارآمدتر باشد.
- این نمودار پایهای برای نمودارهای استقرار و اجزا است.
- شامل مهندسی مستقیم و معکوس است.
مزایای نمودارهای کلاس
در زیر مزایای نمودارهای کلاس آورده شده است:
- نمودارهای کلاس، کلاسها، ویژگیها، متدها و روابط سیستم را نشان میدهند و نمای روشنی از معماری آن ارائه میدهند.
- آنها روابط مختلف بین کلاسها، مانند همبستگیها و ارثبری را نشان میدهند و به سهامداران کمک میکنند تا اتصال اجزا را درک کنند.
- نمودارهای کلاس به عنوان یک ابزار بصری برای ارتباط بین اعضای تیم و سهامداران عمل میکنند و شکاف بین مخاطبان فنی و غیر فنی را برطرف میسازند.
- آنها راهنمایی برای برنامهنویسان در کدنویسی فراهم میکنند و با ارائه ساختار بهینه، به بهبود کیفیت نرمافزار کمک میکنند.