de_DEen_USes_ESfa_IRfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

راهنمای عملی برای ۱۴ نوع نمودار UML با استفاده از ابزار VPasCode

نمودارهای UML معمولاً در دو دسته قرار می‌گیرند:ساختاری نمودارها که توصیف‌کننده اجزای تشکیل‌دهنده یک سیستم هستند، ورفتاری نمودارها که توصیف‌کننده عملکرد سیستم هستند. مثال‌های زیر از یک سناریوی فروشگاه آنلاین واحد استفاده می‌کنند تا بتوان آن‌ها را مقایسه و تطبیق داد. UML 2.5.1 مشخصات رسمی مورد ارجاع در اینجا است.

PlantUML بسیاری از نمادگذاری‌های UML را مستقیماً ترسیم می‌کند. چندین نوع نمودار تخصصی—به‌ویژه پروفایل، ساختار ترکیبی، ارتباط و نمای تعامل—ممکن است با استفاده از یک تقریب عملی در PlantUML به جای یک رندرر اختصاصی نمودار بیان شوند. نظرات، این موارد را مشخص می‌کنند.

نمودارهای ساختاری

۱. نمودار کلاس

کلاس‌های سیستم، داده‌ها و عملیات آن‌ها، و روابطی مانند وابستگی، ارث‌بری و ترکیب را نشان می‌دهد. از آن برای بحث درباره مدل‌های دامنه یا طراحی شی‌گرا استفاده کنید.

@startuml
class Customer {
  +id: String
  +email: String
  +placeOrder(): Order
}

class Order {
  +number: String
  +status: OrderStatus
  +total(): Money
}

class OrderLine {
  +quantity: int
  +unitPrice: Money
}

class Product {
  +sku: String
  +name: String
}

Customer "1" -- "0..*" Order : places
Order "1" *-- "1..*" OrderLine : contains
OrderLine "*" --> "1" Product : refers to
@enduml

آن را بخوانید:یک مشتری می‌تواند سفارش‌های متعددی ثبت کند؛ یک سفارش شامل یک یا چند خط است؛ هر خط به یک محصول اشاره می‌کند. الماس پررنگ نشان‌دهنده ترکیب است: سفارش، خطوط خود را مالک است.

۲. نمودار شیء

نمونه‌های عینی و پیوندها را در یک لحظه زمانی نشان می‌دهد. برای نمایش داده‌های نمونه یا توضیح یک مدل کلاس با یک سناریوی خاص مفید است. در PlantUML، از نمادگذاری شیء استفاده کنید.

@startuml
object "alice:Customer" as alice {
  id = C104
  email = [email protected]
}

object "order:Order" as order {
  number = O9001
  status = PAID
}

object "line:OrderLine" as line {
  quantity = 2
  unitPrice = 19.99
}

object "mug:Product" as mug {
  sku = MUG-01
  name = Travel mug
}

alice -- order
order *-- line
line --> mug
@enduml

۳. نمودار مؤلفه

اجزای نرم‌افزاری قابل استقرار یا قابل تعویض و وابستگی‌های آن‌ها را نشان می‌دهد. از آن برای ارتباط درباره معماری برنامه و مرزهای یکپارچه‌سازی استفاده کنید.

@startuml
component "Web Store" as web
component "Order Service" as orders
component "Payment Adapter" as payments
database "Order DB" as db
cloud "Payment Provider" as provider

web --> orders : REST
orders --> db : SQL
orders --> payments : authorize
payments --> provider : HTTPS
@enduml

۴. نمودار ساختار ترکیبی

اجزای داخلی یک طبقه‌بندی‌کننده—مانند یک مؤلفه یا کلاس—و نحوه اتصال آن اجزا از طریق پورت‌ها را نشان می‌دهد. زمانی مفید است که همکاری داخلی مهم‌تر از معماری سیستم اطراف باشد.

PlantUML یک نحو اختصاصی و به‌طور جهانی پشتیبانی‌شده برای ساختارهای ترکیبی ارائه نمی‌دهد. این طرح به سبک نمودار کلاس، اجزا و اتصالات را منتقل می‌کند:

@startuml
allowmixing
skinparam componentStyle rectangle

class Car {
}

package "Car" {
  component "engine : Engine" as engine {
    portout p1
  }

  component "transmission : Transmission" as trans {
    portin p2
    portout p3
  }

  component "wheel : Wheel [4]" as wheels {
    portin p4
  }

  p1 -- p2 : drives
  p3 -- p4 : power
}

@enduml

این را به عنوان یک طرح ساختاری در نظر بگیرید؛ این طرح پورت‌های رسمی UML یا معانی اتصال را نشان نمی‌دهد.

۵. نمودار استقرار

موجودیت‌های نرم‌افزاری یا خدمات را روی گره‌های سخت‌افزاری و محیط‌های اجرایی نقشه‌برداری می‌کند. از آن برای توضیح محل اجرای نرم‌افزار و نحوه ارتباط گره‌های زمان اجرا استفاده کنید.

