Tải bản đầy đủ (.pdf) (9 trang)

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ự pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (216.68 KB, 9 trang )

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ư


thấy trong Hình 1. Ý tưởng ở đây là đối tượng đằng sau tương tác là ẩn danh và
bất kỳ đối tượng nào của lớp đó có thể tham gia vào tương tác. Do đó, tất cả các
tuyến đường phải được mô hình hoá tường minh. Trong một sơ đồ tuần tự chung,
đối tượng A phải gửi một trong các thông điệp trong mô hình cho đối tượng B.

Hình 1. Một sơ đồ tuần tự chung

Dạng thứ hai sơ đồ tuần tự là dạng cá thể. Một sơ đồ tuần tự cá thể mô tả một sự
trao đổi thông điệp đơn lẻ khả dĩ giữa hai cá thể. Một sơ đồ như vậy sẽ chứa một
tên biến và kiểu lớp của nó trong hộp dọc theo trục ngang, như Hình 2. Dạng này
không bao gồm các vòng lặp, các điều kiện, hoặc rẽ nhánh có trong dạng chung.
Trong luồng điều khiển thực tế trong hệ thống, một số xác nhận nhất định thực
hiện trong quá trình tương tác có thể có kết quả sai. Nếu một xác nhận là sai, bất
kỳ thông điệp nào trong sơ đồ tuần tự cá thể đều vô giá trị và kịch bản sẽ không
xảy ra. Sơ đồ tuần tự cá thể mô tả một kịch bản đơn lẻ mà có thể xảy ra hoặc
không.

Hình 2. Một sơ đồ tuần tự cá thể

Các sơ đồ tuần tự cá thể là tốt nhất để lập mô hình các kịch bản riêng lẻ trong các
giai đoạn phân tích của vòng đời phát triển phần mềm. Một sơ đồ tuần tự chung có
thể mô hình hoá toàn bộ ca sử dụng bao gồm nhiều kịch bản. Các kiểu hành động
khác chẳng hạn như mô hình hóa giao thức được sử dụng giữa các hệ thống con
hoặc khung công tác với các quần thể của chúng có thể sử dụng một trong hai
dạng, tùy thuộc vào các thành phần nằm ở đâu trong vòng đời phát triển phần
mềm. Dạng chung thì gần với mã lệnh thực tế sẽ được sinh ra trong sản phẩm cuối
hơn dạng cá thể.
Đừng bỏ lỡ phần còn lại của loạt bài "Một cuốn sách bài tập về UML"
Phần 1: "Giới thiệu về các sơ đồ tuần tự" (05.2001)


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

(deposit.compareTo(new BigDecimal(0.0)) > 0) {
account.credit(deposit);
}
else {
throw new ImproperDepositException();
}
}

Trong giai đoạn phân tích bạn không phải quá quan tâm đến các chi tiết này, nên
sơ đồ của bạn chỉ cần thể hiện rằng khoản tiền gửi vào là dương. Trong một sơ đồ
tuần tự chung, một điều kiện xuất hiện như là một sự bảo vệ với tên thông điệp ở
phía trên mũi tên gọi nằm ngang (horizontal call arrow). Các điều kiện bảo vệ
được bao bọc trong cặp dấu ngoặc vuông phía bên trái tên thông báo, như Hình 3.

Hình 3. Một điều kiện được thêm vào trong khi phân tích

Mối quan hệ giữa phương thức ở trên và sơ đồ tuần tự trở nên còn rõ ràng hơn
trong Hình 4, ở đây chúng ta thấy một sơ đồ rõ ràng hơn, sao cho bạn có thể sử
dụng trong giai đoạn thiết kế. Chắc chắn là toàn bộ phương thức này không được
minh họa: mệnh đề else bị thiếu. Tuy nhiên, ngữ nghĩa của các mũi tên thông điệp
trong sơ đồ bắt buộc rằng thông điệp đó có thể được gửi chỉ khi nào điều kiện này
là có hiệu lực.

Hình 4. Một điều kiện rõ ràng hơn

Mệnh đề else sẽ được mô hình hoá bằng cách thêm một mũi tên gọi nữa vào giữa
lớp Teller (Thu ngân) và ImproperDepositException. Đối với cuộc gọi này sẽ có
một điều kiện, trái ngược với điều kiện của if; trong trường hợp này, đó là khoản
gửi vào phải ít hơn hoặc bằng 0. Có lẽ bạn muốn tự mình thử mô hình hoá việc
này chăng?



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.


Listing 3. A while loop
while ( value.notFound() ) {
value = database.search( key );
}

Sơ đồ của chúng ta cho vòng lặp while chứa cả một điều kiện lẫn một dấu hoa thị,
chỉ báo phép lặp, nhưng như bạn có thể thấy, chưa có số lần lặp. Một vòng lặp
while sẽ hiếm khi gồm cả số lần lặp nếu nó không phải là một vòng lặp for được
cải trang. Sơ đồ cho vòng lặp while lthể hiện trong Hình 6.

Hình 6. Một sơ đồ tuần tự cho vòng lặp while



Kết luận
Hành vi phải làm (must) và có thể làm (may) là một khái niệm cơ sở của UML và
của sự phát triển phần mềm nói chung. Các ca sử dụng nắm bắt hành vi phải làm;
các kịch bản nắm bắt hành vi có thể làm. Các sơ đồ lớp nắm bắt hành vi phải làm;
các sơ đồ cá thể nắm bắt hành vi có thể làm. Tôi đã tập trung vào khái niệm này vì
tôi thấy rằng nhiều người không hiểu thấu được tính linh hoạt tối đa của các sơ đồ
tuần tự, và bị xung đột trong nhận thức của họ và cách sử dụng từng dạng.
Khi đọc các bài này, bạn nên tập trung vào việc phát triển một sự hiểu biết trực
giác về ngữ nghĩa của mô hình. Khi bạn quan sát nhiều sơ đồ tuần tự hơn và bắt
đầu tạo ra sơ đồ của chính bạn, bạn sẽ nhận thấy rằng nhiều sơ đồ tuần tự dựa vào
sự tồn tại của logic điều kiện và bối cảnh sơ đồ để báo hiệu sơ đồ đó trình bày cái
nhìn hệ thống dưới góc độ phải làm hay có thể làm. Việc tìm hiểu để nhận ra và áp
dụng các phân biệt này từ sớm sẽ giúp đỡ bạn sau này khi chúng ta bước vào các
kỹ thuật lập sơ đồ ngày càng phức tạp hơn.
Ngoài khám phá ý nghĩa của hành vi phải làm và có thể làm trong việc lập sơ đồ

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

×