JavaRush /وبلاگ جاوا /Random-FA /UML: از تئوری تا عمل
Viacheslav
مرحله

UML: از تئوری تا عمل

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

معرفی

فکر می‌کنم همه در کودکی چنین ضرب‌المثلی را شنیده‌اند که « دوبار اندازه‌گیری کن، یک‌بار برش بده ». در برنامه نویسی هم همینطور است. همیشه بهتر است قبل از صرف زمان برای اجرای آن، به اجرای آن فکر کنید. اغلب در حین پیاده سازی باید کلاس هایی ایجاد کنید و تعامل آنها را ابداع کنید. و اغلب یک نمایش بصری از این می تواند به حل مشکل به درست ترین روش کمک کند. اینجاست که UML به ما کمک می کند .

UML چیست؟

اگر به تصاویر در موتورهای جستجو نگاه کنید، مشخص می شود که UML چیزی در مورد نمودارها، فلش ها و مربع ها است. آنچه مهم است این است که UML به زبان مدلسازی یکپارچه ترجمه می شود . کلمه Unified در اینجا مهم است. یعنی تصاویر ما نه تنها توسط ما، بلکه توسط دیگرانی که UML را می شناسند نیز درک می شوند. به نظر می رسد که این یک زبان بین المللی برای رسم نمودار است.

UML: از تئوری تا عمل - 1

همانطور که ویکی پدیا می گوید

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

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
برای مشاهده نتیجه در Idea، "View" -> "Tool Windows" -> "PlantUML" را انتخاب کنید. ما فقط دو مربع به نمایندگی از کلاس ها دریافت می کنیم. همانطور که می دانیم، هر دوی این کلاس ها رابط List را پیاده سازی می کنند. این رابطه کلاسی پیاده سازی نامیده می شود. برای به تصویر کشیدن چنین ارتباطی، از یک فلش با یک خط نقطه استفاده کنید. بیایید آن را به تصویر بکشیم:
interface List
List <|.. ArrayList
List <|.. LinkedList
ListCollection- یکی از کلاس های کودک یعنی از 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
بعد از همه اینها به این شکل خواهد شد:
UML: از تئوری تا عمل - 4
می توانید تا جایی که لازم است وارد جزئیات شوید. تمام نامگذاری ها در اینجا نشان داده شده است: " PlantUML - Class Diagram ". علاوه بر این، هیچ چیز ماوراء طبیعی در ترسیم چنین نموداری وجود ندارد و هنگام کار بر روی وظایف خود، می توانید به سرعت آن را با دست ترسیم کنید. این مهارت‌های شما را در تفکر از طریق معماری برنامه‌ها توسعه می‌دهد و به شما کمک می‌کند نقص‌های ساختار کلاس را زودتر شناسایی کنید، نه بعد از اینکه یک روز را صرف اجرای مدل اشتباه کردید. فکر می کنم دلیل خوبی برای امتحان کردن آن است؟ )
UML: از تئوری تا عمل - 5

اتوماسیون

راه های مختلفی برای تولید خودکار نمودارهای PlantUML وجود دارد. به عنوان مثال، Idea یک پلاگین SketchIT دارد ، اما آنها را به درستی ترسیم نمی کند. به عنوان مثال، پیاده سازی اینترفیس ها به اشتباه ترسیم شده است (به عنوان وراثت نمایش داده می شود). همچنین نمونه هایی در اینترنت وجود دارد که چگونه می توان این را در چرخه عمر ساخت پروژه خود قرار داد. فرض کنید یک مثال برای Maven با استفاده از uml-java-docklet وجود دارد . برای نشان دادن نحوه انجام این کار، از Maven Archetype برای ایجاد سریع پروژه Maven استفاده می کنیم. بیایید این دستور را اجرا کنیم: mvn archetype:generate هنگامی که از شما خواسته شد فیلتری را انتخاب کنید ( یک عدد را انتخاب کنید یا فیلتر را اعمال کنید )، به سادگی با فشار دادن Enter، پیش فرض را ترک کنید. این همیشه " maven-archetype-quickstart " خواهد بود . آخرین نسخه را انتخاب کنید. سپس به سوالات پاسخ می دهیم و ایجاد پروژه را تکمیل می کنیم:
UML: از تئوری تا عمل - 6
از آنجایی که Maven تمرکز این مقاله نیست، پاسخ به سوالات 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.xmlmvn 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