II. Đánh giá giữa phân tích thiết kế theo hớng chức năng và hớng đố
5.6 Sơ đồ cộng tác
Sơ đồ cộng tác tập trung trên cả hai sự tơng tác và các liên kết giữa tập các đối t- ợng cộng tác. Sơ đồ tuần tự và sơ đồ cộng tác đều chỉ ra sự tơng tác, nhng sơ đồ tuần tự tập trung về mặt thời gian còn sơ đồ cộng tác tập trung về mặt không gian. Các liên kết chỉ ra các đối tợng thực sự và cách chúng đợc quan hệ với nhau. Với cấu trúc bên trong của nó nh với sơ đồ tuần tự. Sơ đồ cộng tác có thể thờng dùng để minh họa cho sự thực hiện của một phơng thức, thực hiện một use-case, hoặc đơn giản là một khung cảnh tơng tác trong hệ thống.
Sơ đồ cộng tác chỉ các đối tợng và liên kết lẫn nhau của chúng. Nh là các Message đợc gửi giữa các đối tợng có sự liên kết. Các đối tợng đợc vẽ giống nh lớp nhng tên của chúng đợc gạch chân. Các liên kết đợc vẽ bằng các đờng thẳng trên một liên kết, một Message có thể đợc gán và có nhãn định nghĩa Message. Nhãn yêu cầu cú pháp đặc biệt phải thật ngắn. Sơ đồ cộng tác bắt đầu với một Message khởi tạo đầu vào tơng tác hoặc cộng tác, ví dụ nh một lời gọi thực hiện.
Hình 5.7: Message Customer tạo ra một đối tợng mới của lớp Customer, Delete Customer thực hiện huỷ bỏ đối tợng Customer.
: Computer
: PrinterServer
Print[Ps-file] 1: Print[Ps-file]
[Printer free] 1.1Print[Ps-file]
: Printer
5.6.1. Luồng Message (Message flow)
Nhãn của Message (là nhãn đặt tên trên Message) trong sơ đồ cộng tác đợc chỉ định với cú pháp :
Predecessor < điều kiện chặn > chuỗi biểu thức Giá trị trả về : = kí hiệu
ở đó Predecessor đợc chỉ định với cú pháp : Chuỗi số ‘, ‘…’/’
Predecessor là một biểu thức với các luồng hoặc đờng dẫn đồng bộ, nghĩa là các Message đợc kết nối rõ ràng với chuỗi số phải đợc thực hiện và thực hiện trớc Message hiện thời đợc gửi (thực hiện phải liên tục). Danh sách các chuỗi số đợc phân cách bởi dấu phẩy. Điều kiện chặn đợc chỉ định với cú pháp :
‘[‘ mệnh đề điều kiện ‘]’
Hình 5.8: Hành động gửi Message Print tới Computer, Computer gửi Message Print
tới Printserver, Printserver gửi một Message Print tới Printer nếu Printer rảnh.
Mệnh đề điều kiện thờng biểu diễn dạng giả mã hoặc bằng một ngôn ngữ lập trình thực sự. UML không cho cú pháp rõ ràng, chuỗi biểu thức có cú pháp nh sau:
( integer/name) (recurrence) ‘:’
Số nguyên là chuỗi số chỉ định thứ tự Message. Message1 luôn luôn bất đầu một chuỗi các Message, Message1.1 là Message đợc lồng đầu tiên trong quá trình thực hiện của Message1, Message1.2 là Message đợc lồng thứ hai trong khi thực hiện Message1..v..v..
Tên biểu diễn luồng điều khiển hiện thời, chuỗi biểu thức sẽ đợc kết thúc bởi dấu “:”
Recurrence biểu diễn việc thực hiện một điều kiện hoặc một tơng tác, có hai lựa chọn :
‘.’ ‘[‘ mệnh đề tơng tác ‘]’ ‘[‘ mệnh đề tơng tác ‘]’
Mệnh đề tơng tác thờng chỉ định một tơng tác (thực hiện đợc lặp lại) ở đó mệnh đề tơng tác là một điều kiện cho một tơng tác nh là [i : = 1,2,…,n] ví dụ nh: nhãn của một Message chứa một tơng tác là:
1.1[ x : = 1,2,….,10 ]: dosomething ( )
Mệnh đề điều kiện chỉ định phân nhánh, không có điều kiện chặn [ x< 0] và [x >= 0] hai mệnh đề điều kiện đó có thể đợc sử dụng để phân nhánh, trong đó chỉ một điều kiện là đúng, nh vậy chỉ một nhánh sẽ đợc thực hiện. Cả hai mệnh đề là mệnh đề điều kiện và mệnh đề tơng tác đều biểu diễn dạng giả mã hoặc trong cú pháp của một ngôn ngữ lập trình thực sự. Giá trị trả về đợc gán cho kí hiệu Message, kí hiệu đợc sinh ra có tên Message và danh sách tham số. Giá trị trả về chỉ ra giá trị đợc nhận nh kết quả của một lời gọi thực hiện.
Ví dụ : 1 : Display ( )
[ mode = display ] 1.2.3.7 : redraw ( ) 2[ n : = 1, …,z] : prim : = next prim ( prim)
5.6.2. Các liên kết (Links)
Một liên kết là sự kêt nối giữa hai đối tợng. Vai trò tên của đối tợng trong liên kết có thể đợc chỉ ra tại điểm cuối của liên kết, cùng với chất lợng của liên kết. Cả vai trò và chất lợng liên kết đều đợc chỉ định trong sơ đồ lớp chứa các đối tợng. Có vài kiểu có sẵn có thể đợc gắn đến vai trò của đối tợng trong liên kết, toàn cục, cục bộ, tham số, giả, lá phiếu (vote) và thẻ (broadcast).
Trong đó :
• Toàn cục (Global): là ràng buộc dùng tới vai trò liên kết, tơng ứng với sự có mặt của liên kết bởi vì phạm vi của nó là toàn cục (cụ thể là sẵn sàng thông qua tên toàn cục đợc biết từ đầu đến cuối hệ thống).
• Cục bộ (Local): là ràng buộc đợc dùng tới vai trò của liên kết tơng ứng với sự có mặt của nó bởi vì nó là biến cục bộ trong khi thực hiện.
• Tham số (Parameter): là ràng buộc đợc dùng tới vai trò của liên kết tơng ứng với sự có mặt của nó vì nó là tham số trong khi thực hiện.
• Giả (Self): là ràng buộc đợc dùng tới vai trò liên kết chỉ định một đối tợng có thể gửi Message cho bản thân nó.
• Phiếu (Vote): là ràng buộc đợc dùng tới Message, chứa sự thu nhận các Message phản hồi. Ràng buộc Vote chỉ định rằng giá trị trả về thông qua Vote chung của tất cả các giá trị trả về trong sự thu nhận đó.
• Thẻ (Broadcart): là ràng buộc đợc dùng tới một tập các Message chỉ định rằng tập các Message không chỉ đợc gọi ra theo thứ tự.
5.6.3. Thời gian sống của đối tợng
Đối tợng đợc tạo ra trong suốt sự cộng tác đợc thiết kế với {new}nh hình5.9
Các đối tợng bị huỷ bỏ trong suốt sự cộng tác đợc gán bởi ràng buộc {destroyed}. Các đối tợng có thể đợc tạo ra và huỷ bỏ giống nh sự cộng tác đợc thiết kế là {trasient} với nó đánh giá tới {new}, {destroyed}.
5.6.4. Sử dụng các sơ đồ cộng tác
Sơ đồ cộng tác thờng có khả năng chỉ ra sự tơng tác tơng đối đầy đủ giữa các đối tợng. Sự khác nhau chính giữa sơ đồ cộng tác và sơ đồ tuần tự là: Sơ đồ cộng tác thực sự chỉ ra các đối tợng và liên kết giữa chúng, rất nhiều sự việc có thể hiểu đợc bằng sự tơng tác. Chuỗi thời gian dễ hơn để xem trong sơ đồ tuần tự, ở đó nó có thể đợc đọc từ trên xuống dới. Khi quyết định sử dụng sơ đồ nào để chỉ sự tơng tác thì có hớng dẫn dùng để lựa chọn là sơ đồ cộng tác ở đó các đối tợng và các liên kết của chúng sẽ cho ta hiểu sự tơng tác một cách dễ dàng. Lựa chọn sơ đồ tuần tự khi có sự thực hiện nối tiếp.
Hình 5.9: Một sơ đồ cộng tác đầy đủ.
: Sales Statiatics Window 1:Show()
1.1.1“[for all salespersons]: ordersum=GetTotsOrder
Sum() 1.2: [while any lines
left]:GetResultline() 1: GetElevator(floorld) 1.1.1.1[for all orders]:GetOrder Amount() 1.1:Create() 1.1.2.1:Get Budget Amount() : Computer : Computer : Computer : Statiatics Summary
(new) 1.1.2“[for all salespersons]: budget=GetBudget()
Sales Statistics Window(Message1) tạo ra một đối tợng StatisticsSummary (1.1), nó sẽ thu nhận các thỏa mãn hiển thị trong cửa sổ, khi đối tợng Statistics Summary đ- ợc tạo ra nó sẽ tợng tác với tất cả Salerperson để tạo tổng 1.1.1 và ghi vào 1.1.2 cho mỗi Salerperson. Mỗi đối tợng Salerperson có tổng riêng của nó bằng cách tơng tác với tấc cả các Order(đối tợng), tạo ra tổng số cho mỗi (1.1.1.1) và cùng cộng chúng , nó ghi vào từng cách có tổng số từ đối tợng Budget Sales(1.1.2.1), khi đối tợng
StatisticsSummary đã tơng tác với tất cả các salesperson, nó đã tạo ra (phản hồi của Message 1.1), SalesStatisticswindow sẽ có các đờng kết quả từ đối tợng
StatisticsSummary và chỉ ra mỗi đờng trong cửa sổ của nó. Khi tất cả các đờng kết quả đã đợc đọc, phơng thức chỉ ra trên Sales StatisticsWindow các kết quả và sự cộng tác đợc kết thúc.