Phân tích & Thiết kế

Thực hành lập bảng trạng thái cho mượn sách

Biến mô tả nghiệp vụ thành bảng chuyển tiếp và ca thử từ chối.

Thực hànhThực hành4 phút đọcPython

Thích và đánh giá Bình luận và hỏi đáp
Từ chối thao tác Trả khi sách đang Sẵn sàng; không tự đổi trạng thái.
Từ chối thao tác Trả khi sách đang Sẵn sàng; không tự đổi trạng thái. Mở hình lớn ↗

1. Đề bài

Một cuốn sách có thể Sẵn sàng, Đã mượn hoặc Đang kiểm tra. Thao tác Mượn chuyển từ Sẵn sàng sang Đã mượn. Trả sách chuyển sang Đang kiểm tra. Xác nhận sách tốt đưa sách về Sẵn sàng.

2. Lập bảng chuyển tiếp

Mỗi hàng lưu trạng thái nguồn, sự kiện và trạng thái đích. Chọn hành vi từ chối cho các cặp không có trong bảng. Trường hợp Trả sách khi đang Sẵn sàng phải bị từ chối và không làm đổi trạng thái.

3. Đối chiếu lời giải

Mẫu Python đi hết một vòng mượn, trả, xác nhận. Nó cũng thử trả sách lần nữa sau khi sách đã sẵn sàng. Dùng bảng để vẽ sơ đồ trạng thái UML, gắn tên sự kiện vào đúng mũi tên.

Chạy ví dụ bằng python hoc_uml_trang_thai_muon_sach.py.

Môi trường thực hành. Python 3.10 trở lên. Ví dụ dùng thư viện chuẩn Python.

Python · hoc_uml_trang_thai_muon_sach.pyTải mã nguồn
bang = {
    ("sẵn sàng", "mượn"): "đã mượn",
    ("đã mượn", "trả"): "kiểm tra",
    ("kiểm tra", "xác nhận"): "sẵn sàng",
}

def thuc_hien(hien_tai, thao_tac):
    tiep = bang.get((hien_tai, thao_tac))
    return (tiep, True) if tiep else (hien_tai, False)

hien_tai = "sẵn sàng"
for thao_tac in ("mượn", "trả", "xác nhận"):
    hien_tai, hop_le = thuc_hien(hien_tai, thao_tac)
    assert hop_le
assert hien_tai == "sẵn sàng"
assert thuc_hien(hien_tai, "trả") == ("sẵn sàng", False)
print("Hoàn thành vòng mượn và từ chối trả sai trạng thái.")

4. Bài tập mở rộng

Thêm sự kiện phát hiện sách hỏng và trạng thái Cần sửa. Mô tả cách kết thúc sửa và ghi rõ khi nào được cho mượn lại. Viết chuỗi từ mượn đến khi sách trở về Sẵn sàng qua nhánh sửa.