Lập mô hình với Java: Một cuốn sách bài tập về UML, Phần 2
Logic điều kiện trong các sơ đồ tuần tự
Granville Miller, Tác giả, TogetherSoft
Tóm tắt: Ông xem xét vai trò của logic điều kiện trong việc lập sơ đồ tuần tự và
thảo luận về lý do tại sao bạn có thể chọn đưa vào hay loại ra các điều kiện và các
vòng lặp từ một sơ đồ. Granville cũng mô tả hai dạng sơ đồ tuần tự sơ đồ chung
(generic) và sơ đồ cá thể (instance) và giải thích các ứng dụng tương ứng của
chúng trong chu kỳ phát triển.
Như tôi đã giải thích trong loạt bài chuyên mục nhập môn, việc lập sơ đồ tuần tự
được sử dụng để mô tả hành vi bên trong của một hệ thống theo thời gian. Vì hành
vi hệ thống là kết quả của các đối tượng gửi thông điệp cho nhau, các sơ đồ tuần tự
vẽ ra đường đi của các thông điệp đó khi chúng chuyển từ đối tượng này đến đối
tượng khác. Sau cùng, các sơ đồ tuần tự là các bản đồ tương tác. Trong bài viết
trước, chúng ta đã tạo ra một bản đồ khá đơn giản, mặc dù chúng ta đã mô tả khá
nhiều tương tác. Lần này, chúng ta sẽ đào sâu hơn một chút, bằng việc xem xét hai
dạng sơ đồ tuần tự do UML định nghĩa. Hai dạng đó là sơ đồ chung và sơ đồ cá
thể. Hãy bắt đầu bằng việc xem xét ứng dụng thích hợp của từng dạng.
Hai kiểu sơ đồ tuần tự
Các sơ đồ tuần tự được sử dụng để mô tả hai kiểu tương tác khác nhau giữa các
đối tượng. Một kiểu tương tác là phải tương tác (must interaction), trong đó đối
tượng A phải gửi một thông điệp cụ thể đến đối tượng B. Kiểu tương tác kia là có
thể tương tác (may interaction), trong đó đối tượng A có thể (nhưng không buộc
phải) gửi một thông điệp cụ thể đến đối tượng B. Hai dạng sơ đồ tuần tự mô tả hai
kiểu tương tác khác nhau ấy. Dạng chung mô tả các tương tác phải làm và dạng cá
thể mô tả các tương tác có thể làm.
Dạng chung của sơ đồ tuần tự mô tả tương tác của các lớp như là kết quả của một
kích thích tố ban đầu. Dạng chung cung cấp tư liệu cho toàn bộ các tương tác mà
có thể bắt nguồn từ kích thích tố ban đầu. Cả điều kiện thành công lẫn điều kiện
thất bại là một phần của kiểu sơ đồ này, cũng như các vòng lặp, các điều kiện, và
các rẽ nhánh.
Một sơ đồ tuần tự chung chỉ chứa tên lớp trong mỗi hộp dọc theo trục ngang, như
Phần 3: "Logic giao diện người dùng trong việc lập mô hình ca sử dụng"
(06.2001)
Phần 4: "Vai trò của tác nhân" (06.2002)
Chúng ta đã làm việc với dạng chung trong mục trước, và sẽ tiếp tục khám phá
dạng đó ở đây. Lần này, chúng ta sẽ khám phá vai trò của logic điều kiện trong
một sơ đồ tuần tự chung, bằng cách này mở rộng kiến thức của bạn về ký pháp
UML.
Logic điều kiện trong việc lập sơ đồ tuần tự
Các sơ đồ tuần tự chung sử dụng logic điều kiện, có thể hữu ích cho việc mô tả
luồng sự kiện trong suốt quá trình của một tương tác. Bạn sẽ sử dụng các mức độ
chi tiết khác nhau khi lập sơ đồ, tùy thuộc vào bạn đang ở đâu trong vòng đời phát
triển phần mềm. Khi phân tích, bạn có thể đồng ý gác lại các chi tiết khỏi các biểu
thức điều kiện của bạn, nhưng ngược lại khi thiết kế bạn có thể phải đi tiếp đến
mức đưa vào các đoạn mã sẽ sử dụng trong sản phẩm cuối.
Dù bạn đang ở giai đoạn nào trong chu kỳ phát triển, sự tương ứng tự nhiên giữa
các sơ đồ tuần tự và một ngôn ngữ hướng đối tượng như ngôn ngữ Java trở nên rõ
ràng khi nói đến vẽ sơ đồ các biểu thức điều kiện. Ví dụ, hãy xem xét một ứng
dụng ngân hàng cho phép các nhân viên thu ngân nhận tiền gửi vào. Như đã xác
định rõ, ngoài nhiều thứ khác, rằng hệ thống phải ngăn chặn việc để nhân viên thu
ngân ghi có một khoản âm vào một tài khoản, điều mà sẽ dẫn đến khấu trừ từ tài
khoản đó. Do đó hệ thống phải có một cơ chế để kiểm tra rằng bất kỳ khoản nào
đã được gõ nhập là số dương. Liệt kê 1 cho thấy biểu thức điều kiện đảm bảo tiền
gửi vào là số dương.
Liệt kê 1. Một phương thức với một biểu thức điều kiện
\** This is a method in a Teller class **\
public void receiveDeposit(Account account, BigDecimal deposit)
throws ImproperDepositException {
// Check to ensure the deposit is positive
Vẽ sơ đồ một vòng lặp for
Như ví dụ trên cho thấy, các sơ đồ tuần tự chung và trong thực tế tất cả các sơ
đồ UML ánh xạ chặt chẽ với cú pháp ngôn ngữ Java. Kết quả là, hầu hết các nhà
phát triển Java có một sự hiểu biết trực giác các sơ đồ này, và có thể học cách sử
dụng chúng khá nhanh. Để khám phá tiếp sự tương ứng giữa các sơ đồ tuần tự
chung và ngôn ngữ Java, chúng ta sẽ vẽ sơ đồ vòng lặp for như thể hiện trong Liệt
kê 2.
Liệt kê 2. Một vòng lặp FOR
for ( int i =0; i < 4; i++) {
squareRoom.examineCorner(i);
}
Trong các sơ đồ tuần tự, phép lặp được ký hiệu bằng một dấu hoa thị (*) trước tên
thông điệp trên mũi tên ngang. Nếu số lần lặp đã biết và cố định ít khi xảy ra
số đó xuất hiện trong dấu ngoặc vuông tiếp sau dấu hoa thị. Do phần lớn các vòng
lặp for làm việc với logic phức tạp mà không cho phép số lần lặp được xác định
một cách tĩnh, bạn sẽ không thường xuyên sử dụng ký pháp kiểu dấu ngoặc này.
Sơ đồ tuần tự cho vòng lặp for trên đây thể hiện trong Hình 5.
Hình 5. Một sơ đồ tuần tự cho vòng lặp FOR
Vẽ sơ đồ một vòng lặp while
Vòng lặp while là một thí dụ hoàn hảo để xem xét kỹ hơn, vì nó kết hợp một vòng
lặp với một điều kiện. Chúng ta sẽ vẽ sơ đồ vòng lặp while như thể hiện trong Liệt
kê 3.
tuần tự, tôi đã chỉ cho bạn cách biểu thị các điều kiện và lần lặp trong một sơ đồ.
Đến lúc này bạn đã thấy cách các vòng lặp for và while được lập sơ đồ như thế
nào, tôi mời bạn thực hành ký pháp mô hình hoá trên các cấu trúc Java khác,
chẳng hạn như vòng lặp do-while. Khi bạn tự mình thực hành vẽ sơ đồ các cấu
trúc đơn giản ấy, sự hiểu biết của bạn về cách lập sơ đồ tuần tự sẽ tự nhiên được
cải thiện.
Mục lục
Hai kiểu sơ đồ tuần tự
Logic điều kiện trong việc lập sơ đồ tuần tự
Vẽ sơ đồ một vòng lặp for
Vẽ sơ đồ một vòng lặp while
Kết luận