II. Đánh giá giữa phân tích thiết kế theo hớng chức năng và hớng đố
5.3 Sơ đồ trạng thái
Các sơ đồ trạng thái nắm giữ chu kì sống của đối tợng, các hệ thống và các hệ thống con. Chúng nói lên các trạng thái mà một đối tợng có thể có, các sự kiện (các Message nhận đợc, thời gian đánh giá, các lỗi và điều kiện đúng) ảnh hởng tới trạng thái đó trong nhiều thời gian. Sơ đồ trạng thái sẽ đợc gắn tới tất cả các lớp một cách rõ ràng để xác định các trạng thái và ngữ cảnh phức tạp, ngữ cảnh chi tiết, sơ đồ trạng thái và sự phụ thuộc các trạng thái hiện thời. Nó cũng chứng minh với các sự kiện có thể thay đổi trạng thái của đối tợng trong lớp.
5.3.1. Các trạng thái và sự chuyển đổi trạng thái :
Tất cả các đối tợng có một trạng thái, trạng thái là kết quả của hoạt động đợc thực hiện bởi đối tợng trớc, nó đợc xác định bởi những giá trị của thuộc tính và các liên kết tới đối tợng khác. Một lớp có thể có thuộc tính chỉ định trạng thái đó, trạng thái có thể đợc xác định bởi các giá trị của các thuộc tính ‘Normal’. Ví dụ các trạng thái của đối tợng là:
• Hoá đơn (đối tợng) đã đợc trả (trạng thái)
• Ôtô (đối tợng) vẫn còn đang đậu (trạng thái)
• Chiếc máy (đối tợng) đang chạy (trạng thái)
• Huy (đối tợng) cha có gia đình (trạng thái)
Một đối tợng thay đổi trạng thái khi có hành động xảy ra, đó gọi là sự kiện. Ví dụ: một ngời trả một hoá đơn, bắt đầu lái xe..., đó là hai chiều của chuyển động. Sự tơng tác và thay đổi trạng thái bên trong, sự tơng tác mô tả ngữ cảnh bên ngoài của đối tợng và cách nó tơng tác với đối tợng khác (bằng cách gửi Message, lập hay huỷ bỏ liên kết tới mỗi đối tợng), thay đổi trạng thái bên trong khi mô tả cách trạng thái chuyển đổi. Ví dụ: các giá trị, các thuộc tính bên trong của nó. Sơ đồ trạng thái thờng chỉ ra cách
nó. Thể hiện là một hoá đơn thay đổi trạng thái từ cha trả tiền đến đã trả tiền (khi đợc ai đó trả tiền), khi có một hoá đơn đợc tạo ra trong trạng thái cha trả tiền.
Sơ đồ trạng thái có thể có một điểm bắt đầu và vài điểm kết thúc. Một điểm bắt đầu (trạng thái khởi tạo) đợc chỉ ra nh một dấu tròn đen ( ). Điểm kết thúc (trạng thái cuối) đợc chỉ ra nh một hình tròn bao quanh một chấm đen ( ). Một trạng thái đợc chỉ ra trong sơ đồ trạng thái là một hình chữ nhật với bốn đầu cạnh tròn. Giữa các trạng thái là sự chuyển tiếp trạng thái đợc chỉ ra nh một đờng thẳng có mũi tên từ một trạng thái tới một trạng thái khác. sự chuyển tiếp có thể đợc gán nhãn với sự kiện gây ra sự chuyển tiếp trạng thái. khi một kiện xảy ra, sự chuyển tiếp từ trạng thái này tới trạng thái khác đợc thực hiện.
Thành phần đầu tiên là tên của trạng thái, ví dụ: trả tiền, thành phần thứ hai là thành phần tuỳ chọn biến trạng thái, ở đó các thuộc tính có thể đợc liệt kê và đợc gán. Các thuộc tính đó là lớp đợc hiển thị bởi sơ đồ trạng thái, thỉnh thoảng các biến trung gian có ích trong các trạng thái, ví dụ nh bộ đếm. Thành phần thứ ba là thành phần tuỳ chọn cho sự hoạt động, ở đó các sự kiện hoặc các hành động có thể đợc liệt kê. Ba sự kiện chuẩn có thể đợc dùng trong thành phần hoạt động là: đầu vào (entry), thoát (exit), thực hiện (Do). Sự kiện đầu vào thờng chỉ định hành động trên đầu vào của trạng thái, ví dụ gán một thuộc tính hoặc gửi một message. Sự kiện thoát thờng đợc chỉ định các hành động thoát từ một trạng thái. Sự kiện thực hiện (Do) có thể thờng chỉ định một hành động đợc thực hiện trong khi đang ở trong trạng thái, ví dụ gửi một message, đang đợi, đang tính toán. Có vài sự kiện chuẩn có thể không sử dụng cho các mục đích khác. Dạng cú pháp cho phần hoạt động là :
Tên_sự_kiện danh_sách_tham_số “/” biểu_thức_hành_động.
Chưa trả Đang trả Đã trả Hoá đơn Đã huỷ
Hoá đơn đã tạo
Tên
Các biến trạng thái Sự kích hoạt
Trong đó tên_sự_kiện có thể là sự kiện, gồm có các sự kiện chuẩn nh entry, exit, do. Biểu_thức_hành_động là hành động sẽ đợc thực hiện, ví dụ tăng giá trị thuộc tính nó cũng có thể chỉ định tham số tới sự kiện ( Entry, Exit, Do) không có tham số nào.
Hình 5.1: Trạng thái gọi Login, ở đó login time = thời gian hiện thời, số các hành động thực hiện trên Entry, Exit, Do trong trạng thái, Help/Display help sự kiện đợc ngời sử dụng định nghĩa và đặt trong phần hoạt động.
Thờng thì sự chuyển đổi trạng thái có một sự kiện đợc gán tới nó, nhng điều đó là không cần thiết. Nếu một sự kiện đợc gán tới một sự chuyển đổi trạng thái, sự chuyển đổi trạng thái sẽ đợc thực hiện khi một sự kiện xảy ra. Hành động Do trong trạng thái có thể là một quá trình đang xảy ra, ví dụ: đợi, thực hiện việc điều khiển .v.v.. Đợc thực hiện trong khi đối tợng đã có trạng thái. Một hành động Do có thể bị ngắt bởi sự kiện bên ngoài, nghĩa là sự kiện đó trong sự chuyển đổi trạng thái có thể bị ngắt khi hành động Do đang thực hiện bên trong.
Nếu sự chuyển đổi trạng thái không có sự kiện đợc chỉ định thì trạng thái đợc gắn sẽ thay đổi khi các hành động bên trong trạng thái nguồn đợc thực hiện. Nh vậy tất cả các hành động bên trong trạng thái đợc thực hiện. Một sự chuyển đổi bỏ qua sự kiện sẽ tự động chuyển.
Dạng cú pháp cho chỉ định sự chuyển đổi trạng thái:
Ký_hiệu_sự_kiện “[“ điều_kiện_chặn “]’ “/” biểu_thức_hành_động ‘^’ Mệnh_đề_Send.
ở đó cú pháp ký_hiệu_sự_kiện đợc định nghĩa là:
Tên_sự_kiện “(“ tham_số “)” .
Cú pháp mệnh_đề_Send là:
Login
Login time=Current time
Entry/Type ‘login‘
Exit/Login(User name,password) Do/Get User name
Do/Get password Help/Display help
go up (floor) Onfirstfloor idle Moving to first floor Moving up Do/Moving to floor arrived arrived arrived Go up(floor) Go down(floor) Time - out Moving Down Do/Moving to floor
Biểu_thức_đích “.” Tên_sự_kiện_đích ‘(‘ tham_số,…’)’
ở đóbiểu_thức_đích là một biểu thức đánh giá một đối tợng hoặc tập đối tợng.
5.3.2. Ký hiệu sự kiện
Hình 5.2: Tình huống của sự chuyển đổi giữa On first floor và trạng thái Moving up có một tham số, floor nh là sự chuyển đổi giữa Idle và Movingup, giữa Idle và
Moving down.
Hình 5.2 chỉ ra ký hiệu sự kiện xem xét một tên sự kiện và các tham số, chỉ định sự kiện để chuyển đổi trạng thái có thêm dữ liệu để kết nối với sự kiện. Các tham số phân tách nhau bởi dấu phẩy. Các tham số có cú pháp nh sau:
Tên_tham_số ‘:’ kiểu_biểu_thức, tên_tham_số ‘:’ kiểu_biểu_thức,.v..v..
ở đó tên_tham_số là tên của tham số, biểu_thức là kiểu của tham số, ví dụ kiểu
integer, Boolean.v..v..
Kiểu_biểu_thức có thể bị che dấu, điều đó không đợc chỉ ra ở đây ví dụ của sự chuyển đổi trạng thái với Ký_hiệu_sự_kiện là :
draw( f: figure, c:color ) redraw( )
redraw
print( invoice )
5.3.3. Điều kiện chặn
Điều kiện chặn là biểu thức Boolean đợc đặt trên sự chuyển đổi trạng thái. Nếu điều kiện chặn đợc tổ hợp với một sự kiện thì sự kiện xảy ra và điều kiện chặn phải là đúng. Nếu chỉ một điều kiện chặn đợc gán tới sự chuyển đổi trạng thái thì sự chuyển đổi sẽ xảy ra khi điều kiện trở nên đúng.
ví dụ : [t=15 phút] [số hoá đơn > n]
Hoá đơn thu hồi (tổng số) [balance>=tổng số]
5.3.4. Biểu thức hoạt động
Biểu thức hoạt động là một biểu thức thủ tục đợc thực hiện khi sự chuyển đổi trạng thái xảy ra, không đợc phép lồng các biểu thức hoạt động hoặc là đệ quy chúng. Chúng phải đợc phân tách bởi dấu ‘/’.
ví dụ : increase( ) /n:=n+1/m:=m+1
add(n) /sum:=sum+n/flash
5.3.5. Mệnh đề Send
Mệnh đề Send là trờng hợp đặc biệt của hành động. Nó có cú pháp mở rộng để gửi một Message trong lúc chuyển đổi giữa 2 trạng thái, cú pháp gồm biểu thức đích và tên sự kiện. Biểu thức đích sẽ là một đối tợng hoặc tập đối tợng đợc đánh giá. Tên sự kiện là tên của một sự kiện có đầy đủ ý nghĩa cho đối tợng đích (hoặc tập đối tợng đích). Đối tợng cũng có thể là bản thân nó.
[ timer = time_out] / go down (first floor)
Có thể đợc chuyển thành mệnh đề Send là:
[ timer = time_out] ^ self.go down (first floor)
Các sơ đồ trạng thái có thể dễ dàng hiểu đợc và truyền thông, nhng thỉnh thoảng nó khó biểu diễn bên trong các mô hình phức tạp (là các trạng thái của đối tợng và tất cả sự chuyển đổi trạng thái) tại thời điểm tạo ra mô hình để dễ dàng truyền thông. Trong mỗi công việc, bộ mô hình hoá phải quyết định có hay không tất cả các mô hình động bên trong nh chúng xuất hiện ở dạng chi tiết hoặc đơn giản để tạo nên việc hiểu nó dẽ dàng hơn.
Một sự kiện thỉnh thoảng xảy ra và nó có thể gây ra vài hành động, ví dụ nh khi bạn ấn nút Play trên máy CD nó bắt đầu chạy (khi đó máy CD đợc bật, CD đợc nạp và chạy theo thứ tự). Sự kiện là bạn ấn nút Play và hành động là nó bắt đầu chạy. Khi đó là những liên kết giữa các sự kiện và hành động đợc định nghĩa trớc, nó đợc gọi là tính nhân quả. Trong công nghệ phần mềm, thờng thì các mô hình của chúng ta là các hệ thống nhân quả, trong đó các hành động và các sự kiện đợc kết nối với nhau.
UML có 4 loại sự kiện là:
•Một điều kiện trở nên đúng: chỉ ra điều kiện chặn trên sự chuyển đổi trạng thái.
•Nhận đợc một tín hiệu bên ngoài từ đối tợng khác: Tín hiệu là bản thân một đối tợng, nó chỉ ra ký hiệu sự kiện trên các chuyển đổi trạng thái. Kiểu của một sự kiện đó đợc gọi là một Message.
•Nhận đợc một lời gọi phơng thức bởi một đối tợng khác (hoặc bởi bản thân nó). Nó chỉ ra ký hiệu sự kiện trên các chuyển đổi trạng thái. Kiểu của sự kiện đó cũng đợc gọi là một Message.
•Sự trôi qua thời gian một chu kỳ: thờng thì thời gian đợc thiết kế sau mỗi sự kiện là một chu kỳ hoặc qua đi tổng số thời gian đă cho. Nó chỉ ra một biểu thức thời gian trên sự chuyển đổi trạng thái.
Chú ý rằng các lỗi cũng là các sự kiện có thể có ích cho mô hình. UML không cho hỗ trợ các sự kiện lỗi bên ngoài nhng nó có thể đợc mô hình hoá nh một lớp có sẵn.
ví dụ : <<error>> out_of_memory