معرفی
فکر می کنم همه این ضرب المثل "دوبار اندازه گیری، یک بار برش" را شنیده اند. این یک توصیه واقعی در برنامه نویسی است. همیشه بهتر است قبل از صرف زمان برای اجرای آن، به اجرای آن فکر کنید. در طول پیاده سازی، شما اغلب نیاز دارید که کلاس هایی ایجاد کنید و به نحوه تعامل آنها فکر کنید. یک نمایش بصری از همه آن اغلب می تواند به شما کمک کند تا به درست ترین راه حل برسید. اینجاست که UML Class Diagram به کمک ما می آید.UML چیست؟
اگر به تصاویر مرتبط در موتورهای جستجو نگاه کنید، خواهید دید که UML با نمودارها، فلش ها و مربع ها ارتباط دارد. باید بدانید که UML مخفف Unified Modeling Language است. یکپارچه کلمه مهم اینجاست. این بدان معنی است که تصاویر ما نه تنها توسط ما، بلکه توسط هر کسی که UML را می شناسد نیز قابل درک خواهد بود. این زبان برای رسم نمودارها است.طبق ویکی پدیا،
"UML یک زبان مدل سازی همه منظوره، توسعه دهنده در زمینه مهندسی نرم افزار است که در نظر گرفته شده است تا راهی استاندارد برای تجسم طراحی یک سیستم ارائه دهد."جالب ترین چیزی که همه آن را حدس نمی زنند این است که UML دارای مشخصات است. و حتی یک مشخصات UML 2 وجود دارد. اطلاعات بیشتر در مورد مشخصات در وب سایت Object Management Group موجود است . در واقع این گروه مشخصات UML را توسعه می دهد. همچنین جالب است که UML به توصیف ساختار کلاس ها محدود نمی شود. انواع مختلفی از نمودارهای UML وجود دارد. ویکی پدیا شرح مختصری از انواع مختلف نمودارهای UML دارد: نمودارهای UML . در بازگشت به نمودارهای کلاس UML، لازم به ذکر است که کتاب "الگوهای طراحی اول سر" ، از نمودارهای UML برای نشان دادن الگوهای طراحی استفاده می کند. نکته اصلی این است که UML واقعاً استفاده می شود. و معلوم می شود که دانستن آن و درک نحوه استفاده بسیار مفید است.
کاربرد
بیایید بفهمیم که می توانیم با UML در یک IDE کار کنیم. ما از IntelliJ IDEA به عنوان IDE خود استفاده خواهیم کرد. اگر از IntelliJ IDEA Ultimate استفاده میکنید، افزونه UML Support را بهصورت خارج از جعبه نصب خواهیم کرد. این به شما امکان می دهد به طور خودکار نمودارهای کلاس زیبایی ایجاد کنید. برای مثال، از Ctrl+N یا آیتم منوی "Navigate" -> "Class" برای رفتن به کلاس ArrayList استفاده کنید. اکنون در منوی زمینه نام کلاس، "Diagram" -> "Show diagram popup" را انتخاب کنید. در نتیجه یک نمودار زیبا به دست می آوریم.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
برای مشاهده نتیجه در IDEA، "View" -> "Tool Windows" -> "PlantUML" را انتخاب کنید. ما فقط دو مربع می گیریم که نشان دهنده کلاس ها هستند. می دانیم که هر دوی این کلاس ها رابط List را پیاده سازی می کنند . این رابطه طبقاتی را تحقق می گویند. این رابطه با استفاده از یک فلش با یک خط نقطه نشان داده می شود. بیایید آن را بکشیم:
interface List
List <|.. ArrayList
List <|.. LinkedList
لیست یکی از بچه های کلاس مجموعه است . یعنی Collection را به ارث می برد . به این رابطه تعمیم می گویند. به نظر می رسد یک فلش با یک خط ممتد معمولی است. بیایید آن را بکشیم:
interface Collection
Collection <|-- List
برای نوع بعدی رابطه، به توضیحات کلاس ArrayList یک ورودی در مورد یک آرایه خصوصی بسته از عناصر اضافه کنید:
~Object[] elementData
حال می خواهیم نشان دهیم که ArrayList حاوی چند آبجکت است. در این صورت یک رابطه تجمیع وجود خواهد داشت. ArrayList یک مجموعه است، زیرا حاوی اشیاء دیگری است. ما می گوییم تجمیع زیرا اشیاء لیست می توانند بدون لیست وجود داشته باشند: آنها بخش جدایی ناپذیر لیست نیستند. طول عمر آنها به طول عمر فهرست گره خورده نیست. کلمه "مجموعه" از لاتین به ما می رسد و به "مونتاژ" ترجمه می شود ، یعنی چیزی که از چیزی ساخته شده است. به عنوان مثال، در زندگی، ما یک مجموعه پمپ (سنگدانه) داریم که از یک پمپ و یک موتور تشکیل شده است. خود مجموعه قابل جداسازی است و می توانیم برخی از اجزای آن را به حال خود رها کنیم. مثلاً برای فروش یا قرار دادن در مجلس دیگری. در فهرست هم به همین صورت است. این با یک لوزی خالی در مجموع و یک خط پیوسته بیان می شود. ما این را به صورت زیر نشان خواهیم داد:
class Object{
}
ArrayList o- Object
اکنون میخواهیم نشان دهیم که برخلاف ArrayList ، کلاس LinkedList حاوی Node s - کانتینرهایی است که به دادههای ذخیره شده ارجاع میدهند. در این حالت، Node ها بخشی از LinkedList هستند و وجود مستقلی ندارند. Node خود محتوا نیست. فقط شامل ارجاع به محتوا است. به عنوان مثال، هنگامی که یک رشته را به LinkedList اضافه می کنیم، یک گره جدید اضافه می کنیم که حاوی ارجاع به رشته و همچنین پیوندی به گره قبلی و بعدی است . این رابطه ترکیب نامیده می شود. با کشیدن یک خط پیوسته با لوزی پر شده بر روی کامپوزیت (چیزی که از اجزای تشکیل دهنده آن ساخته شده است) به تصویر کشیده می شود. اکنون رابطه را به صورت متن نشان می دهیم:
class Node{
}
LinkedList *-- Node
و اکنون باید یاد بگیرید که چگونه نوع مهم دیگری از رابطه را به تصویر بکشید: وابستگی. زمانی استفاده میشود که یک کلاس از کلاس دیگر استفاده میکند، اما کلاس شامل کلاس استفادهشده یا ارث نمیبرد. به عنوان مثال، LinkedList و ArrayList می دانند که چگونه یک ListIterator ایجاد کنند . ما این را به صورت فلش هایی با خط نقطه چین نشان می دهیم:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
پس از انجام همه این کارها، دریافت می کنیم: 
اتوماسیون
راه های مختلفی برای تولید خودکار نمودارهای PlantUML وجود دارد. به عنوان مثال، IDEA دارای افزونه SketchIT است ، اما نمودارها را کاملاً درست ترسیم نمی کند. فرض کنید پیاده سازی اینترفیس ها به اشتباه ترسیم شده است (به صورت ارثی نمایش داده می شود). اینترنت نمونه هایی از نحوه ادغام این را در فرآیند ساخت پروژه شما دارد. به عنوان مثال، می توانید نحوه استفاده از uml-java-docklet را با Maven پیدا کنید. برای نشان دادن، از Maven Archetype برای ایجاد سریع پروژه Maven استفاده می کنیم . اجرا کن
mvn archetype:generate
در پاسخ به Choose a number یا اعمال فیلتر، پیش فرض را رها کنید — فقط Enter را فشار دهید. همیشه "maven-archetype-quickstart" خواهد بود. آخرین نسخه را انتخاب کنید. در مرحله بعد، به چند سوال پاسخ میدهیم و ایجاد پروژه را به پایان میرسانیم: 
mvn clean install
و
mvn javadoc: javadoc
اگر اکنون مستندات تولید شده (explorer target\site\apidocs\index.html) را باز کنیم، نمودارهای UML را مشاهده خواهیم کرد. به هر حال، رابطه پیاده سازی اکنون به درستی نمایش داده می شود :)
GO TO FULL VERSION