@startuml
node "Customer device" as client {
  artifact "Browser"
}

node "Cloud" {
  node "Application host" as appHost {
    artifact "Store API"
  }
  database "Order database" as db
}

cloud "External payment provider" as pay

client --> appHost : HTTPS
appHost --> db : SQL
appHost --> pay : HTTPS
@enduml

۶. نمودار بسته

عناصر مدل را در نام‌فضاها یا لایه‌ها گروه‌بندی می‌کند و وابستگی‌ها بین آن گروه‌ها را نشان می‌دهد. از آن برای توضیح سازماندهی کد و جهت معماری استفاده کنید.

@startuml
package "store.web" {
  class CheckoutController
}

package "store.application" {
  class PlaceOrder
}

package "store.domain" {
  class Order
  class Product
}

package "store.persistence" {
  class OrderRepository
}

CheckoutController ..> PlaceOrder
PlaceOrder ..> Order
PlaceOrder ..> OrderRepository
@enduml

۷. نمودار پروفایل

یک گسترش اختصاصی به UML را با استفاده از استریوتایپ‌ها، مقادیر برچسب‌دار و قیود تعریف می‌کند. از آن زمانی استفاده کنید که یک پروژه نیاز به یک واژگان مدل‌سازی یکپارچه فراتر از UML استاندارد دارد.

PlantUML می‌تواند مفاهیم پروفایل را به عنوان یک طرح به سبک UML نمایش دهد، اما این یک رندرکننده اختصاصی برای نمودار پروفایل نیست.

@startuml
class "«profile» StoreProfile" as Profile
class "«stereotype» «Service»" as Service
class "«stereotype» «Repository»" as Repository
class "«metaclass» Component" as Component

Profile ..> Service : defines
Profile ..> Repository : defines
Service ..> Component : extends
Repository ..> Component : extends

note right of Service
  tagged value:
  owner: String
end note
@enduml

نمودارهای رفتاری

۸. نمودار مورد استفاده

نقش‌های خارجی و اهداف سیستمی که با آن‌ها تعامل دارند را نشان می‌دهد. از آن برای تعیین محدوده و ثبت الزامات عملکردی در سطح بالا استفاده کنید.

@startuml
جهت چپ به راست
نقش مشتری
نقش "ارائه‌دهنده پرداخت" به عنوان Provider

مستطیل "فروشگاه آنلاین" {
  مورد استفاده "مرور محصولات" به عنوان Browse
  مورد استفاده "ثبت سفارش" به عنوان Place
  مورد استفاده "پرداخت سفارش" به عنوان Pay
  مورد استفاده "ردیابی سفارش" به عنوان Track
}

مشتری --> Browse
مشتری --> Place
مشتری --> Track
Provider --> Pay
Place ..> Pay : <<شامل>>
@enduml

۹. نمودار فعالیت

یک جریان کاری را مدل‌سازی می‌کند: اقدامات، تصمیم‌ها، مسیرهای موازی و تحویل‌ها. از آن برای فرآیندهای کسب‌وکار، رویه‌های عملیاتی یا جریان کنترل یک الگوریتم استفاده کنید.

@startuml
شروع
:انتخاب اقلام;
:وارد کردن جزئیات تحویل;
:محاسبه مجموع;

اگر (اقلام موجود هستند؟) آنگاه (بله)
  :مجوز پرداخت;
  اگر (پرداخت تأیید شد؟) آنگاه (بله)
    :ایجاد سفارش;
    :ارسال تأییدیه;
  در غیر این صورت (خیر)
    :نمایش خطای پرداخت;
  پایان اگر
در غیر این صورت (خیر)
  :نمایش اقلام غیرموجود;
  پایان اگر

پایان
@enduml

۱۰. نمودار ماشین حالت

حالت‌هایی را که یک موجودیت می‌تواند اشغال کند و رویدادها یا شرایطی که باعث گذار می‌شوند، توصیف می‌کند. از آن زمانی استفاده کنید که رفتار یک شیء به حالت فعلی آن وابسته باشد.

@startuml
[*] --> پیش‌نویس
پیش‌نویس --> در انتظار پرداخت : ارسال
در انتظار پرداخت --> پرداخت شده : پرداخت تأیید شد
در انتظار پرداخت --> لغو شده : پرداخت رد شد
در انتظار پرداخت --> لغو شده : مشتری لغو می‌کند
پرداخت شده --> ارسال شده : ارسال
ارسال شده --> تحویل شده : تحویل تأیید شد
لغو شده --> [*]
تحویل شده --> [*]
@enduml

۱۱. نمودار توالی

پیام‌های مبادله شده بین شرکت‌کنندگان را به ترتیب زمانی نشان می‌دهد. از آن برای توصیف یک سناریو، جریان فراخوانی API یا تعامل بین سرویس‌ها استفاده کنید.

@startuml
نقش مشتری
شرکت‌کننده "فروشگاه وب" به عنوان Web
شرکت‌کننده "سرویس سفارش" به عنوان Orders
شرکت‌کننده "سرویس پرداخت" به عنوان Payments

