معرفی
فکر میکنم همه در کودکی چنین ضربالمثلی را شنیدهاند که « دوبار اندازهگیری کن، یکبار برش بده ». در برنامه نویسی هم همینطور است. همیشه بهتر است قبل از صرف زمان برای اجرای آن، به اجرای آن فکر کنید. اغلب در حین پیاده سازی باید کلاس هایی ایجاد کنید و تعامل آنها را ابداع کنید. و اغلب یک نمایش بصری از این می تواند به حل مشکل به درست ترین روش کمک کند. اینجاست که UML به ما کمک می کند .UML چیست؟
اگر به تصاویر در موتورهای جستجو نگاه کنید، مشخص می شود که UML چیزی در مورد نمودارها، فلش ها و مربع ها است. آنچه مهم است این است که UML به زبان مدلسازی یکپارچه ترجمه می شود . کلمه Unified در اینجا مهم است. یعنی تصاویر ما نه تنها توسط ما، بلکه توسط دیگرانی که UML را می شناسند نیز درک می شوند. به نظر می رسد که این یک زبان بین المللی برای رسم نمودار است.
همانطور که ویکی پدیا می گوید
UML یک زبان توصیف گرافیکی برای مدلسازی شی در توسعه نرمافزار، مدلسازی فرآیند کسبوکار، طراحی سیستمها و نمایش ساختارهای سازمانی است.جالب ترین چیزی که همه به آن فکر نمی کنند یا متوجه نمی شوند این است که UML دارای مشخصات است. علاوه بر این، حتی یک مشخصات UML2 نیز وجود دارد. جزئیات بیشتر در مورد مشخصات را می توانید در وب سایت Object Management Group بیابید . در واقع، این گروه در حال توسعه مشخصات UML هستند. همچنین جالب است که UML به توصیف ساختار کلاس ها محدود نمی شود. انواع مختلفی از نمودارهای UML وجود دارد. شرح مختصری از انواع نمودارهای UML را می توان در همان ویکی پدیا مشاهده کرد: نمودارهای UML یا در ویدیوی تیمور باتیرشینوف بررسی نمودارهای UML . UML همچنین به طور گسترده برای توصیف فرآیندهای مختلف استفاده می شود، به عنوان مثال در اینجا: Single sign-on با استفاده از JWT . در بازگشت به استفاده از نمودارهای کلاس UML، شایان ذکر است که کتاب Head First: Design Patterns که در آن الگوها با همان نمودارهای 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
List
Collection
- یکی از کلاس های کودک یعنی از Collection ارث می برد. این ارتباط را تعمیم می گویند. به نظر می رسد یک فلش با یک خط پیوسته منظم است. بیایید آن را به تصویر بکشیم:
interface Collection
Collection <|-- List
برای نوع اتصال زیر، ArrayList
یک ورودی در مورد آرایه خصوصی عناصر بسته به توضیحات کلاس اضافه کنید:
~Object[] elementData
اکنون می خواهیم نشان دهیم که چه چیزی ArrayList
حاوی برخی از اشیاء است. در این صورت، نوع اتصال تجمیع خواهد بود . واحد در این مورد است ArrayList
، زیرا شامل اشیاء دیگری است. ما تجمیع را انتخاب می کنیم زیرا اشیاء موجود در لیست می توانند بدون لیست زندگی کنند: آنها بخش جدایی ناپذیر آن نیستند. طول عمر آنها به طول عمر لیست گره خورده نیست. آگرگات از لاتین به "مجموعه" ترجمه شده است، یعنی چیزی که از چیزی ساخته شده است. به عنوان مثال، در زندگی، یک واحد پمپاژ وجود دارد که از یک پمپ و یک موتور تشکیل شده است. خود واحد می تواند جدا شود و برخی از اجزای آن باقی بماند. به عنوان مثال، برای فروش یا قرار دادن در یک واحد دیگر. لیست هم همینطور. و این به صورت یک الماس خالی در نزدیکی واحد و یک خط پیوسته بیان می شود. بیایید آن را اینگونه به تصویر بکشیم:
class Object{
}
ArrayList o- Object
اکنون میخواهیم نشان دهیم که ArrayList
کلاس بر خلاف کانتینرهایی LinkedList
است Node
که به دادههای ذخیره شده اشاره میکنند. در این صورت Node
آنها بخشی از خودشان هستند LinkedList
و نمی توانند جدا زندگی کنند. Node
محتوای مستقیم ذخیره نمی شود، بلکه فقط حاوی یک پیوند به آن است. به عنوان مثال، وقتی به LinkedList
یک ردیف اضافه می کنیم، یک جدید اضافه می کنیم Node
که حاوی پیوندی به آن سطر و همچنین پیوندی به ردیف قبلی و بعدی است Node
. این نوع ارتباط ترکیبی نامیده می شود . برای نمایش یک کامپوزیت (که از قطعات تشکیل شده است)، یک الماس رنگی ترسیم می شود که یک خط پیوسته به آن منتهی می شود. حالا بیایید این را به عنوان نمایش متنی اتصال بنویسیم:
class Node{
}
LinkedList *-- Node
و اکنون باید بیاموزیم که چگونه نوع مهم دیگری از رابطه را نشان دهیم - رابطه وابستگی . زمانی استفاده میشود که یک کلاس از کلاس دیگر استفاده میکند، و کلاس شامل کلاس مورد استفاده نیست و نسل آن نیست. به عنوان مثال، LinkedList
آنها ArrayList
می دانند چگونه ایجاد کنند ListIterator
. بیایید این را به صورت فلش هایی با خط نقطه نشان دهیم:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
بعد از همه اینها به این شکل خواهد شد:
اتوماسیون
راه های مختلفی برای تولید خودکار نمودارهای PlantUML وجود دارد. به عنوان مثال، Idea یک پلاگین SketchIT دارد ، اما آنها را به درستی ترسیم نمی کند. به عنوان مثال، پیاده سازی اینترفیس ها به اشتباه ترسیم شده است (به عنوان وراثت نمایش داده می شود). همچنین نمونه هایی در اینترنت وجود دارد که چگونه می توان این را در چرخه عمر ساخت پروژه خود قرار داد. فرض کنید یک مثال برای Maven با استفاده از uml-java-docklet وجود دارد . برای نشان دادن نحوه انجام این کار، از Maven Archetype برای ایجاد سریع پروژه Maven استفاده می کنیم. بیایید این دستور را اجرا کنیم:mvn archetype:generate
هنگامی که از شما خواسته شد فیلتری را انتخاب کنید ( یک عدد را انتخاب کنید یا فیلتر را اعمال کنید )، به سادگی با فشار دادن Enter، پیش فرض را ترک کنید. این همیشه " maven-archetype-quickstart " خواهد بود . آخرین نسخه را انتخاب کنید. سپس به سوالات پاسخ می دهیم و ایجاد پروژه را تکمیل می کنیم:
mvn clean install
در آن قرار دارد اجرا کنیم: و mvn javadoc:javadoc
. حال اگر مستندات تولید شده (explorer target\site\apidocs\index.html) را باز کنیم، نمودارهای UML را مشاهده خواهیم کرد. به هر حال، پیاده سازی قبلاً به درستی در اینجا نمایش داده شده است)
GO TO FULL VERSION