Giới thiệu
UML (viết tắt của Unified Modeling Language) là định dạng ngôn ngữ hợp nhất được dùng để mô hình hóa hệ thống/phần mềm.
Bài viết này tổng hợp 13 loại sơ đồ UML, được phân chia thành ba nhóm: Structure, Behavior và Interaction, nhằm cung cấp cái nhìn toàn diện và có tính hệ thống cho các nhà phát triển và nghiên cứu.

Structure
Biểu thị view “tĩnh” (static) của hệ thống và các thành phần.
Class Diagram
Class Diagram dùng để mô tả các classifier trong một hệ thống, các đặc điểm của chúng và những mối quan hệ giữa chúng. Nó tập trung vào cấu trúc của hệ thống ở mức mô hình, ví dụ như class, interface và các classifier khác.

Thông thường, Class Diagram được sử dụng trong các hoạt động thiết kế để mô tả cấu trúc của hệ thống, được vẽ bởi các developer.
Thành phần chính:
+---------------------------------+
| MyClass |
+---------------------------------+
| - variableA: int |
| + CONSTANT_B: int = 10 |
|---------------------------------|
| + methodA(): void |
+---------------------------------+
+-----------------------------------------------------------------------------+
| BankAccount |
+-----------------------------------------------------------------------------+
| + accountNumber: string [1] {id, readonly} |
| - ssn: string [1..5] {unique} |
|-----------------------------------------------------------------------------|
| + deposit(in amount: float): float |
| # calcMonthlyAverageBalances(inout monthlyBalances float[12]): void |
+-----------------------------------------------------------------------------+Classifiers
Là các phần tử dùng để phân loại các instance dựa trên những đặc điểm và hành vi chung. Một số loại classifier thường gặp gồm Class, Interface, Enumeration,…
Ký hiệu:
C – Concrete Class
A – Abstract Class
I – Interface
E – Enumeration
Generic class: Dùng hình vuông ở góc phải trên của class hiện tại
Active class: có 2 side bar hai bên, active class là class sẽ run tự động trong thread của nó.
Features
Cung cấp tính chất cấu trúc hoặc hành vi như thuộc tính và method.
Structural: Property mô tả một đặc điểm cấu trúc của class.
Cú pháp:
[visibility] name: type [multiplicity] = default value {property-modifier}Visibility:- private# protected~ package+ public
Multiplicity:*: 0 hoặc nhiều1..*: một hoặc nhiều1: chính xác 1m..n: từ m đến n
Property modifier: id, readOnly, ordered/unordered, unique/nonunique.
Behavioral: Operation mô tả một behavior mà classifier có thể thực hiện.
Cú pháp của method:
[visibility] method-name(parameter-list): return-type {property-modifier}Bên cạnh visibility và property-modifier, method có thêm parameter-list. mỗi item trong đó phải theo cú pháp :
[direction] name: type = default-value
Direction: in, out, inout, return
Relationships
Cách các class phụ thuộc hoặc kế thừa lẫn nhau, hoặc class nào triển khai interface nào. Nó cũng thể hiện được tính: Association, Generalization và Dependency.
Giữa 2 class có thể chia làm những mối quan hệ:
Association Link: một class là nguồn gốc có liên quan đến instance của class kia. Biểu diễn bằng một mũi tên, hai đầu có chứa [multiplicity].
Aggregation và Composition
Association Class: Kết hợp đặc điểm của Association và Class, cho phép mối quan hệ giữa các classifier có thêm các features riêng.
Generalization: biểu diễn quan hệ giữa một classifier tổng quát và một classifier chuyên biệt hơn.
Dependency: biểu diễn quan hệ trong đó một element phụ thuộc vào một element khác.
Component Diagram
Giúp mô hình hóa các thành phần (components) của hệ thống và các mối liên kết, cho thấy cách các module phần mềm được tổ chức và giao tiếp với nhau.
Ví dụ: Mô hình hiển thị các service, repository, controller trong kiến trúc ứng dụng.
Composite Structure Diagram
Dùng để mô tả cấu trúc bên trong của một class hoặc một component, cho thấy các thành phần con và cách chúng phối hợp làm việc với nhau.
Ví dụ: Biểu diễn các phần tử thành phần của một module phần mềm, như các sub-component, ports, và connectors.
Package Diagram

Diagram sẽ hữu dụng khi bạn cần build một ứng dụng lớn và phức tạp. diagram này sẽ group hàng trăm class lại và tạo ra cây kế thừa. Package Diagram giúp nhóm các lớp, đối tượng có liên quan lại với nhau, tạo ra một cấu trúc phân cấp giúp dễ dàng quản lý và hiểu mối quan hệ giữa các module phần mềm.
Deployment Diagram
Cho thấy big picture của một hệ thống trong thể giới thực của các thiết bị, Network, OS, DB.

