CodeGym /وبلاگ جاوا /Random-FA /نمودار کلاس UML
John Squirrels
مرحله
San Francisco

نمودار کلاس UML

در گروه منتشر شد

معرفی

فکر می کنم همه این ضرب المثل "دوبار اندازه گیری، یک بار برش" را شنیده اند. این یک توصیه واقعی در برنامه نویسی است. همیشه بهتر است قبل از صرف زمان برای اجرای آن، به اجرای آن فکر کنید. در طول پیاده سازی، شما اغلب نیاز دارید که کلاس هایی ایجاد کنید و به نحوه تعامل آنها فکر کنید. یک نمایش بصری از همه آن اغلب می تواند به شما کمک کند تا به درست ترین راه حل برسید. اینجاست که 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" را انتخاب کنید. در نتیجه یک نمودار زیبا به دست می آوریم. UML: از تئوری تا عمل - 2 اما اگر بخواهید خودتان نمودار را رسم کنید چه؟ و اگر نسخه Ultimate را ندارید چه؟ با استفاده از IntelliJ IDEA Community Edition، هیچ انتخاب دیگری نداریم. بنابراین باید بدانیم که نمودار UML چگونه سازماندهی شده است. ابتدا باید Graphviz را نصب کنیم . این مجموعه ای از ابزارهای تجسم گراف است. افزونه ای که استفاده خواهیم کرد به آن بستگی دارد. پس از نصب، باید دایرکتوری bin را از دایرکتوری نصب Graphviz به متغیر محیطی PATH اضافه کنید. پس از آن، در IntelliJ IDEA، File -> Settings را در منو انتخاب کنید. در پنجره «تنظیمات»، دسته «افزونه‌ها» را انتخاب کنید، روی دکمه «مرور مخازن» کلیک کنید و افزونه ادغام PlantUML را نصب کنید . چه چیزی در مورد PlantUML خوب است؟ UML را با استفاده از یک زبان توصیف گراف به نام "dot" توصیف می کند، که آن را جهانی تر می کند، زیرا زبان نقطه توسط بیش از PlantUML استفاده می شود. علاوه بر این، هر کاری که در زیر انجام می دهیم را می توان نه تنها در یک IDE، بلکه به صورت آنلاین در planttext.com انجام داد . پس از نصب افزونه PlantUML، می‌توانیم نمودارهای UML را با استفاده از "File" -> "New" ایجاد کنیم. بیایید یک نمودار "کلاس UML" ایجاد کنیم. این به طور خودکار یک الگو با یک مثال ایجاد می کند. ما محتویات آن را حذف می کنیم و محتوای خود را اضافه می کنیم. برای درک نحوه نمایش این در متن، به کتابچه راهنمای PlantUML نگاهی بیندازید: plantuml class-diagram. UML: از تئوری تا عمل - 3با تکیه بر این مواد، بیایید شروع به ایجاد نمودار UML خود کنیم. محتوای زیر را اضافه کنید که دو کلاس را توصیف می کند:

@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
پس از انجام همه این کارها، دریافت می کنیم: UML: از تئوری تا عمل - 4می توانید به همان اندازه که لازم است جزئیات اضافه کنید. البته هیچ چیز ماورایی در ترسیم چنین نموداری وجود ندارد. وقتی روی وظایف خود کار می کنید، می توانید به سرعت آن را با دست بکشید. این به شما کمک می‌کند تا توانایی فکر کردن از طریق معماری برنامه و شناسایی کاستی‌ها در ساختار کلاس را زودتر توسعه دهید، نه بعد از اینکه یک روز را صرف اجرای مدل اشتباه کرده‌اید. به نظر دلیل خوبی برای امتحان کردن آن است، اینطور نیست؟ :)

اتوماسیون

راه های مختلفی برای تولید خودکار نمودارهای PlantUML وجود دارد. به عنوان مثال، IDEA دارای افزونه SketchIT است ، اما نمودارها را کاملاً درست ترسیم نمی کند. فرض کنید پیاده سازی اینترفیس ها به اشتباه ترسیم شده است (به صورت ارثی نمایش داده می شود). اینترنت نمونه هایی از نحوه ادغام این را در فرآیند ساخت پروژه شما دارد. به عنوان مثال، می توانید نحوه استفاده از uml-java-docklet را با Maven پیدا کنید. برای نشان دادن، از Maven Archetype برای ایجاد سریع پروژه Maven استفاده می کنیم . اجرا کن

mvn archetype:generate
در پاسخ به Choose a number یا اعمال فیلتر، پیش فرض را رها کنید — فقط Enter را فشار دهید. همیشه "maven-archetype-quickstart" خواهد بود. آخرین نسخه را انتخاب کنید. در مرحله بعد، به چند سوال پاسخ می‌دهیم و ایجاد پروژه را به پایان می‌رسانیم: UML: از تئوری تا عمل - 5Maven موضوع این مقاله نیست، بنابراین می‌توانید پاسخ سوالات خود را در مورد Maven در مرکز کاربران Maven بیابید . در پروژه تولید شده فایل توضیحات پروژه به نام pom.xml را برای ویرایش باز کنید. ما مطالب را از توضیحات نصب uml-java-docklet در این فایل کپی می کنیم. مصنوع مورد استفاده در توضیحات را نمی توان در مخزن مرکزی Maven یافت. اما موارد زیر برای من کار کردند: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . به عبارت دیگر، در توضیحات شما فقط باید groupId را از "info.leadinglight" به "com.chfourie" جایگزین کنید و نسخه را روی "1.0.0" قرار دهید. پس از آن، می توانیم دستورات زیر را در پوشه با فایل pom.xml اجرا کنیم:

mvn clean install
و

mvn javadoc: javadoc
اگر اکنون مستندات تولید شده (explorer target\site\apidocs\index.html) را باز کنیم، نمودارهای UML را مشاهده خواهیم کرد. به هر حال، رابطه پیاده سازی اکنون به درستی نمایش داده می شود :)

نتیجه

همانطور که می بینید، UML به شما امکان می دهد ساختار برنامه خود را تجسم کنید. اما UML می تواند کارهای بیشتری انجام دهد. می توانید از UML برای توصیف فرآیندهای مختلف در شرکت خود یا برای توصیف فرآیند کسب و کار که شامل عملکردی است که در حال نوشتن آن هستید استفاده کنید. شما باید خودتان تصمیم بگیرید که UML چقدر برای شما مفید است، اما مهم نیست که چه تصمیمی می گیرید، پیدا کردن زمان برای کسب اطلاعات بیشتر در مورد آن مفید خواهد بود.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION