Biểu đồ trạng thái được sử dụng để chỉ ra cách các đối tượng phản ứng lại đối với các sự kiện và cách biến đổi các trạng thái theo các sự kiện đó.
Ví dụ, hãy mô tả hoạt động của hệ thống thang máy. Thường thang máy bắt đầu hoạt
động từ tầng một (OnFirstFloor). Khi đang ở OnFirstFloor và có người ở tầng trên (floorNum) nhấn nút yêu cầu thang máy (goUp(floorNum)) thì nó chuyển sang trạng thái
chuyển lên (MovingUp). Khi chuyển đến tầng yêu cầu (arrived) thì nó chuyển sang trạng thái dừng, nghỉ (Idle) để mở cửa cho người vào /ra khỏi thang máy. Đang ở trạng thái nghỉ
Idle, nếu có ai ở tầng trên yêu cầu thì nó lại chuyển về MovingUp, nếu có người ở tầng dưới yêu cầu thì thang máy chuyển xuống (MovingDown), còn khi hết giờ (time-out) nó sang trạng thái chuyển về tầng một (MovingtoFirstFloor) rồi về tầng một. Biểu đồ trạng thái mô tả hoạt động của thang máy được vẽ như hình 5-10.
Hình 5-10 Biểu đồ trạng thái của lớp ThangMay Chúng ta hãy xây dựng biểu đồ trạng thái cho lớp HoaDon.
Hình 5-11 Biểu đồ các trạng thái của lớp HoaDon
Khi một hoá đơn (đối tượng của lớp HoaDon) được tạo lập thì nó ở trạng thái
chưa thanh toán, sau đó khi có sự kiện khách hàng thanh toán, nghĩa là khách trả tiền cho các mặt hành đã chọn mua thì nó chuyển sang trạng thái đã thanh toán.
Chưa thanh toán Đã thanh toán
Thanh toán Một hoá đơn
được tạo lập
goDown(floor) Moving to First Floor
goUp(floorNum) Idle Moving Up do / moving to floor Moving Up do / moving to floor arrived arrived time-out arrived On First Floor goUp (floorNum)
Nhập các mặt hàng khách đã chọn
Nhưđã đề cập ở trên, các ca sử dụng là rất quan trọng, nó thể hiện những nhiệm vụ mà hệ thống phải thực hiện. Vì vậy, thường chúng phải xây dựng các biểu đồ trạng thái để mô tả cho các lớp trong những ca sử dụng quan trọng nhất của hệ thống.
Biểu đồ trạng thái của hệ HBH được xây dựng như sau:
Hình 5-12 Biểu đồ trạng thái của lớp HBH
Trạng thái của một đối tượng cũng có khi là trạng thái phức hợp, nghĩa là nó có thể chứa các trạng thái con được lồng bên trong. Một số trạng thái, ví dụ trạng thái
Kiểm duyệt thẻ trong biểu đồ trên có thể tiếp tục được làm mịn hơn ở pha sau.
Chúng ta xét tiếp Telephone trong ca sử dụng “Gọi điện thoại” đã được mô tả
bằng biểu đồ vết các sự kiện ở trên. Telephone có hai trạng thái chính: Idle (rỗi) và Active (hoạt động). Trạng thái Active lại có thể phân tách tiếp thành PlayingDialTone (âm hiệu ĐT mời gọi), Dialing (quay số), Connecting (kết nối hai đầu dây) và Talking
(đàm thoại). Biểu đồ trạng thái cho các hoạt động trên được mô tả như sau.
Hình 5-13 Biểu đồ trạng thái của Telephone Xử lý kết quả Kết thúc nhập Khách đưa hàng đến quầy trả tiền Nhập tiếp Nhập vào các mặt hàng Thanh toán tiền mặt Thanh toán thẻ tín dụng Thanh toán bằng séc Chờđể mua hàng Kiểm duyệt thẻ/séc Chờ thanh toán Kết thúc bán hàng off hook on hook PlayingDialTone Dialing Talking Connecting completed digit digit connected Idle Active
Máy điện thoại ở trạng thái Idle, khi người gọi nhấc tai nghe lên (off hook) thì nó chuyển sang trạng thái hoạt động (Active) sẵn sàng phục vụ đàm thoại giữa hai điểm trong mạng điện thoại. Trạng thái Active lại được mô tả dưới dạng một biểu đồ trạng thái con. Bắt đầu là trạng thái Có âm hiệu điện thoại mời gọi (PlayingDialTone), khi người gọi quay số (digit) nó chuyển sang trạng thái Quay số (Dialing). Khi quay xong
(completed), nó chuyển tiếp sang trạng thái Kết nối (Connecting) và khi đường dây
được kết nối (connected) thì hai người có thể nói chuyện được với nhau (Talking). Trạng thái Talking lại có thể mô tả chi tiết hơn bằng một biểu đồ trạng thái con nếu cần thiết.
Lưu ý:
Biểu đồ trạng thái chỉ cần xây dựng cho những đối tượng có nhiều hoạt động quan trọng trong hệ thống,
Dựa vào các ca sử dụng để xây dựng biểu đồ trạng thái,
Dựa vào các thuộc tính liên quan đểđịnh nghĩa các trạng thái.
Tóm lại, biểu đồ trạng thái là cần thiết vì nó giúp người phân tích, thiết kế và người lập trình hiểu, nắm bắt được các hành vi ứng xử của các đối tượng tham gia vào các ca sử dụng. Họ không chỉ cài đặt đối tượng mà còn cần phải làm cho chúng thực hiện những công việc mà hệ thống yêu cầu. Tuy nhiên, biểu đồ trạng thái không được sử dụng để sinh mã tựđộng trong khâu lập trình ở bước sau.
Biểu thức trạng thái trong phân tích hướng đối tượng cũng tương tự như sơ đồ khối trong phân tích có cấu trúc, nó mô tả các bước cần thực hiện (thuật toán) của hệ thống.