Dùng bởi architect và development team để mô tả kiến trúc của một hệ thống. Capture cả phần mềm và phần cứng được dùng
Có ba element chính:
- Nodes: đại diện hardware, có hình hộp, có tên trên đầu.
- Artifacts: những gì được deploy trên node đó. VD: exe, jar, docs
- Relationships: bao gồm có thể 2 chiều hoặc 1 chiều
- Communication path: giữa các node
- Dependency
Behavior
Biểu thị view động của hệ thống và các thành phần:
Use Case Diagram
Capture lại chức năng hệ thống ở mức high-level dùng ký hiệu: actor, use cases và relationships
Thường được dùng bởi các bạn làm công việc Business Analysist nhằm mô tả tổng hợp các use case trong hệ thống
Use case là gì?
Trong kỹ thuật phần mềm và hệ thống, cụm từ use case là một polyseme có hai nghĩa: Một kịch bản sử dụng cho một phần mềm; thường được sử dụng ở số nhiều để gợi ý các tình huống mà một phần mềm có thể hữu ích. Một kịch bản tiềm năng trong đó hệ thống nhận được yêu cầu bên ngoài và đáp ứng yêu cầu đó.
Wikipedia
Có 4 thành phần chính:
- Actor: Có thể là người dùng hoặc một hệ thống khác
- Primary Actor: Mục tiêu mà toàn bộ hệ thống phải xử lý
- Secondary Actor: Thường là một hệ thống bên ngoài tham gia vào
- Use Case: hình oval, màu xám chứa tiêu đề
- Association: Quan hệ giữa use case và actor
- Giữa các Use Case:
- Include: cần gọi đến
- Extend (optional): được add thêm vào hệ thống


Activity Diagram
Dùng để vẽ workflow hoặc quy trình. Tương tự flow charts nhưng có hành vi song song và nhiều actor tham gia.
Được dùng bởi nhiều đối tượng: BA, Developer để capture requirement understanding.

Có 6 thành phần chính
- Start và End node
- Action
- Flow
- Fork & Join
- Fork: ngắt process hiện thành thành 2 track song song. Có một flow đến và nhiều flow đi
- Join: ngược với Fork: Có nhiều flow đến và một flow đi. Luồng đi chỉ bắt đầu khi tất cả luồng đến đã vào.

- Decision & Merge
- Decision: điều kiện, có một flow đến và nhiều flows đi riêng dựa theo từng điều kiện

- Swimlanes: Mô tả đối tượng thực hiện. Mỗi đối tượng đại diện bởi 1 swimlane

Swimlane có thể được mô tả dưới dạng nằm ngang như sau:

State Machine Diagram
Được sử dụng để mô phỏng hành vi động của một đối tượng, chi tiết về các trạng thái mà đối tượng có thể ở và các chuyển đổi giữa các trạng thái này. Biểu đồ này nhấn mạnh vào tính chất sự kiện của hệ thống.
Interaction
Biểu thị tương tác
- Giữa các thành phần của một hệ thống
- Giữa hệ thống và các tác nhân bên ngoài

Class và attribute được minh họa qua static diagrams, trong khi tương tác: methods sẽ được mô tả bằng sequence diagram.
Sequence Diagram
Loại diagram này sẽ capture hành vi/giao tiếp tương tác giữa hai hay nhiều entities trong một scenario.

Hướng:
- Trên-xuống
- Trái-sang-phải hoặc phải-sang-trái
Thành phần trong sequence diagram:

- Participant: đối tượng sống
- Lifetime: đi từ trên-xuống
- Interaction messages:
- Request: participant làm hành động, dùng mũi tên đường thẳng
- Response: dùng mũi tên đứt khúc, khi có giá trị trả về, mô tả kiểu dữ liệu trả về.
- Đặc tả Activation / execution
- Fragments: conditional
- Opt: tùy chọn
- Alt: alternative, tương tự if / else
- Loop: Vòng lặp

Communication Diagram
Loại diagram này khá tương tự sequence diagram. Điểm khác biệt ở chỗ: nó không có lifeline, mà tập trung lên mối liên kết giữa các object.

Timing Diagram
Thường dùng trong kỹ thuật điện tử để xem các thành phần trong một đường điện.

Bốn thành phần chính trong loại diagram:
- Timeline: thang đơn vị thời gian
- Frames: đại diện đối tượng mà lifetime đang minh họa
- Lifelines: phần động trong diagram này, mô tả các trạng thái của một đối tượng. Có 2 loại lifeline:
- Value lifetime: vẽ bằng dạng miền, chuyển qua lại giữa khác giá trị. Ví dụ: on/off
- State lifetime:
- Messages
Interaction Overview Diagram
Mô tả tổng quan của control flow, kết hợp activity và interaction diagrams.

Bao gồm ba loại thành phần
- Frame: Hình vuông với header trên-trái mô tả action, có thể là ref (reference), sd (sequence diagram).
- Node:
- Interaction
- Interaction use
Kết thúc
Tóm lại, việc áp dụng UML giúp tối ưu hóa quy trình thiết kế và triển khai phần mềm một cách khoa học và hiệu quả 🚀. Hy vọng bài viết sẽ là nguồn tài liệu tham khảo giá trị, hỗ trợ nâng cao chất lượng dự án và thúc đẩy sự đổi mới trong nghiên cứu phần mềm.
