142 CÁC MÔ HÌNH CƠ BẢN TRONG PHÂN TÍCH VÀ THIẾT KẾ HƯỚNG ĐỐI TƯỢNG 6 CÁC MÔ HÌNH THIẾT KẾ TƯƠNG TÁC 6. SƠ ĐỒ HOẠT ĐỘNG Sơ đồ hoạt động (Activity Diagram) trong UML gần giống với lưu đồ (Flow Chart) mà chúng ta đã quen sử dụng trong phân tích thiết kế có cấu trúc. Nó chỉ ra các bước thực hiện, các hoạt động, các nút quyết định và điều kiện rẽ nhánh để điều khiển luồng thực hiện của hệ thống. Sơ đồ hoạt động mô tả các hoạt động và các kết quả của những hoạt động đó và: ♦ Nhấn mạnh hơn về công việc thực hiện khi cài đặt một thao tác của từng đối tượng, ♦ Tương tự như sơ đồ trạng thái, nhưng khác chủ yếu ở chỗ nó tập trung mô tả về các hoạt động (công việc và những thao tác cần thực thi) cùng những kết quả thu được từ việc thay đổi trạng thái của các đối tượng.
♦ Trạng thái trong sơ đồ hoạt động là các trạng thái hoạt động, nó sẽ được chuyển sang trạng thái sau, nếu hoạt động ở trạng thái trước được hoàn thành. CHƯƠNG 6: CÁC MÔ HÌNH THIẾT KẾ TƯƠNG TÁC 143 6. Trạng thái và sự chuyển trạng thái Trạng thái và sự chuyển đổi trạng thái được ký hiệu và cách sử dụng hoàn toàn giống như trong sơ đồ trạng thái. Nút quyết định và rẽ nhánh Một đối tượng khi hoạt động thì từ một trạng thái có thể rẽ nhánh sang những trạng thái khác nhau tùy thuộc vào những điều kiện, những sự kiện xảy ra để quyết định.
Điều kiện rẽ nhánh thường là các biểu thức Boolean. Trong UML, nút quyết định rẽ nhánh được biểu diễn bằng hình thoi có các đường rẽ nhánh với những điều kiện đi kèm để lựa chọn như hình 6. Nút rẽ nhánh trong sơ đồ hoạt động 6. Thanh tương tranh hay thanh đồng bộ Trong hoạt động của hệ thống, có thể có nhiều luồng hoạt động được bắt đầu thực hiện hay kết thúc đồng thời.
Trong UML, thanh đồng bộ được vẽ bằng đoạn thẳng đậm được sử dụng để kết hợp nhiều luồng hoạt động đồng thời và để chia nhánh cho những luồng có khả năng thực hiện song song. Ví dụ: Vẽ sơ đồ hoạt động mô tả các hoạt động “Đun nước và pha một tách chè Lipton”. Chúng ta thấy một số hoạt động có thể thực hiện song hành như “Đun nước”, “Tìm một gói chè Lipton”, “Tìm tách”,. Sơ đồ hoạt động cho các hoạt động trên có thể mô tả như hình 6.
144 CÁC MÔ HÌNH CƠ BẢN TRONG PHÂN TÍCH VÀ THIẾT KẾ HƯỚNG ĐỐI TƯỢNG Đổ nước vào Tìm một gói Tìm tách ấm đun nước chè Lipton Đun nước sôi Bỏ gói chè vào tách Đổ nước sôi vào tách có chè Pha thêm sữa Ghi chú: Hình này biểu diễn một hoạt động Hình 6. Sơ đồ hoạt động “Đun nước và pha chè” 6. Tuyến công việc Tuyến công việc (đường bơi) được sử dụng để phân hoạch các hoạt động (trạng thái) theo các nhóm đối tượng hay theo tuyến hoạt động của từng đối tượng. Giống như trong một cuộc thi bơi, trong bể bơi mỗi vận động viên bơi lội chỉ được bơi theo một tuyến đã được xác định.
Trong hệ thống phần mềm cũng vậy, mỗi đối tượng hoạt động theo tuyến đã được xác định, nhưng có khác là giữa các tuyến này có sự chuyển đổi thông tin với nhau. Ví dụ: Xét các hoạt động xảy ra khi khách mua hàng chọn phương thức thanh toán bằng thẻ tín dụng (Credit). Người bán hàng CHƯƠNG 6: CÁC MÔ HÌNH THIẾT KẾ TƯƠNG TÁC 145 nhận thẻ từ khách hàng, chuyển thẻ cho bộ phận kiểm duyệt. Nếu là thẻ hợp lệ thì trừ vào thẻ số tiền mua hàng của khách phải trả và giao lại thẻ cho khách.
Các hoạt động trên được mô tả trong sơ đồ hoạt động như ở hình 6. Sơ đồ hoạt động sử dụng để thể hiện những hoạt động sẽ thực hiện của mỗi đối tượng và chỉ ra cách thực hiện các hoạt động nghiệp vụ thông qua các dòng công việc, theo tổ chức của các đối tượng. :KháchHàng :NgườiBánHàng :BộPhậnKiểmDuyệtThẻ :HệThống Trình thẻ Nhận thẻ tín dụng tín dụng Kiểm duyệt Hợp lệ Nhận lại Trừ thẻ Không hợp lệ thẻ tín dụng tín dụng Ghi chú: Hình này biểu diễn một hoạt động Hình 6. Các tuyến công việc trong sơ đồ hoạt động 6.
SƠ ĐỒ CỘNG TÁC Sơ đồ cộng tác (collaboration diagram) gần giống như sơ đồ trình tự, mô tả sự tương tác của các đối tượng với nhau, nhưng khác với sơ đồ trình tự là ở đây tập trung vào ngữ cảnh và không gian thực hiện công việc. Sơ đồ trình tự có trật tự theo thời gian, còn sơ đồ cộng tác tập trung nhiều vào quan hệ giữa các đối tượng, tập trung vào các tổ chức cấu trúc của các đối tượng gửi hay nhận thông điệp. Sơ đồ trình tự tập trung vào điều khiển, còn sơ đồ cộng tác lại tập trung vào luồng dữ liệu (data flows). Sơ đồ trình tự và cộng tác chỉ phù hợp với 146 CÁC MÔ HÌNH CƠ BẢN TRONG PHÂN TÍCH VÀ THIẾT KẾ HƯỚNG ĐỐI TƯỢNG việc mô tả từng biến thể của thủ tục, không phù hợp với việc xác định đầy đủ các hành vi trên một sơ đồ.
Cả hai sơ đồ trình tự và cộng tác đều liên quan đến các đối tượng cài đặt chức năng thực hiện trong ca sử dụng. Chúng được xây dựng cho đối tượng, lớp, hay cả hai. Sơ đồ cộng tác chính là một đồ thị chỉ ra một số các đối tượng và những sự liên kết giữa chúng, trong đó các đỉnh là các đối tượng còn cạnh thể hiện sự trao đổi thông điệp giữa các đối tượng. Ví dụ: Xét vấn đề thanh toán trong hệ thống bán hàng.
Giả sử khách hàng trả tiền mua hàng bằng tiền mặt. Người bán phải ghi lại số tiền mà khách đưa và qua đó hệ thống bán hàng nhận được thông điệp makePayment(soTien). soTien là số tiền khách đưa, thường là lớn hơn số tiền hàng và hệ thống phải tính số dư để trả lại cho khách. Để thực hiện được yêu cầu thanh toán thì lớp HệBánHàng lại gửi một thông điệp tương tự cho lớp PhiênBánHàng và kết quả là tạo ra một đối tượng của lớp ThanhToan theo thông điệp create(soTien) để thực hiện thanh toán với khách hàng.6 mô tả sơ đồ trình tự trao đổi các thông điệp trên lần lượt theo thời gian.
Sau đây chúng ta sử dụng sơ đồ cộng tác để thể hiện cùng mối tương tác đó nhưng theo ngữ cảnh thực hiện công việc. Một phần Sơ đồ cộng tác để thực hiện thanh toán tiền mặt CHƯƠNG 6: CÁC MÔ HÌNH THIẾT KẾ TƯƠNG TÁC 147 Sơ đồ trên được đọc như sau: ♦ Thông điệp đầu makePayment(soTien) (chính là lời gọi hàm) được gửi tới một đối tượng của hệ thống :HeBanHang. ♦ Đối tượng :HeBanHang gửi tiếp thông điệp tới một đối tượng của PhienBanHang là :PhienBanHang. Hàm này được đánh số là 1.
♦ :PhienBanHang gọi toán tử tạo lập của lớp ThanhToan để tạo ra một đối tượng :ThanhToan theo thông điệp created(soTien) để làm nhiệm vụ thu tiền. Thông điệp này được đánh số là 1. Qua các phân tích trên, chúng ta có thể khẳng định: sơ đồ cộng tác của một hoạt động thể hiện thuật toán để thực thi hoạt động đó. Từ sơ đồ trình tự và sơ đồ cộng tác, người thiết kế và người phát triển có thể xác định các lớp sẽ xây dựng, quan hệ giữa các lớp, thao tác và trách nhiệm của mỗi lớp.
Hai loại sơ đồ này trở thành nền tảng cho các công việc còn lại khi thiết kế. Sơ đồ trình tự có ích cho việc quan sát luồng logic kịch bản, còn sơ đồ cộng tác có ích cho việc quan sát giao tiếp giữa các đối tượng. Các cấu phần trong sơ đồ cộng tác 1. Danh sách các thành phần trong sơ đồ Tổng quát, sơ đồ cộng tác chứa các thành phần sau: - Đối tượng - Liên kết: thể hiện của kết hợp - Thông điệp: giúp lớp hay đối tượng có thể yêu cầu lớp hay đối tượng khác thực hiện chức năng cụ thể.
Ví dụ: form có thể yêu cầu đối tượng report tự in. - Chú thích (notes) và các ràng buộc như các sơ đồ khác. 148 CÁC MÔ HÌNH CƠ BẢN TRONG PHÂN TÍCH VÀ THIẾT KẾ HƯỚNG ĐỐI TƯỢNG 2. Các ký hiệu, cách biểu diễn các thông điệp và một số quy ước trong sơ đồ cộng tác a.
Thể hiện giá trị trả lại (return value) Một số thông điệp được gửi đến cho một đối tượng và yêu cầu có giá trị trả lại cho đối tượng gửi. Giá trị này có thể chỉ ra thông qua phép gán cho một tên biến và tên của thông điệp đó. Trong lập trình, thực chất đây là lời gọi hàm có kiểu giá trị trả lại (trong C, đó là những hàm có kiểu trả lại khác void). Cú pháp chung của thông điệp này có dạng: ReturnVariableName:= message(parameter:ParameterType): ReturnType Ví dụ: Kiểu giá trị trả lại msg() 1: tong := total() : int :HeBan :PhienBanHang Hang Biến giá trị trả lại Hình 6.
Thông điệp có giá trị trả lại b. Thể hiện những thông điệp lặp Một đối tượng có thể gửi một thông điệp lặp lại một số lần cho đối tượng khác. Thông điệp được gửi lặp lại nhiều lần có thể biểu diễn bằng dấu ‘*’ trước thông điệp. CHƯƠNG 6: CÁC MÔ HÌNH THIẾT KẾ TƯƠNG TÁC 149 Ví dụ: msg() 1: *dong := dongBanTiep() :HeBan :PhienBanHang Hang Ký hiệu lặp lại Hình 6.
Thông điệp lặp lại với số lần không xác định msg() 1: *[i := 1.10] dong[i] := dongBanTiep() :HeBan phienBH Hang :PhienBanHang Lặp lại 10 lần Hình 6. Thông điệp lặp lại với số lần xác định Có một số cách khác nhau để biểu diễn cho chu trình lặp, ví dụ thay vì viết: *[i := 1.10] ta có thể viết *[ i < 11]. Như đã khẳng định từ trước, khi một đối tượng nhận được một thông điệp, ví dụ đối tượng :HeBanHang nhận được msg() như hình 6.7, thì lớp HeBanHang phải có hàm thành phần msg(). Mặt khác, sơ đồ cộng tác thể hiện thuật toán mô tả hoạt động của hệ thống.
Vậy dựa vào sơ đồ cộng tác ở hình 6.4, người lập trình có thể viết hàm msg() (trong C) cho lớp HeBanHang như sau: void msg(){ for(int i = 1; i < 11; i++) 150 CÁC MÔ HÌNH CƠ BẢN TRONG PHÂN TÍCH VÀ THIẾT KẾ HƯỚNG ĐỐI TƯỢNG dong[i] = phienBH.dongBanTiep(); } Hàm này gọi tới hàm dongBanTiep() của lớp PhienBanHang thông qua đối tượng phienBH của nó để đọc liên tiếp 10 dòng bán hàng. Lưu ý: Một đối tượng có thể gửi thông điệp cho chính nó, nghĩa là thông điệp có thể quay vòng tròn. Tạo lập đối tượng mới UML sử dụng thông điệp create() để tạo lập một đối tượng mới (một thể hiện nào đó của một lớp).