مشتری -> Web : ارسال تسویه حساب
Web -> Orders : ایجاد سفارش
Orders -> Payments : مجوز پرداخت
Payments --> Orders : تأیید شد
Orders --> Web : تأیید سفارش
Web --> Customer : نمایش تأییدیه
@enduml

۱۲. نمودار ارتباطی

بر روی اینکه کدام اشیاء با هم همکاری می‌کنند و پیوندهای بین آن‌ها تأکید می‌کند؛ شماره‌گذاری پیام‌ها ترتیب تعاملات را نشان می‌دهد. از آن زمانی استفاده کنید که شبکه شرکت‌کنندگان همکاری‌کننده مهم‌تر از یک خط زمانی باشد.

PlantUML در مجموعه استاندارد UML خود یک رندرکننده اختصاصی برای نمودار ارتباطی ندارد. این طرح پیوند شیء، پیام‌ها را با شماره‌های توالی برچسب‌گذاری می‌کند:

@startuml
شیء مشتری
شیء فروشگاه وب
شیء سرویس سفارش
شیء سرویس پرداخت

مشتری --> WebStore : ۱: تسویه حساب()
WebStore --> OrderService : ۱.۱: ایجاد سفارش()
OrderService --> PaymentService : ۱.۲: مجوز()
PaymentService --> OrderService : ۱.۳: تأیید
OrderService --> WebStore : ۱.۴: تأییدیه
@enduml

۱۳. نمودار نمای کلی تعامل

یک نمای کنترل‌جریان سطح بالا از تعاملات ارائه می‌دهد که جریان به سبک فعالیت را با ارجاعات به سناریوهای تعامل ترکیب می‌کند. از آن برای نشان دادن اینکه چگونه چندین سناریوی سطح توالی در یک فرآیند بزرگ‌تر جای می‌گیرند، استفاده کنید.

این مثال PlantUML از یک نمودار فعالیت به عنوان نمای کلی استفاده می‌کند، که در آن نام‌های سناریو به جای تعاملات ارجاع‌شده قرار گرفته‌اند:

@startuml
skinparam conditionStyle InsideDiamond

title نمودار نمای کلی تعامل: سیستم پردازش سفارش

start

:مشتری سفارش را ثبت می‌کند;

if (آیا کالا موجود است؟) then (بله)
  
  partition "sd توالی پرداخت" {
    :مجوز پرداخت;
    :کسر موجودی انبار;
  }
  
else (خیر)
  
  partition "sd فرآیند سفارش معوق" {
    :اعلام به مشتری;
    :ایجاد درخواست تأمین‌کننده;
  }
  
endif

fork
  partition "sd توالی ارسال" {
    :بسته‌بندی سفارش;
    :ارسال به آدرس;
  }
fork again
  partition "sd توالی صورتحساب" {
    :ایجاد فاکتور;
    :ارسال ایمیل رسید;
  }
end fork

:بستن سفارش;

stop
@enduml

برای تبادل‌های پیامی دقیق در داخل هر سناریو، یک نمودار توالی جداگانه ایجاد کنید.

۱۴. نمودار زمان‌بندی

تغییرات وضعیت یا مقدار را در برابر محور زمان نشان می‌دهد. از آن برای رفتارهای حساس به زمان، پروتکل‌ها، تعاملات سخت‌افزاری یا الزاماتی که شامل مدت‌ها و مهلت‌ها هستند، استفاده کنید.

@startuml
robust "سفارش" as Order
concise "پرداخت" as Payment

@0
سفارش پیش‌نویس است
پرداخت در حالت بیکار است

@5
سفارش در انتظار است
پرداخت در حال پردازش است

@10
پرداخت تأیید شده است

@12
سفارش تأیید شده است
@enduml

انتخاب نمودار

با سوالی که نیاز دارید نمودار به آن پاسخ دهد شروع کنید:

  • چه چیزی در سیستم وجود دارد؟کلاس، شیء، جزء، ساختار ترکیبی، بسته، پروفایل یا استقرار.

  • سیستم چه کاری انجام می‌دهد؟مورد استفاده، فعالیت یا ماشین وضعیت.

  • شرکت‌کنندگان چگونه همکاری می‌کنند؟توالی، ارتباط، نمای کلی تعامل یا زمان‌بندی.

هر نمودار را بر یک هدف متمرکز نگه دارید، از نام‌های یکسان در سراسر نمودارها استفاده کنید و تنها به اندازه‌ای جزئیات را شامل کنید که برای مخاطب و تصمیم مورد نیاز کافی باشد. قطعات PlantUML نقاط شروع هستند: سینتکس پشتیبانی‌شده توسط رندرکننده خود را بررسی کنید، به‌ویژه برای انواع نمودارهای تخصصی.

This post is also available in Deutsch, English, Español, Français, Bahasa Indonesia, 日本語, Polski, Portuguese, Ру́сский, Việt Nam, 简体中文 and 繁體中文.