Trong UML (Unified Modeling Language), class diagram (biểu đồ lớp) đóng vai trò thiết yếu trong việc mô hình hóa cấu trúc của các hệ thống phần mềm. Do đó, việc nắm bắt và sử dụng chính xác các ký hiệu trong biểu đồ lớp là bước quan trọng để phản ánh đúng kiến trúc và các mối quan hệ giữa các lớp trong hệ thống.
Trong bài viết này, chúng ta sẽ cùng tìm hiểu các ký hiệu được sử dụng trong class diagram và cách sử dụng chúng thông qua các ví dụ minh họa cụ thể.
1. Class
Class đại diện cho một nhóm các đối tượng có thuộc tính và hành vi tương tự nhau, dùng để mô hình hóa và thiết kế các thành phần của hệ thống trong lập trình hướng đối tượng, giúp các lập trình viên hiểu rõ cấu trúc và mối quan hệ giữa các đối tượng.
Một class bao gồm ba thành phần chính:
- Tên của class: Đây là tên đại diện cho nhóm đối tượng.
- Thuộc tính (Attribute): Các biến mô tả trạng thái của các đối tượng trong class.
- Phương thức (Method): Các hàm hoặc thủ tục thể hiện hành vi của các đối tượng trong class.
Class được ký hiệu bằng một hình chữ nhật được chia thành ba phần, với tên class ở phần đầu, sau đó là các thuộc tính, và cuối cùng là các phương thức.
Đối với abstract class, tên class sẽ được viết in nghiêng.
Đối với interface, tên interface sẽ được thêm <<interface>>
.
Ví dụ: trong hệ thống cho mượn sách, người dùng là Member sẽ có thuộc tính và phương thức như sau:
Thuộc tính:
id
: số nguyên, định danh duy nhất cho mỗi người dùng.name
: chuỗi ký tự, tên của người dùng.email
: chuỗi ký tự, địa chỉ email của người dùng.password
: chuỗi ký tự, mật khẩu để người dùng đăng nhập.
Phương thức:
borrowBook
: cho phép thành viên mượn sách.returnBook
: cho phép thành viên trả sách.
2. Association
- Ký hiệu: Đường thẳng nối giữa hai class, có thể có mũi tên ở một hoặc cả hai đầu tùy thuộc vào chiều hướng của quan hệ.
- Mô tả: Association biểu diễn mối quan hệ giữa hai class trong đó các đối tượng của một class liên kết với các đối tượng của class khác.
- Ví dụ: Trong hệ thống mượn sách, hoá đơn (bill) và thanh toán (payment) có mối quan hệ association.
Nếu tôi thêm chiều mũi tên, có hướng mũi tên trỏ tới Payment thì trong Bill sẽ có một thuộc tính thể hiện hình thức thanh toán.
3. Inheritance (Quan hệ kế thừa)
- Ký hiệu: Đường thẳng nối giữa hai class và kết thúc bằng một tam giác trắng.
- Mô tả: biểu diễn mối quan hệ kế thừa giữa hai class với nhau hoặc giữa class và abstract class.
- Ví dụ: Trong hệ thống cho mượn sách, sách có 3 loại là sách nói, sách điện tử và sách giấy. Như vậy, các class
AudioBook
,Ebook
vàPaperback
kế thừa các thuộc tính và phương thức của classBook
.
4. Implementation (Quan hệ triển khai)
- Ký hiệu: Đường nét đứt nối giữa hai class và kết thúc bằng một tam giác trắng.
- Mô tả: Biểu diễn mối quan hệ giữa một class và một interface, trong đó class cam kết thực hiện (implement) các phương thức được định nghĩa trong interface.
- Ví dụ: Trong hệ thống cho mượn sách, có một interface
Notifier
định nghĩa các phương thức thông báo của hệ thống như gửi thông báo khi sách mới vềnotifyRestockTimings()
hay khi sách được hoàn trảnotifyReturnTimings()
. ClassEmailNotifier
vàSMSNotifier
triển khai các phương thức đã được khai báo trongNotifier
.
5. Dependency (Quan hệ phụ thuộc)
- Ký hiệu: Đường nét đứt nối giữa hai class và thường kết thúc bằng một mũi tên thể hiện hướng phụ thuộc.
- Mô tả: Một class phụ thuộc vào class khác, thường chỉ trong một phạm vi nhất định hoặc cho một chức năng cụ thể.
- Ví dụ: Trong hệ thống cho mượn sách, số yêu cầu mượn sách (Request) sẽ phụ thuộc vào yêu cầu của thành viên (Member) nên đầu mũi tên hướng về phía Member. Còn công việc của thủ thư (Librarian) lại phụ thuộc vào số lượng Request được tạo nên đầu mũi tên hướng về phía Request.
6. Aggregation
- Ký hiệu: Đường thẳng nối giữa hai class với một hình kim cương trắng ở đầu phía bên của class cần tổng hợp dữ liệu từ class còn lại.
- Mô tả: một class cần thông tin từ class khác, tuy nhiên, hai class này có thể tồn tại độc lập với nhau.
- Ví dụ: Khi member tạo yêu cầu mượn sách, hệ thống tạo ra Request chứa các
RequestItem
.RequestItem
cần thông tin từBook
. Cộng thêm,RequestItem
vàBook
đều có thể tồn tại độc lập nên mối quan hệ sẽ là aggregation với chiều mũi tên hướng về phíaRequestItem
.
7. Composition
- Ký hiệu: Đường thẳng nối giữa hai class với một hình kim cương đen ở đầu phía bên của class cần tổng hợp dữ liệu từ class còn lại.
- Mô tả: một class cần thông tin từ class khác, tuy nhiên, class chứa thông tin không thể tồn tại mà không có class kia.
- Ví dụ:
RequestItem
có thể tồn tại độc lập vớiBook
nhưng lại không tồn tại độc lập vớiRequest
.
8. Tổng kết
- Class diagram là một UML quan trọng trong phát triển phần mềm. Nó được biểu diễn bằng mối quan hệ các class với nhau hoặc giữa class và interface hoặc class và abstract class.
- Có 6 loại mối quan hệ trong class diagram: association, inheritance, implementation, dependency, aggregation và composition.
- Associaton biểu diễn mối quan hệ giữa hai class trong đó các đối tượng của một class liên kết với các đối tượng của class khác
- Inheritance biểu diễn mối quan hệ kế thừa giữa hai class với nhau hoặc giữa class và abstract class.
- Implementation biểu diễn mối quan hệ giữa một class và một interface, trong đó class cam kết thực hiện (implement) các phương thức được định nghĩa trong interface.
- Dependency mô tả một class phụ thuộc vào class khác, thường chỉ trong một phạm vi nhất định hoặc cho một chức năng cụ thể.
- Aggregation mô tả một class cần thông tin từ class khác, tuy nhiên, hai class này có thể tồn tại độc lập với nhau.
- Composition gần giống aggregation, tuy nhiên, class chứa thông tin không thể tồn tại mà không có class cần thông tin.
Nếu bạn quan tâm các chủ đề lập trình khác, có thể tìm đọc tại 200Lab:
Bài viết liên quan
AWS là gì? Top những services AWS được sử dụng nhiều nhất
Jul 04, 2024 • 14 min read
Giải thích các ký hiệu trong use case diagram
Apr 11, 2024 • 7 min read
UML là gì? Giới thiệu các loại UML hay dùng
Apr 11, 2024 • 14 min read
Phỏng vấn Software Engineer tại Google diễn ra như thế nào?
Mar 12, 2024 • 12 min read
Architecture Pattern - Phần 6: Kiến trúc hướng không gian (Space-based architecture)
Mar 05, 2024 • 11 min read
Architecture Pattern - Phần 3: Kiến trúc hướng sự kiện (Event-driven architecture)
Jan 24, 2024 • 11 min read