Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) - Đặng Văn Đức

pdf 98 trang Gia Huy 17/05/2022 2430
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) - Đặng Văn Đức", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_phan_tich_thiet_ke_huong_doi_tuong_phan_2_dang_va.pdf

Nội dung text: Giáo trình Phân tích thiết kế hướng đối tượng (Phần 2) - Đặng Văn Đức

  1. CHƯƠNG 6 BIỂU ĐỒ CHUYỂN TRẠNG THÁI VÀ BIỂU ĐỒ HOẠT ĐỘNG Biểu đồ chuyển trạng thái mô tả chu kỳ tồn tại của đối tượng, phân hệ và hệ thống. Biểu đồ hoạt động là mở rộng của biểu đồ trạng thái. Cả hai loại biểu đồ này điều mô tả khía cạnh động của hệ thống. Chương này trình bày các phần tử biểu đồ, biểu đồ chuyển trạng thái và biểu đồ hoạt động. Cuối chương là thực hành sử dụng UML để vẽ biểu đồ trạng thái cho một lớp trong thí dụ quản lý bán hàng. 6.1 BIỂU ĐỒ CHUYỂN TRẠNG THÁI Biểu đồ chuyển trạng thái bao gồm các thông tin về các trạng thái khác nhau của đối tượng, thể hiện các đối tượng chuyển đổi từ trạng thái này sang trạng thái khác thế nào, hành vi của mỗi đối tượng trong mỗi trạng thái ra sao. Biểu đồ trạng thái chỉ ra chu kỳ sống của đối tượng, từ khi nó được tạo ra đến khi bị phá hủy. Nó còn cho biết các sự kiện ( thông điệp nhận được, kết thúc khoảng thời gian, điều kiện nào đó thành true ) tác động lên các trạng thái như thế nào.Biểu đồ này là giải pháp tốt nhất để mô hình hóa hành vi động của lớp. Thông thường trong một dự án sẽ không phải tạo ra mọi biểu đồ trạng thái cho mọi lớp. Nhiều dự án không sử dụng loại biểu đồ này. Nếu có lớp với nhiều hành vi động (lớp ở một trong nhiều trạng thái khác nhau) thì biểu đồ này có ích lợi. Mọi đối tượng đều có trạng thái; trạng thái là kết quả của các hoạt động do các đối tượng thực hiện trước đó. Đối tượng luôn luôn ở trong một trạng thái xác định vào một thời điểm. Thông thường trạng thái được xác định bởi các giá trị thuộc tính và các liên kết đến các đối tượng khác. Thí dụ nếu hai đối tượng của lớp Person và Company có quan hệ thì con người cụ thể của lớp Person không phải lúc nào cũng có việc làm mà nó sẽ ở một trong ba trạng thái là Employed (người lao động), Retired (người về hưu) hay Unemployed (thất nghiệp). Thí dụ về các trạng thái của đối tượng như sau: • Hóa đơn ( đối tượng ) đã được thanh toán ( trạng thái ). • Xê ô tô ( đối tượng ) đang đứng ( trạng thái ). • Chị B ( đối tượng ) làm nhiệm vụ bán hàng ( trạng thái ). Đối tượng thay đổi trạng thái khi cái gì đó xảy ra (gọi là sự kiện); thí dụ, ai đó thanh toán hóa đơn bán hàng, bắt đầu lái xe Biểu đồ trạng thái được sử dụng để chỉ ra đối tượng phản ứng với các sự kiện như thế nào và trạng thái bên trong của chúng thay đổi ra sao. Khi quan sát đối tượng động ta phải quan tâm đến tương tác và sự thay đổi bên trong nó. Tương tác mô tả hành vi bên ngoài đối tựơng và tương tác với các đối tượng khác như thế nào (bằng gửi thông điệp). Giả sử ai đó thanh toán hóa đơn hàng thì hóa đơn thay đổi trạng thái từ chưa thanh toán (Unpaid) sang thanh toán (Paid). Khi hóa đơn mới được lập ra thì nó ở trạng thái chưa thanh toán như mô tả trên hình 6.1. Phát triển phần mềm bằng UML trang | 137
  2. Unpaid Paying Invoice Paid Invoce destroyed Hình 6.1 Trạng thái của đơn hàng Biểu đồ trạng thái có điểm khởi đầu (hình tròn đen) và vài điểm kết thúc (hình tròn đen có đường bao); các hoạt động trong biểu đồ được đặt trong chữ nhật góc tròn. Trong chữ nhật có các dòng văn bản để chỉ ra các hành động. Giữa các trạng thái là quá độ trạng thái (thể hiện bằng mũi tên). Quá độ có thể có tên sự kiện gây ra biến đổi trạng thái. Khi sự kiện xảy ra thì có sự biến đổi từ trạng thái này sang trạng thái kia (đôi khi còn gọi là cháy). Trên hình 6.1, trả tiền (Paying), lập hóa đơn (Invoice creaded) hủy hóa đơn (Invoice destroyed) là các sự kiện làm chuyển trạng thái. Hình 6.2 là thí dụ biểu đồ chuyển trạng thái của lớp Đăng ký môn học (Course). Trong thí dụ này, lớp Course có thể ở một trong các trạng thái như mở môn học (Open), kết thúc đăng ký môn học (Closed), bãi bỏ môn học (Cancelled) và hoàn thành môn học (Completed). Open Registration ended Course Cancelled Closed Course Cancelled Cancelled End of Semester Completed Hình 6.2 Biểu đồ chuyển trạng thái lớp Course Hình 6.3 là thí dụ biểu đồ trạng thái của thang máy. Thang máy bắt đầu từ tầng một, có nghĩa rằng nó đạng ở trạng thái On first floor, nó có thể đi lên (Moving up) hay đi xuống (Moving down). Nếu thang máy đang dừng tại tầng nào đó (Idle) thì sau khoảng thời gian nhất định nó đi lên tầng một (Moving to first floor). Biểu đồ trạng thái của thí dụ này không có điểm cuối. Phát triển phần mềm bằng UML trang | 138
  3. On first go up Moving up floor arrived arrived Moving to Moving arrived Idle first floor down go down time out Hình 6.3 Biểu đồ trạng thái thang máy Biểu đồ trạng thái là cần thiết bởi vì nó giúp phân tích viên, người thiết kế và người phát triển hiểu hành vi đối tượng trong hệ thống. Đặc biệt, người phát triển phải hiểu rõ hành vi đối tượng vì họ phải cài đặt hành vi trong phần mêm. Họ không chỉ cài đặt đối tượng mà còn làm đối tượng thực hiện cái gì đó. 6.1.1 - Trạng thái Trạng thái là một trong các điều kiện có thể để đối tượng tồn tại. Trạng thái được xãc định từ hai vùng: thuộc tính và quan hệ giữa các lớp. Tương tự các thành phần khác của biểu đồ UML, ta có thể bổ sung tài liệu vào trạng thái. Tuy nhiên, tài liệu này sẽ không chuyển thành mã nguồn sau này. Ký pháp trạng thái trong UML như sau: Tên trạng thái Khi đối tượng ở trong trạng thái nào đó, nó thực hiện nhiều hoạt động. Thí dụ, phát sinh báo cáo, thực hiện một vài tính toán hay gởi sự kiện tới đối tượng khác. Có thể gộp năm loại thông tin để mô tả trạng thái; chúng bao gồm hoạt động, hành động vào, hành động ra, sự kiện, lịch sử trạng thái. Lần đầu tiên đối tượng được tạo ra thì nó ở trong trạng thái khởi động. Trong biểu đồ UML thì trạng thái khởi động được vẽ bằng hình tròn đen. Chỉ có một trạng thái bắt đầu trong biểu đồ. Trạng thái dừng là trạng thái khi đối tượng bị phá hủy. Số lượng trạng thái dừng trong biểu đồ là tùy ý, có bao nhiêu trạng thái dừng cho biểu đồ cũng được. 6.1.1.1 - Hoạt động Hoạt động (activity) là hành vi mà đối tượng thực thi khi nó ở trong trạng thái cụ thể. Thí dụ, khi tài khoản ở trong trạng thái đóng thì máy đọc thẻ không chấp nhập thể tín dụng của khách hàng, nếu đã mở tài khoản thì trạng thái có thể là gửi thông điệp, chờ hay tính toán. Hoạt động là hành vi có thể ngắt được, nó có thể được hoàn thành khi đối tượng đang trong trạng thái hay nó bị ngắt vì đối tượng chuyển sang trạng thái khác. Hoạt động được biểu diễn trong phần tử biểu đồ trạng thái (hình 6.4a), trước đó có từ do và dấu : (hoặc dấu /). Phát triển phần mềm bằng UML trang | 139
  4. 6.1.1.2 - Hành động vào Hành động vào (Entry action ) là hành vi xảy ra khi đối tượng đang chuyển đổi trạng thái. Thí dụ khi tài khoản đang chuyển vào trạng thái rút tiền quá mức thì “hành động vào” đóng băng tạm thời tài khoản (Temporarily freeze account ) xảy ra (hình 6.4). Tuy nhiên hành động náy sẽ không xảy ra khi đối tượng đã vào trạng thái rút quá qui định. Nó xảy ra như một bộ phận của biến đổi vào trạng thái. Không giống như hoạt động, hành vi vào là không ngắt được. Ký pháp của hành động vào trong UML như trên hình 6.4b. Hình 6. 4 Thông tin trong trạng thái 6.1.1.3 - Hành động ra Hành động ra (exit action) tương tự như hành động vào. Tuy nhiên, hành động ra là bộ phận của chuyển đổi ra khỏi trạng thái. Thí dụ, khi tài khoản rời bỏ trạng thái rút quá quy định thì hành động xảy ra hủy trạng thái đóng băng tạm thời (Remove Temporary Freeze) xảy ra như một phần của biến đổi (hinh 6.5). Hành động ra cũng không bị ngắt. Ký pháp của hành động ra trong UML như trên hình 6.4c. Hình 6.5 Biểu đồ biến đổi trạng thái của lớp Tài khoản Tóm lại, cú pháp hình thức cho các hoạt động trong một trạng thái được thể hiện như sau: event_name argument_list ‘/’ action_expression Phát triển phần mềm bằng UML trang | 140
  5. trong đó, event_name có thể là sự kiện bất kỳ nào, kể cả các sự kiện chuẩn như entry, exit hay do; action_expression cho biết hành động nào sẽ được thực hiện, có thể thay ký tự : cho ký tự /. Các sự kiện có thể có đối. Hình 6.5 là thí dụ biểu đồ biến đổi trạng thái của lớp Tài khoản trong hệ thống rút tiền tự động ATM. Hành vi trong hoạt đông (do), hành động vào (entry), hành động ra (exit) có thể gửi sự kiện đến một vài đối tượng khác. Khi nhận được sự kiện thì hành động nào đó có thể xảy ra. Thí dụ đối tượng lớp Tài khoản có thể gửi sự kiện đến đối tượng đọc thẻ tín dụng. Trong trường hợp này phải đặt dấu ^ vào trước hành động, hành động vào, hành động ra. Trên biểu đồ UML có thể là: Do:^Target.Event(Arguments) trong đó, Target là đối tượng nhận sự kiện, Event là thông điệp gửi và Arguments là tham số thông điệp. 6.1.2 - Quá độ Quá độ (transition) là chuyển động từ trạng thái này sang trạng thái khác. Ký pháp quá độ trên biểu đồ UML như trên hình 6.6a. Quá độ có thể phản thân, khi xảy ra hiện tượng là đối tượng chuyển tiếp trở lại trạng thái củ của nó. Ký pháp quá độ phản thân trong UML như hình 6.6b. Trang thai 1 Qua do phan than Qua do Trang thai Trang thai 2 b) a) Hình 6.6 Chuyển tiếp trạng thái UML cho khả năng gộp nhiều đặc tả vào quá độ. Chúng có thể là sự kiện, đối, điều kiện bảo vệ, hành động và gửi sự kiện. Sự kiện. sự kiện là cái gì đó làm nguyên nhân của chuyển tiếp từ trạng thái này sang trạng thái khác. Thí dụ sự kiện Khách hàng yêu cầu đóng tài khoản sẽ gây ra tài khoản chuyển từ trạng thái mở sang trạng thái đóng (hình 6.5). Sự kiện Gửi tiền vào sẽ chuyển Tài khoản từ trạng thái Rút quá sang trạng thái Mở có đối số là Tổng số, chứa số tiền gửi vào. Hầu hết các chuyển tiếp đều có sự kiện. Với chuyển tiếp tự động (không có sự kiện) thì đối tượng tự động chuyển tiếp từ trạng thái này sang trạng thái khác. Phát triển phần mềm bằng UML trang | 141
  6. Điều kiện canh (guard). Điều kiện canh điều khiển chuyển tiếp để có thể hay không có thể xảy ra (hình 6.7a). Thí dụ, sự kiện gửi tiền sẽ chuyển tài khoản từ trạng thái Rút quá sang trạng thái Mở, nhưng chỉ khi Số dư tài khoản lớn hơn 0. State 1 Mo Event[guard condition] Su kien/ Luu tru ngay dong tai khoan State 2 Dong a) b) Hình 6.7 Điều kiện canh Hành động (action). Hành động là hành vi không ngắt được, xảy ra như một phần của chuyển tiếp. Hành động vào và hành động ra được thể hiện trong trạng thái. Phần lớn hành động được vẽ theo mũi tên chuyển tiếp. Thí dụ, khi chuyển từ trạng thái mở sang trạng thái đóng, hành động Lưu thời điểm yêu cầu đóng tài khoản xảy ra. Đó là hành vi không ngắt được, xảy ra khi tài khoản chuyển tiếp từ trạng thái mở sang trạng thái đóng. Hành động biểu thị trên mũi tên chuyển tiếp được đặt sau tên sự kiện và dấu / (hình 6.7b). 6.1.3 - Trạng thái ẩn Để giảm thiểu số lượng trạng thái trong biểu đồ, ta có thể ẩn một số trạng thái trong trạng thái khác. Các trạng thái ẩn (nested) được xem như tiểu trạng thái (substates), trong khi trạng thái lớn hơn gọi là siêu trạng thái (superstates). Nếu hai hay nhiều trạng thái có cùng chuyển tiếp, thì có thể nhóm chúng vào cùng siêu trạng thái. Sau đó thay vì quản lý hai chuyển tiếp như nhau, ta quản lý chuyển tiếp của siêu trạng thái. Biểu đồ trạng thái trên hình 6.8 là biểu đồ trạng thái ẩn xây dựng từ biểu đồ trên hình 6.2. Phát triển phần mềm bằng UML trang | 142
  7. Hình 6.8 Trạng thái ẩn Hình 6.9 Lịch sử siêu trạng thái Trong biểu đồ loại này, hệ thống cần phải nhớ trạng thái bên trong nào là cuối cùng. Giả sử ta có ba trạng thái trong siêu trạng thái, khi rời khỏi siêu trạng thái ta muốn hệ thống nhớ lại nơi vừa ra khỏi từ siêu trạng thái để trở lại sau này. Để giải quyết vấn đề này ta cần làm hai việc sau: Thứ nhất là bổ sung trạng thái khởi đầu trong siêu trạng thái để chỉ ra điểm khởi đầu mặc định trong siêu trạng thái; thứ hai là sử dụng chỉ báo lịch sử trạng thái để nhớ nơi đối tượng vừa đi qua. Nếu chỉ báo lịch sử được đặt thì đối tượng có thể rời khỏi siêu trạng thái, khi trở lại nó sẽ đến đúng Phát triển phần mềm bằng UML trang | 143
  8. nơi nó rời bỏ trước đó. Chỉ báo lịch sử được ký hiệu bằng chữ “H” trong vòng tròn tại góc biểu đồ (hình 6.9). Hình 6.10 Lớp và biểu đồ trạng thái tương ứng 6.1.4 - Lớp và biểu đồ trạng thái Quan hệ giữa lớp và biểu đồ trạng thái tương ứng được mô tả thông qua thí dụ trên hình 6.10. Trên hình này có lớp Digital_watch và biểu đồ trạng thái tương ứng của nó. Hình này cho thấy các sự kiện trong biểu đồ trạng thái liên quan đến các thao tác trong lớp như thế nào. Trong thí dụ này đồng hồ có ba trạng thái sau: trạng thái hiển thị thông thường và hai trạng thái tăng giờ tăng phút. 6.2 BIỂU ĐỒ HOẠT ĐỘNG Chắc chắn rằng khái niệm biểu đồ tiến trình (flowchart) quen thuộc với người lập trình viên. Biểu đồ này chỉ ra trình tự các bước, tiến trình, các điểm quyết định và các nhánh. Các lập trình viên mới thường sử dụng khái niệm này để khái quát vấn đề và đề xuất giải pháp. Biểu đồ hoạt động của UML tương tự như biểu đồ tiến trình. Nó chỉ ra các bước (các hoạt động), các điểm quyết định và các nhánh. Biểu đồ hoạt động là biểu đồ mới trong UML vì nó không phải kết quả của Booch, Jacobson hay Rumbagh. Nó được hình thành trên biểu đồ sự kiện của Odell và được cập nhật vào phiên bản cuối cùng của UML. Biểu đồ hoạt động được sử dụng để mô hình hóa khía cạnh động của hệ thống, mô hình hóa các bước trình tự hay tương tranh trong quá trình tính toán. Biểu đồ hoạt động còn được sử dụng để mô hình hóa luồng đối tượng đi từ trạng thái này sạng trạng thái khác tại từng vị trí trong luồng điều khiển. Trong khi biểu đồ tương tác tập trung vào luồng điều khiển từ đối tượng đến đối tượng thì biểu đồ hoạt động tập trung vào luồng điều khiển từ hoạt động đến hoạt động. Biểu đồ hoạt động bao gồm trạng thái hoạt động và trạng thái hành động, quá độ và đối tượng. Tương tự như các biểu đồ khác, biểu đồ loại này cũng có ghi chú và ràng buộc. Phát triển phần mềm bằng UML trang | 144
  9. 6.2.1 - Trạng thái hành động và trạng thái hoạt động Trong luồng điều khiển bằng mô hình hóa bằng biểu đồ hoạt động ta có thể thực hiện vài biểu thức để cho lại giá trị hay thiết lập giá trị thuộc tính, ta có thể gọi thao tác của đối tượng, gửi tín hiệu đến đối tượng hay sự kiện lập và hủy bỏ đối tượng. Các tính toán cơ bản này được gọi là trạng hành động (action state) vì nó là trạng thái của hệ thống. Trạng thái hành động là không chia nhỏ được, công việc của trạng thái hành động là không ngắt được và nó chiếm khoảng thời gian ngắn để thực hiện. Ngược lại, trạng thái hoạt động (activity state) là tách được, nó có thể bị ngắt và cần khoảng thời gian đáng kể để hoàn thành công việc. Có thể xem trạng thái hành động là trường hợp đặc biệt của trạng thái hoạt động. Ngược lại, trạng thái hoạt động được xem như tổ hợp mà luồng điều khiển của nó được lập từ các trạng thái hoạt động khác và từ các trạng thái hành động. Trong trạng thái hoạt động ta có thể tìm ra các biểu đồ hoạt động khác. Ký pháp đồ họa của trạng thái hoạt động giống như ký pháp trạng thái hành động, điểm khác nhau là trạng thái hoạt động còn có các bộ phận khác như hành động vào, hành động ra hay đặc tả submachine. Ký pháp đồ họa của trạng thái hoạt động trên hình 6.11. Trạng thái khởi đầu và trạng thái kết thúc được biểu diễn tương tự như biểu đồ trạng thái. 6.2.2 - Quá độ Khi hành động hay hoạt động của trạng thái hoàn thành, luồng điều khiển chuyển sang trạng thái hành động hay hoạt động khác. Luồng này được mô tả bởi quá độ (transition), nó cho thấy đường đi từ trạng thái hành động hay hoạt động đến trạng thái hành động hay hoạt động khac. Việc chuyển tiếp từ trạng thái này sang trạng thái khác được thực hiện tức thì vì hệ thống phải luôn ở trong trạng thái biết trước. Trong UML, quá độ được biểu diễn bằng mũi tên đơn (hình 6.11a). Hình 6.11 Quá độ và rẽ nhánh 6.2.3 - Rẽ nhánh Thông thường thì quá độ là trình tự. Nhưng cần phải có kiểu đường đi khác để mô hình hóa luồng điều khiển. Trong biểu đồ tiến trình, rẽ nhánh xác định đường đi phụ trên cơ sở biểu thức Bool. Trên biểu đồ UML, rẽ nhánh được biểu diễn bởi viên kim cương trắng. Rẽ nhánh có thể có một quá độ vào và hai hay nhiều quá độ ra. Quá độ ra thường được gán điều kiện viết trong ngoặc vuông như trên hình 6.11b hay được gắn biểu thức Bool, nó đựơc đánh giá tại đầu vào nhánh. Thí dụ, ông A hàng ngày đi làm việc bằng xe máy. Ông A lên xe, cắm chìa khóa và khởi động xe. Hai trường hợp này hình thành hai hoạt động: ông A lái xe và ông A đi xe bus, taxi, xe đạp hay đi bộ. Kịch bản này thể hiện trên hình 6.12. Phát triển phần mềm bằng UML trang | 145
  10. Khôûi ñoäng xe Laùi xe Ñi xe bus, taxi, xe ñaïp hay ñi boä Hình 6.12 Biểu đồ hoạt động hai nhánh 6.2.4 - Đường dẫn tương tranh Đường dẫn hay gặp nhất trong biểu đồ hoạt động là có quá độ trong trình tự rẽ nhánh. Tuy nhiên trong khi mô hình hóa luồng công việc của nhiều tiến trình ta gặp phải các luồng tương tranh. Trong UML, thanh đồng bộ được sử dụng để kết hợp (hình 6.13a) và chia nhánh (hình 6.13b) các luồng điều khiển song song. Hình 6.13 Đồng bộ và rẽ nhánh Thanh đồng bộ được vẽ bằng đường đậm. Đồng bộ có nghĩa rằng mọi quá độ đi vào phải có mặt đầy đủ trước khi quá độ “cháy” (hình 6.13a). Quá độ này còn được gọi là đồng bộ AND. Tuy nhiên, để mô tả quá độ đồng bộ OR (chỉ một quá độ vào là đủ cho “cháy”) hay vẽ quá độ đồng bộ XOR, B. Oesterich đã đề nghị ký pháp đồ họa như trên hình vẽ 6.13c [OEST001]. Thí dụ trên hình 6.14 mô tả chia luồng điều khiển đơn thành hai luồng điều khiển tương tranh. Thanh đồng bộ chia nhánh có một quá độ đến và hai quá độ đi ra. Hai hoạt động Ăn sáng và Uống cà phê song song tiếp tục. Thanh kết hợp có hai quá độ đi vào và một quá độ ra. Thanh này thực hiện đồng bộ luồng tương tranh, có nghĩa rằng các luồng này phải chờ đến khi mọi luồng đều đến thanh kết hợp (Ăn sáng và Uống cà phê xong) để sau đó chỉ có một luồng điều khiển tiếp tục (Đi làm việc). Như vậy, thanh đồng bộ cho khả năng “mở” hay “đóng” các nhánh song song trong luồng thực hiện của thao tác hay UC. Phát triển phần mềm bằng UML trang | 146
  11. Nguû daäy AÊn saùng Uoáng caø pheâ Ñi laøm vieäc Hình 6.14 Các hoạt động tương tranh 6.2.5 - Đường bơi Đường bơi (swimlanes) được sử dụng để mô hình hóa luồng công việc của các tiến trình thương mại, để phân hoạch các trạng thái hoạt động trên biểu đồ hoạt động vào nhóm. Trong UML, mỗi nhóm này được gọi là đường bơi vì các nhóm được phân tách bởi đường thẳng đứng như trên hình 6.15. Mỗi đường bơi có tên và nhiệm vụ duy nhất và được biểu thị trên đỉnh biểu đồ.Trong biểu đồ hoạt động. mỗi hoạt động thuộc về một đường bơi nhưng quá độ có thể được vẽ trải qua các đường bơi. Mỗi đường bơi được cài đặt bởi một hay nhiều lớp. 6.2.6 - Luồng đối tượng Các đối tượng có thể được kích hoạt trong luồng điều khiển trong biểu đồ hoạt động. Khảo sát tiếp tục thí dụ trên hình 6.13. Giả xử hoạt động Xử lý đơn hàng tạo ra đối tượng của lớp Order, hoạt động Gửi hàng đi làm thay đổi trạng thái đối tượng Order thành đã được xử lý. Biểu đồ hoạt động hình 6.15 còn được bổ sung các đối tượng. Mũi tên nét đứt trên biểu đồ là luồng đối tượng. Phát triển phần mềm bằng UML trang | 147
  12. Hình 6.15 Mô hình hóa luồng công việc 6.2.7 - Gửi và nhận tín hiệu Có thể gửi và nhận tín hiệu trong biểu đồ hoạt động. Có hai loại biểu tượng cho gửi và nhận tín hiệu. Hình ngũ giác lồi là biểu tượng của gửi và ngũ giác lõm là biểu tượng của nơi nhận. Trên biểu đồ chúng được gắn vào đường quá độ của đối tượng gửi và đối tượng nhận thông điệp. Hình 6.16 là biểu đồ hoạt động mô tả tiến trình in tệp trong Windows. Giữa hai hành động Tạo lập tệp postcript và Hủy bỏ hộp thoại là gửi tín hiệu Yêu cầu in. Tín hiệu này còn chứa tệp và được đối tượng Máy in in. Phát triển phần mềm bằng UML trang | 148
  13. Hình 6.16 Tín hiệu trong biểu đồ hoạt động Result:=1 Counter:=1 [n=0, n=1] Prin (Result, Counter) [n>0] Result:=Counter*Result Ñeä quy Counter:=Counter+1 [Counter >0] [Counter <=n] Hình 6.17 Mô hình hóa thao tác Tóm lại, khi mô hình hóa khía cạnh động của hệ thống thì thông thường biểu đồ hoạt động được sử dụng theo hai cách sau: • Mô hình hóa luồng công việc. • Mô hình hóa thao tác. Thí dụ trên hình 6.17 vừa mô tả trên đây là mô hình hóa thao tác tính giai thừa của số n. 6.3 THỰC HÀNH 6.3.1 - Sử dụng Rational Rose 6.3.1.1 - Tạo lập biểu đồ trạng thái Trong Rose có thể tạo một biểu đồ trạng thái cho mỗi lớp. Mọi trạng thái và chuyển tiếp trạng thái của lớp đều ở trong biểu đồ này. Biểu đồ chuyển trạng thái nằm dưới lớp trong browser. Quá trình tạo lập biểu đồ chuyển trạng thái như sau: 1. Nhấn phím phải chuột trên lớp trong browser 2. Chọn thực đơn Open State Diagram Phát triển phần mềm bằng UML trang | 149
  14. 6.3.1.2 - Bổ sung trạng thái vào biểu đồ Bổ sung trạng thái vào biểu đồ như sau: 1. Chọn phím State từ thanh công cụ 2. Nhấn phím chuột trên biểu đồ biến đổi trạng thái nơi muốn vẽ trạng thái. 6.3.1.3 - Bổ sung chi tiết cho trạng thái Sử dụng bảng Detail trong cửa sổ hoặc đặc tả trạng thái như trên hình 6.18 để gộp các thông tin vào trạng thái, bao gồm hành động, hành động vào, hành động ra, sự kiện và lịch sử trạng thái. Hoạt động (activity). Bổ sung hoạt động theo các bước sau đây: 1. Mở cửa sổ đặc tả cho trạng thái mong muốn 2. Chọn bảng Detail 3. Nhấn phím phải trên hộp Actions 4. Chọn thực đơn Insert 5. Nhấp đúp trên hành động mới 6. Nhập hành động trong trường Action 7. Chọn Entry Until Exit trong hộp When Hình 6.18 Cửa sổ đặc tả trạng thái Các bước bổ sung hành động vào (entry action) và hành động ra (exit action) được vào trạng thái được thực hiện tương tự như các bước như các bước mô tả trên đây. Gửi sự kiện. Gửi sự kiện được thực hiên theo các bước sau đây: 1. Mở cửa sổ đặc tả cho trạng thái mong muốn 2. Chọn bảng Detail Phát triển phần mềm bằng UML trang | 150
  15. 3. Nhấn phím phải trên hộp Actions 4. Chọn thực đơn Insert 5. Nhấn đúp trên hành động mới 6. Chọn kiểu Send Event 7. Nhập sự kiện, đối số và đích trong các trường tương ứng. 6.3.1.4 - Bổ sung chuyển trạng thái Vẽ phần tử chuyển trạng thái vào biểu đồ như sau: 1. Chọn phím Transition trên thanh công cụ 2. Nhấn trên trạng thái nơi bắt đầu vẽ 3. Di chuyển đường chuyển trạng thái đến phần tử trạng thái đích. Vẽ phần tử chuyển trạng thái phản thân như sau: • Chọn phím Transition to Self trên thanh công cụ • Nhấn trên trạng thái nơi vẽ chuyển trạng thái phản thân. 6.3.1.5 - Bổ sung chi tiết cho chuyển trạng thái Đặc tả chuyển trạng thái trong UML bao gồm sự kiện, đối số, điều kiện gác, hành động và gửi sự kiện. Gán sự kiện cho chuyển trạng thái theo các bước như sau: Nhấn đúp vào chuyển tiếp để mở cửa sổ đặc tả Chọn bảng General Nhập sự kiện trong trường Event Gán sự kiện cho chuyển trạng thái theo các bước như sau: 1. Nhấn đúp vào chuyển tiếp để mở cửa sổ đặc tả 2. Chọn bảng General 3. Nhập đối số trong trường Argument. Bổ sung điều kiện gác cho biểu đồ như sau: 4. Nhấn đúp vào chuyển tiếp để mở cửa sổ đặc tả 5. Chọn bảng Detail 6. Nhập điều kiện trong trường Condition. Bổ sung hành động cho biểu đồ như sau: 7. Nhấn đúp vào chuyển tiếp để mở cửa sổ đặc tả 8. Chọn bảng Detail 9. Nhập hành động trong trường Condition. Bổ sung gửi sự kiện cho biểu đồ như sau: 10. Nhấn đúp vào chuyển tiếp để mở cửa sổ đặc tả 11. Chọn bảng Detail Phát triển phần mềm bằng UML trang | 151
  16. 12. Nhập sự kiện trong trường Send Argument 13. Nhập đích vào trường Send Target Để ẩn (nest) trạng thái ta làm như sau: 14. Chọn phím State từ thanh công cụ Nhấn phím chuột vào trạng thái sẽ ẩn trong trạng thái mới. Để sử dụng lịch sử trạng thái ta làm như sau: 15. Mở cửa sổ đặc tả cho trạng thái mong muốn 16. Chọn bảng Detail 17. Đánh dấu hộp States History 18. Nếu ta có trạng thái trong trạng thái ta có thể áp dụng đặc trưng lịch sử cho mọi trạng thái ẩn trong siêu trạng thái. Để thực hiện việc này ta đánh dấu hộp Substates History. 6.3.2 - Thí dụ: Hệ thống bán hàng (tiếp theo) Trong bài thực hành này chúng ta sẽ lập biểu đồ biến đổi trạng thái cho lớp Order của ứng dụng quản lý hóa đơn bán hàng. Hóa đơn bán hàng có thể có nhiều trạng thái: hóa đơn chưa giải quyết (pending order), hóa đơn đã giải quyết (filled order), hóa đơn hủy bỏ (cancelled order). Biểu đồ trạng thái của chúng được vẽ trên hình 6.19 Hình 6.19 Biểu đồ trạng thái lớp Order 6.3.2.1 - Lập biểu đồ 19. Tìm lớp Order trong browser 20. Nhấn phím phải của chuột trên lớp, chọn Open State Diagram 6.3.2.2 - Bổ sung trạng thái Start, Stop 21. Chọn công cụ trạng thái Start Phát triển phần mềm bằng UML trang | 152
  17. 22. Đặt chúng trong biểu đồ 23. Làm tương tự cho trạng thái Stop 6.3.2.3 - Bổ sung siêu trạng thái 24. Chọn phím State từ thanh công cụ Đặt trạng thái vào biểu đồ 6.3.2.4 - Bổ sung các trạng thái khác 25. Chọn trạng thái từ thanh công cụ 26. Đặt tả trạng thái vào biểu đồ 27. Đặt tên trạng thái Cancelled 28. Chọn trạng thái từ thanh công cụ 29. Đặt trạng thái vào biểu đồ 30. Đặt tên trạng thái Filled 31. Chọn trạng thái từ thanh công cụ 32. Đặt trạng thái vào trong siêu trạng thái 33. Đặt tên trạng thái Initializatiion 34. Chọn trạng thái từ thanh công cụ 35. Đặt trạng thái vào trong siêu trạng thái 36. Đặt tên trạng thái Pending 6.3.2.5 - Bổ sung chi tiết trạng thái 37. Nhấn đúp phím chuột trên trạng thái Initialization 38. Chọn Detail Tab 39. Nhấn phím phải trên hộp Actions 40. Chọn Insert trong thực đơn pop-up 41. Nhấn đúp trên new action 42. Đặt tên hành động là Store Order Date 43. Đảm bảo rằng On Entry được chọn trong hộp soạn thảo When 44. Lặp lại các bước 3-7 để bổ sung các hành động Collect Customer Info, Entry until Exit và Add Order Items, Entry until Exit. 45. Nhấn OK hai lần để đóng specification. 46. Nhấn dúp trên trạng thái Cancelled 47. Lặp lại các bước 2-7 để bổ sung hành động: Store Cancellation Date, On Exit. 48. Nhấn OK hai lần để đóng specification 49. Nhấn đúp trên trạng thái Filled 50. Lặp lại các bước 2-7 để bổ sung hành động: Bill Customer, Entry until Exit. Phát triển phần mềm bằng UML trang | 153
  18. 51. Nhấn OK hai lần để đóng specification. 6.3.2.6 - Bổ sung quá độ 52. Chọn phím Transition từ thanh công cụ 53. Nhấn trạng thái Start 54. Di đường transition đến trạng thái Initialization 55. Lặp lại bước 1-3 để bổ sung transitions: Initialization đến Pending Pending đến Filled Siêu trạng thái (uperstate) đến Cancelled Cancelled đến trạng thái End Filled đến trạng thái End 56. Chọn phím Transition to Self từ thanh công cụ 57. Nhấn trên trạng thái Pending 6.3.2.7 - Bổ sung chi tiết quá độ 58. Nhấn đúp trên đường biến đổi trạng thái từ Initialization đến Pending để mở specification 59. Nhập Finalize Oder vào ô Event 60. Nhấn OK để đóng specification 61. Lặp lại các bươc 1-3 để bổ sung sự kiện Cancel Order vào sườn giữa siêu trạng thái và trạng thái Cancelled 62. Nhấn đúp trên sườn từ Pending đến Filled để mở specification 63. Nhập Add Order Item vào ô Event. 64. Chọn Detail tab 65. Nhập No unfilled items remaining vào ô Condition 66. Nhấn OK để đóng Specification 67. Nhấp đúp trên sườn phản thân của trạng thái Pending 68. Nhập Add Order Item vào ô Event 69. Chọn Detail tab 70. Nhập Unfilled items remaining vào ô Condition 71. Nhấn OK để đóng Specification. Phát triển phần mềm bằng UML trang | 154
  19. CHƯƠNG 7 BIỂU ĐỒ KIẾN TRÚC VẬT LÝ VÀ PHÁT SINH MÃ TRÌNH Kiến trúc hệ thống là kế hoạch chi tiết của các bộ phận hình thành hệ thống, bao gồm cấu trúc, giao diện và cơ chế được sử dụng để giao tiếp. Xác định kiến trúc tốt cho khả năng dễ dàng tìm kiếm vị trí của các chức năng, khái niệm cụ thể hay dễ dàng xác định vị trí để bổ sung các chức năng và khái niệm mới để phù hợp với hệ thống. UML định nghĩa kiến trúc như sau: “Kiến trúc là cấu trúc tổ chức của hệ thống. Kiến trúc có thể tách thành các bộ phận (thành nhiều mức khác nhau) tương tác thông qua giao diện, các quan hệ nối các bộ phận và ràng buộc để lắp ráp các bộ phận”. Còn kiến trúc phần mềm được Buschmann (1996) định nghĩa như sau: “Kiến trúc phần mềm là mô tả các hệ con và các thành phần của hệ thống phần mềm và các quan hệ giữa chúng. Các hệ con và các thành phần được xác định từ các góc nhìn khác nhau để chỉ ra các thuộc tính chức năng và phi chức năng của hệ thống phần mềm. Kiến trúc phần mềm là vật phẩm, là kết quả của hoạt động thiết kế phần mềm”. Kiến trúc hệ thống được phân chia thành hai loại: logíc và vật lý. Kiến trúc logíc chỉ ra các lớp và đối tượng, các quan hệ và cộng tác để hình thành khía cạnh chức năng của hệ thống. Kiến trúc logíc được mô tả bằng các biểu đồ UC, lớp, trạng thái, trình tự, hợp tác và biểu đồ hoạt động như đã trình bày trong các chương trước đây. Kiến trúc chung là cấu trúc ba tầng, trong đó hệ thống được chỉ ra tầng giao diện, tầng đối tượng tác nghiệp và tầng CSDL. Biểu đồ gói của UML sẽ chỉ ra cấu trúc logíc của chúng bao gồm kiến trúc bên trong của mỗi tầng. Kiến trúc vật lý đề cập đến mô tả chi tiết hệ thống về phương diện phần cứng và phần mềm của hệ thống. Nó phản ánh cấu trúc phần cứng, bao gồm các nút khác nhau và chúng nối với nhau như thế nào. Đồng thời nó mô tả cấu trúc vật lý và các phụ thuộc của các mođun mã trình để cài đặt các khái niệm định nghĩa trong kiến trúc logíc; và sự phân bố các phần mềm khi chạy theo tiến trình, chương trình và các thành phần khác. Kiến trúc vật lý liên quan đến cài đặt, do vậy nó được mô hình hóa trong các biểu đồ cài đặt. Biểu đồ cài đặt trong UML bao gồm biểu đồ thành phần (compoment diagram) và biểu đồ triển khai (deployment diagram). Biểu đồ thành phần chứa các thành phần phần mềm, bao gồm các đơn vị mã trình và cấu trúc các tệp (mã nguồn và nhị phân). Biểu đồ triển khai chỉ ra kiến trúc hệ thống khi chạy, bao gồm các thiết bị vật lý và các phần mềm đặt trên nó. 7.1 BIỂU ĐỒ THÀNH PHẦN 7.1.1 - Thành phần là gì? Thành phần là mô đun vật lý mã trình, thành phần phần mềm có thể là thư viện mã nguồn và các tệp chạy được. Mặc định mỗi lớp trong mô hình logíc sẽ có phần đặc tả phần thân. Đặc tả chứa ghép nối lớp, thân chứa cài đặt của cùng lớp đó. UML có các biểu tượng đồ họa để gán cho các kiểu thành phần khác nhau (hình 7.1). Hình 7.1 Biểu đồ thành phần của UML Dưới đây là mô tả vắn tắt một vài kiểu thành phần của UML Phát triển phần mềm bằng UML trang | 155
  20. Thành phần mã nguồn. Thành phần mã nguồn có ý nghĩa vào thời điểm dịch chương trình. Thông thường đó là tệp mã nguồn cài đặt một hay nhiều lớp. Thí dụ C++, mỗi tệp .cpp và tệp .h là thành phần. Trước khi phát sinh mã nguồn, ta phải ánh xạ từng tệp vào thành phần tương ứng; trong C++, mỗi lớp được ánh xạ vào hai tệp (.cpp và .h). Thành phần nhị phân. Thành phần nhị phân thường là mã trình có được sau khi dịch thành phần mã nguồn. Nó có thể là tệp mã đối tượng (obj), tệp thư viện tĩnh (lib) hay tệp thư viện động (Dynamic Linking library-dll). Thành phần nhị phân có ý nghĩa vào thời điểm liên kết, hoặc thời điểm chạy chương trình (thí dụ thư viện động). Thành phần khả thi. Thành phần thực hiện được là tệp chương trình thực hiện được (các tệp .EXE), là kết quả của liên kết các thành phần nhị phân (liên kết tĩnh hay liên kết động). Thành phần thực hiện được biểu diễn đơn vị thực hiện được chạy trên bộ xử lý (máy tính). Một khi thành phần được tạo lập, ta có thể gộp chúng vào biểu đồ thành phần và vẽ các quan hệ giữa chúng. Giữa các thành phần chỉ có một loại quan hệ phụ thuộc. Kết nối quan hệ giữa các thành phần cho biết một thành phần cần một thành phần khác để có được định nghĩa đầy đủ. Thí dụ, kết nối phụ thuộc cho biết thành phần này phải được dịch trước thành phần kia. Thí dụ khác là với thành phần khả thi thì kết nối phụ thuộc được sử dụng để nhận ra thư viện động nào cần phải có để thành phần khả thi chạy được. 7.1.2 - Biểu tượng thành phần trong Rational Rose Trong Rose có một số biểu tượng để thực hiện thành phần, đó là: Thành phần. Biểu tượng thành phần được sử dụng để biểu diễn mô đun phần mềm có giao diện (hình 7.2a). Trong đặc tả thành phần có xác định kiểu stereotype (ActiveX, Applet, DLL, exe ). SubprogSpec SubprogBody Teân thaønh phaàn a) b) Hình 7.2 Biểu tượng thành phần và chương trình con Đặc tả và thân chương trình con. Đó là loại biểu tượng được sử dụng cho đặc tả (SubprogSpec) và cài đặt của chương trìng con (SubprogBody). Hình 7.2b thể hiện các biểu tượng cho các thành phần này. Chương trình con không chứa định nghĩa lớp. Chương trình chính. Là tệp chứa điểm vào chương trình (hình 7.3b). Thí dụ trongn chương trình C/C++ đó là tệp chứa hàm main() hay trong chương trình Visual C++ thì đó là tệp chứa hàm WinMain(). Phát triển phần mềm bằng UML trang | 156
  21. MainSubprog PackageSpec PackageBody a) b) Hình 7.3 Biểu tượng chương trình chính và gói Đặc tả và thân gói. Gói là cài đặt của lớp. Đặc tả gói (PackageSpec) là tệp header, chứa thông tin về nguyên hàm của lớp. Trong C++, đặc tả gói là tệp với phần mở rộng tên H. Thân gói (PackageBody) chứa mã lệnh của các thao tác của lớp. Trong C++, thân gói là tệp .CPP (hình 7.3b). Các biểu tượng thành phần áp dụng cho các thành phần run-time (các tệp exe, dll và task) như sau: Tệp thư viện động (DLL). Biểu tượng cho tệp DLL như trên hình 7.4a. DLL TaskSpec TaskBody a) b) Hình 7.4 Biểu tượng thư viện động và nhiệm vụ Đặc tả nhiệm vụ và thân. Các biểu tượng này biểu tượng các gói co luồng điều khiển độc lập. Thí dụ, tệp khả thực (exe) được biểu diễn như đặc tả nhiệm vụ (TaskSpec) với mở rộng exe (TaskBody) như trên hình 7.4b. 7.1.3 - Phụ thuộc thành phần Chỉ có một kiểu quan hệ phụ thuộc giữa các thành phần trong biểu đồ loại này. Phụ thuộc thành phần cho rằng một thành phần phụ thuộc vào thành phần khác. Phụ thuộc thành phần được vẽ như hình 7.5. Thaønh phaàn B Thaønh phaàn A Hình 7.5 Phụ thuộc thành phần Trong ví dụ trên hình 7.5 ta thấy thành phần A phụ thuộc thành phần B. Nói cách khác là một vài lớp trong A phụ thuộc một vài lớp trong B. Do vậy, không thể biên dịch A nếu chưa biên dịch Phát triển phần mềm bằng UML trang | 157
  22. B. Tránh phụ thuộc vòng trong biểu đồ loại này. Thí dụ, nếu A phụ thuộc B và B phụ thuộc A thì sẽ không biên dịch được chúng. Do vậy phải loại bỏ phụ thuộc vòng trước khi phát sinh mã trình. Phụ thuộc cho biết cái nào dễ sử dụng lại và cái nào không. Thí dụ trê cho thấy A phụ thuộc B thì không thể sử dụng lại A nếu không sử dụng B, còn B thì dễ được sử dụng lại vì nó không phụ thuộc vào bất cứ thành phần nào 7.1.4 - Biểu đồ thành phần Biểu đồ thành phần là biểu đồ UML hiển thị các thành phần của hệ thống và phụ thuộc giữa chúng. Thí dụ, hình 7.6 là biểu đồ thành phần của hệ thống rút tiền tự động ATM. Trên biểu đồ thành phần ta có thể nhìn thấy mã nguồn và thành phần run-time trong hệ thống. Thí dụ này cho thấy hệ thống có thành phần mã nguồn là các tệp account.h và account.cpp, tệp khả thi là ATMServer.exe. Với biểu đồ này, người phát triển thực hiện dịch, triển khai hệ thống sẽ biết thư viện mã trình nào tồn tại và tệp khả thi (.exe) nào sẽ được sẽ được tạo ra khi mã trình được dịch. Các phụ thuộc thành phần (mũi tên nét đứt) cho biết thành phần sẽ được dịch theo thứ tự nào. Sau khi tạo biểu đồ thành phần thì ta bổ sung phần tử đồ họa thành phần vào chúng. Trong C++, các thành phần hay được dùng nhất là đặc tả gói (Package Specification), thân gói (Package Body) và thành phần thực hiện (Executuon). Như đã trình bày trên đây, biểu tượng Package Specification hoặc Component được sử dụng cho tệp .DLL. Biểu tượng Package Body dành cho tệp CPP. Cũng có thể gắn tài liệu vào thành phần để mô tả mục đích của thành phần hay mô tả các lớp trong thành phần. Account Account ATMServer.exe Hình 7.6 Biểu đồ thành phần Tương tự như lớp, có thể tổ chức các thành phần thành gói. Thông thường tạo gói khung nhìn thành phần cho mỗi gói khung nhìn logíc. Thí dụ, trong hệ thống quản lý bán hàng ta có các gói khung nhìn logic Orders chứa các lớp Order, OrderItem và OrderForm. Do vậy, gói khung nhìn thành phần tương ứng cần phải chứa các thành phần dành cho các lớp Order, OrderItem và OrderForm. Tương tự như các phần tử mô hình khác trong UML, ta có thể bổ sung các đặc tả chi tiết vào mỗi thành phần, chúng bao gồm: Stereotype. Stereotype điều khiển biểu tượng nào sẽ được sử dụng để biểu diễn thành phần. Chúng có thể là một trong các lựa chọn sau: , đặc tả chương trình con, thân chương trình con, chương trình chính, đặc tả gói, thân gói, khả thực, DLL, đặc tả nhiệm vụ và thân nhiệm vụ. Ngoài ra trong Rose còn có stereotype cho ActiveX, Applet, ứng dụng Ta cũng có thể tạo stereotype mới, phù hợp với loại ngôn ngữ lập trình và ứng dụng cụ thể. Ngôn ngữ. Trong Rose có thể gán ngôn ngữ cho từng thành phần. Do vậy có khả năng phát sinh ra các ngôn ngữ khác nhau cho từng thành phần mô hình, thí dụ phát sinh một thành phần mô hình ra C++, một thành phần mô hình khác ra Java Khai báo. Các khai báo (declaration) phụ được gộp vào mã trình cho mỗi thành phần. Các khai báo bao gồm các lệnh phụ thuộc ngôn ngữ để khai báo biến, lớp Lệnh #include của C++ cũng được xem như khai báo. Phát triển phần mềm bằng UML trang | 158
  23. Lớp. Trước khi phát sinh mã trình cho lớp thì phải ánh xạ nó vào thành phần. Điều này cho Rose biết mã trình của lớp sẽ được ghi vào tệp nào. Có thể ánh xạ một hay nhiều lớp vào mỗi thành phần. 7.2 BIỂU ĐỒ TRIỂN KHAI Biểu đồ triển khai mô tả kiến trúc hệ thống phần cứng (nút) khác nhau như bộ xử lý, các thiết bị và các thành phần phần mềm thực hiện nên kiến trúc đó. Nó là mô tả vật lý của tôpô hệ thống, mô tả cấu trúc của các đơn vị phần cứng và phần mềm chạy trên nó. Biểu đồ triển khai chỉ ra toàn bộ các nút trên mạng, kết nối giữa chúng và các tiến trình chạy trên chúng. Nút là đối tượng vật lý (các thiết bị) có tài nguyên tính toán. Chúng có thể là máy tính, máy in, đọc thẻ từ, thiết bị truyền tin Các nút được kết nối thông qua kết hợp giao tiếp. Các nút trao đổi thông điệp hay đối tượng theo đường dẫn kết nối. Kiểu giao tiếp được thể hiện bằng stereotype, chỉ ra thủ tục giao tiếp hay mạng được sử dụng. Biểu đồ triển khai có thể hiển thị các lớp nút hay hiện thực nút. Tương tự như mọi biểu đồ khác, phân biệt giữa lớp và đối tượng cài đặt lớp bằng tên gạch chân. Teminal Maùy chuû Maùy in 1 CSDL > 3 1 1 1 PC * > 1 Coång 1 10 * Hình 7.7 Biểu đồ triển khai của hệ thống đóng/mở cửa Hình 7.7 là thí dụ về biểu đồ triển khai hệ thống điều khiển đóng/mở cửa trong một tòa nhà. Biểu đồ cho thấy hệ thống bao gồm máy chủ nối với các máy tính PC điều khiển đóng/mở cửa ra vào. Biểu đồ chưa xác định tổng số máy tính PC. Nhưng biểu đồ cho thấy một máy tính PC có thể điều khiển nhiều nhất 10 cửa ra vào. Ba máy tính đầu cuối (terminal) được sử dụng để xâm nhập hệ thống. Máy in được nối trực tiếp vào máy tính chủ. Biểu đồ còn thể hiện các giao tiếp giữa các nút khác nhau. Máy chủ và các máy PC kết nối với nhau thông qua giao thức IPX, kết nối máy tính đầu cuối với máy chủ thông qua giao thức TCP/IP. Kết nối giữa các nút còn lại trên biểu đồ chưa xác định. 7.2.1 - Phần tử mô hình của biểu đồ Bộ xử lý (processor). Bộ xử lý là máy xử lý. Các máy chủ (server), trạm làm việc thuộc loại này. Ký pháp trong Rose của bộ xử lý như sau: Phát triển phần mềm bằng UML trang | 159
  24. Chi tiết cho bộ xử lý. Trong đặc tả bộ xử lý có thể bổ sung các thông tin: stereotype, đặc tính và scheduling. Stereotype: Tương tự như thành phần mô hình, sử dụng nó để phân nhóm bộ xử lý. Đặc tính: Là mô tả vật lý của bộ xử lý, thí dụ tốc độ và dung lượng nhớ. Scheduling: Mô tả loại lập biểu thời gian (scheduling) xử lý, bao gồm: Preemptive (tiến trình có mức ưu tiên cao hơn có thể chiếm quyền ưu tiên của các tiến trình có mức ưu tiên thấp hơn), Non Preemptive (các tiến trình không có mức ưu tiên, tiến trình đang thực hiện chỉ dừng khi nó tự kết thúc), Cyclic (chỉ ra chu kỳ điều khiển giữa các tiến trình), Executive (một vài thuật toán tính toán điều khiển scheduling), Manual (tiến trình được người sử dụng điều khiển). Thiết bị. Thiết bị là máy móc hay bộ phận phần cứng không phải là bộ xử lý trung tâm. Thiết bị bao gồm màn hình, máy in Cả thiết bị và bộ xử lý được xem như nút trong mạng. Ký pháp của thiết bị trong UML như sau: Chi tiết thiết bị.Tương tự bộ xử lý, thiết bị cũng có nhiều thông tin chi tiết như stereotype và đặc tính. Sự khác nhau giữa thiết bị và bộ xư lý phụ thuộc mạnh vào quan điểm. Máy tính đầu cuối nối với máy chủ được người sử dụng xem như thiết bị, nhưng đôi khi người khác lại coi nó là bộ xử lý. Kết nối. Kết nối là liên kết vật lý giữa hai bộ xử lý, hai thiết bị hay giữa thiết bị và bộ xử lý. Thông thường, kết nối biểu diễn kết nối mạng vật lý giữa các nút trong mạng. Chúng cũng có thể liên kết Internet giữa các nút. Có thể gán stereotype cho kết nối, đồng thời nó cũng được gán đặc tính nói về chi tiết của kết nối vật lý. 7.2.2 - Tiến trình Tiến trình là luồng thực hiện đơn chạy trong bộ xử lý. Một tệp khả thi được xem là tiến trình. Tiến trình có thể được hiển thị trong biểu đồ triển khai, nếu được hiển thị thì nó được liệt kê ngay dưới bộ xử lý nơi nó chạy. Các tiến trình được gán mức ưu tiên. Nếu bộ xử lý mà trên đó các tiến trình chạy sử dụng scheduling theo mức ưu tiên. Thì mức ưu tiên của tiến trình sẽ được xác định khi nó chạy. 7.3 THỰC HÀNH 7.3.1 - Sử dụng Rational Rose 7.3.1.1 - Tạo lập và hủy bỏ biểu đồ thành phần Biểu đồ thành phần được lập ra trong khung nhìn thành phần theo các bước như sau: 1. Trong Browser, nhấn chuột phải trên gói chứa Component diagram 2. Chọn thực đơn New->Component Diagram 3. Nhập tên cho biểu đồ thành phần mới Hủy bỏ biểu đồ thành phần theo các bước sau: 1. Trong Browser, nhấn chuột phải trên Component diagram Phát triển phần mềm bằng UML trang | 160
  25. 2. Chọn thực đơn Delete 7.3.1.2 - Bổ sung thành phần Bổ sung thành phần vào biểu đồ theo các bước sau: 1. Chọn phím Component từ thanh công cụ 2. Nhấn trên biểu đồ nơi định vẽ thành phần 3. Nhập tên cho thành phần mới Hủy bỏ thành phần khỏi biểu đồ như sau: 1. Nhấn phím phải trên thành phần trong Browser 2. Nhấn các phím Ctrl+D 7.3.1.3 - Bổ sung chi tiết thành phần Gán stereotype như sau: 1. Mở cửa sổ đặc tả trong thành phần mong muốn 2. Chọn bảng General 3. Nhập stereotype vào trường Stereotype. Gán ngôn ngữ như sau: 1. Mở cửa sổ đặc tả thành phần mong muốn 2. Chọn bảng General 3. Nhập ngôn ngữ trong cửa sổ Language. Để ánh xạ lớp cho thành phần: 1. Mở cửa sổ đặc tả thành phần mong muốn 2. Chọn bảng Realizes 3. Nhấn phím phải trên lớp để ánh xạ 4. Chọn thực đơn Assign. 7.3.1.4 - Gắn phụ thuộc thành phần Bổ sung phụ thuộc thành phần như sau: 1. Chọn biểu tượng Dependency trên thanh công cụ 2. Di đường phụ thuộc từ thành phần Client đến thành phần Supplier. 7.3.1.5 - Tạo lập biểu đồ triển khai Để mở biểu đồ triển khai ta làm như sau: 1. Nhấn đúp phím chuột trên khung nhìn triển khai trong brower 2. Rose sẽ mở Deployment diagram cho mô hình. Phát triển phần mềm bằng UML trang | 161
  26. 7.3.1.6 - Bổ sung và bãi bỏ bộ xử lý (proccessor) Bổ sung bộ xử lý vào biểu đồ sau: 1. Chọn phím Processor từ thanh công cụ 2. Nhấn trên biểu đồ triển khai để đặt bộ xử lý 3. Nhập tên cho bộ xử lý. Hủy bỏ bộ xử lý khỏi biểu đồ như sau: 1. Chọn bộ xử lý trong biểu đồ 2. Nhấn phím Delete Hủy bỏ bộ xử lý khỏi mô hình như sau: 1. Chọn bộ xử lý trong Deloyment diagram 2. Nhấn phím Ctrl+D. 7.3.1.7 - Bổ sung chi tiết cho bộ xử lý Để gán stereotype cho bộ xử lý ta làm như sau: 1. Mở cửa sổ đặc tả bộ xử lý mong muốn 2. Chọn bảng General (hình 7.8) Hình 7.8 Cửa sổ đặc tả bộ xử lý 3. Nhập stereotype vào cửa sổ Stereotype Bổ sung đặc tính và scheduling cho bộ xử lý được thực hiện tương tự như trên nhưng lần này chọn bảng Detail (hình 7.9) Phát triển phần mềm bằng UML trang | 162
  27. Hình 7.9 Bổ sung đặc tính 7.3.1.8 - Bổ sung thiết bị Bổ sung thiết bị vào biểu đồ triển khai như sau: 1. Chọn phím Device từ thanh công cụ 2. Nhấn trên biểu đồ triển khai để đặt thiết bị 3. Nhập tên cho thiết bị mới 7.3.1.9 - Bổ sung chi tiết thiết bị Thực hiện bổ sung chi tiết thiết bị tương tự bổ sung chi tiết cho bộ xử lý trên đây. 7.3.1.10 - Bổ sung kết nối Bổ sung kết nối vào biểu đồ triển khai như sau: Chọn phím Connection từ thanh công cụ Nhấn trên nút trong biểu đồ triển khai để nối Di đường kết nối đến nút khác. 7.3.1.11 - Bổ sung chi tiết kết nối Có thể gán stereotype cho kết nối như sau: 1. Mở cửa sổ đặc tả cho kết nối mong muốn Phát triển phần mềm bằng UML trang | 163
  28. 2. Chọn bảng General 3. Nhập stereotype trong hộp Stereotype 7.3.1.12 - Bổ sung và hủy bỏ tiến trình Trình tự bổ sung tiến trình như sau: 1. Nhấn phím phải chuột trên bộ xử lý mong muốn trong Browser 2. Chọn thực đơn New->Process 3. Nhập tên cho tiến trình mới Trình tự hủy bỏ tiến trình mới như sau: 1. Nhấn phím phải chuột trên tiến trình mong muốn trong Browser 2. Chọn thực đơn Delete. 7.3.2 - Phát sinh mã trình bằng Rose Có sáu bước cơ bản để phát sinh mã trình, bao gồm: 1. Kiểm tra mô hình 2. Tạo lập thành phần 3. Thực hiện ánh xạ lớp vào thành phần 4. Đặt thuộc tính phát sinh mã trình 5. Chọn lớp, thành phần hày gói 6. Phát sinh mã trình. Không phải ngôn ngữ nào cũng cần đầy đủ các bước trên. Thí dụ C++ không cần bước hai, hay không ngôn ngữ nào cũng bắt buộc hiện bước một. Tuy vậy, khuyến cáo là nên thực hiện đầy đủ năm bước đầu trước khi phát sinh mã trình. 7.3.2.1 - Bước 1: Kiểm tra mô hình Rose có chức năng kiểm tra mô hình độc lập ngôn ngữ để bảo đảm mô hình là phù hợp trước khi phát sinh mã trình. Chúng ta nên thực hiện chức năng này trước khi phát sinh mã trình. Nó có thể tìm ra tính không thống nhất và lỗi trong mô hình, chúng ảnh hưởng đến sai xót trong mã trình. Trình tự thực hiện như sau: 1. Chọn Tools-> Check Model 2. Lỗi mô hình sẽ được hiển thị trong cửa sổ log. Các lỗi hay xảy ra là thông điệp trong biểu đồ tương tác không được ánh xạ vào thao tác hay đối tượng trong biểu đồ tương tác không được ánh xạ vào lớp. Chú ý các đối tượng trong biểu đồ trình tự và biểu đồ cộng tác, mỗi hợp chữ nhật phải có tên đối tượng, dấu :, tên lớp. Vi phạm (violation) xâm nhập. Thực đơn Check Model sẽ tìm ra hầu hết tính không chắc chắn và các vấn đề xảy ra trong mô hình. Thực đơn Access Violation sẽ tìm ra vi phạm khi có quan hệ giữa hai lớp trong hai gói khác nhau, nhưng không có quan hệ giữa hai gói. Thí dụ, nếu lớp Order trong gói Entities có quan hệ với lớp OrderManager trong gói Control thì phải có quan hệ giữa hai gói Entities và Control. Phát triển phần mềm bằng UML trang | 164
  29. Tìm kiếm vi phạm xâm nhập như sau: 1. Chọn Report-> Show Access Violations 2. Rose sẽ hiển thị vi phạm xâm nhập trong cửa sổ. Kiểm tra ngôn ngữ. Để thực hiện kiểm tra ngôn ngữ hãy chọn thực đơn Tools>Check Model. Kiểm tra này cho biết lỗi xảy ra như nhiều lớp public lại đặt vào một đơn vị dịch. 7.3.2.2 - Bước 2: Tạo lập thành phần Bước thứ hai trong tiến trình phát sinh mã lệnh là tạo lập các thành phần để chứa các lớp. Có nhiều loại thành phần như các tệp mã nguồn, tệp exe, tệp thư viện, ActiveX, applets Trước khi phát sinh mã trình phải ánh xạ các lớp vào thành phần mã nguồn tương ứng. Một khi các thành phần đã được tạo lập, ta có gắn các phụ thuộc giữa chúng trong biểu đồ thành phần. Các phụ thuộc giữa các thành phần là phụ thuộc biên dịch trong hệ thống. Nếu phát sinh mã trình C++, Java, VisualBasic thì bước này phải được thực hiện. Để tạo lập thành phần ta làm như sau: 1. Mở Comonent diagram 2. Sử dụng biểu tượng Component trong thanh công cụ để bổ sung thành phần mới vào biểu đồ. 7.3.2.3 - Bước 3: Ánh xạ lớp vào thành phần Mỗi thành phần mã nguồn biểu diễn tệp mã nguồn cho một vài lớp. Trong C++, mỗi lớp được ánh xạ đến hai thành phần mã nguồn: tệp header và tệp chứa thân lớp. Bước thứ ba này thực hiện ánh xạ mỗi lớp vào các thành phần thích ứng. Với C++ thì bước này là tùy chọn. Rose có thể phát sinh mã trình cho nó mà không đi qua bước này. Để ánh xạ lớp vào thành phần ta làm như sau: 1. Nhấn phím phải trên thành phần trong biểu đồ thành phần hay browser. 2. Chọn open Specification 3. Chọn bảng Realizes 4. Nhấn phím phải trên lớp (những lớp) thích úng và chọn Assign 5. Browser sẽ chỉ ra tên thành phần trong dấu > sau tên lớp trong Logical View. 7.3.2.4 - Bước 4: Đặt các thuộc tính cho phát sinh mã trình. Có nhiều thuộc tính cho phát sinh mã nguồn có thể gán cho lớp, thuộc tính và các thành phần khác nhau của mô hình. Các thuộc tính này điều khiển mã trình sẽ được phát sinh như thế nào. Rose cung cấp bộ thuộc tính mặc định. Thí dụ, một đặc tính cho phát sinh mã trình của thuộc tính C++ là GenerateOperation, nó điều khiển các Get( ) sẽ được phát sinh cho thuộc tính này hay không. Trước khi phát sinh mã trình nên xem xét đặc tính phát sinh mã trình và thay đổi chúng nếu cần. Để quan sát đăc tính phát sinh mã trình hãy chọn Tools>Options, sau đó chọn bảng ngôn ngữ thích ứng (hình 7.10). Phát triển phần mềm bằng UML trang | 165
  30. Hình 7.10 Đặc thuộc tính Từ cửa sổ type ta có thể chọn thành phần mô hình như Class, Attribute, Operation Mỗi ngôn ngữ có thành phần mô hình khác nhau. Hình 7.11 là chọn thành phần Attribute để thay đổi đặc tính. Phát triển phần mềm bằng UML trang | 166
  31. Hình 7.11 Đặt thuộc tính (tiếp) Mọi thay đổi tại đây ảnh hưởng đến toàn bộ mô hình. Thí dụ nếu chọn đặc tính lớp là GenerateDefaultConstructor thì nó sẽ tác động đến mọi đối tượng trong mô hình. Nếu chọn đặc tính phát sinh mã trình cho một thành phần như lớp, thuộc tính hãy mở cửa sổ Specification cho nó. Chọn bảng ngôn ngữ (C++) và thay đổi đặc tính tại đây. Mọi thay đổi trong cửa sổ này chỉ tác động đến một lớp mà thôi. Tập đặc tính tạm thời. Thay vì thay đổi trực tiếp tập đặc tính mặc định, ta có thể tạo lập tập đặc tính tạm thời để sử dụng. Để lập tập đặc tính tạm thời ta chọn thực đơn Tools>Model Properties>Edit>C++ tab>>Edit Set, sau đó nhấn phím Clone trong cửa sổ Clone the Property Set. Rose sẽ yêu cầu nhập tên cho tập mới này. Mở điều khiển Set trong Clone the Property Set để thay đổi thuộc tính nào cần thay đổi (hình 7.12). Tập đặc tính này sẽ không ảnh hưởng đến tập đặc tính mặc định. Phát triển phần mềm bằng UML trang | 167
  32. Hình 7.12 Đặc tính tạm thời Bỏ tập đặc tính tạm thời. Khi không còn cần đến tập đặc tính tạm thời, thì có thể bãi bỏ nó khỏi mô hình theo trình tự sau: chọn thực đơn Tools>Options; chọn bảng ngôn ngữ thích hợp; chọn tập đặc tính nhái trong hộp danh sách Set; nhấn Remove để bãi bỏ chúng. 7.3.2.5 - Bước 5: Chọn lớp, thành phần hay gói Khi phát sinh mã trình ta có thể phát sinh cho lớp, thành phần hay gói vào cùng thời điểm. Mã trình có thể phát sinh từ biểu đồ hay browser. Nếu phát sinh mã từ gói, thì có thể chọn gói Logical view trên biểu đồ lớp hay chọn gói Component view trên biểu đồ thành phần. Cũng có thể phát sinh mã trình đồng thời cho nhiều lớp, thành phần hay gói. 7.3.2.6 - Bước 6: Phát sinh mã trình Nếu cài đặt Rose Enterprise thì có thể lựa chọn nhiều ngôn ngữ để phát sinh mã. Để hiển thị hay ẩn các lựa chọn, hãy chọn Add-Ins>Add-In Manager trong thực đơn Tools. Hộp thoại lựa chọn sẽ xuất hiện như hình 7.13. Phát triển phần mềm bằng UML trang | 168
  33. Hình 7.13 Quản lý mã đích Khi chọn lớp hay thành phần trên biểu đồ, hãy chọn ngôn ngữ thích ứng trong thực đơn phát sinh mã trình. Nếu có lỗi xảy ra trong quá trình phát sinh mã trình, chúng được hiển thị trên cửa sổ log. 7.3.2.7 - Cái gì đã được phát sinh? Khi phát sinh mã trình, Rose tập hợp các thông tin từ Logical view và Component view của mô hình. Thực tế là không có công cụ mô hình hóa nào phát sinh mã trình đầy đủ. Rose cũng chỉ phát sinh khung chương trình như sau: Class. Mọi lớp trong biểu đồ sẽ được phát sinh mã trình. Attributes. Mã trình sẽ có thuộc tính của lớp, bao gồm miền tác động, loại dữ liệu và giá trị mặc định. Operation signatures. Các thao tác được khai báo trong mã trình kèm theo tham số, kiểu dữ liệu tham số và kiểu giá trị cho lại các thao tác. Relationships. Một vài quan hệ trong mô hình sẽ phát sinh thuộc tính khi phát sinh mã. Components. Mỗi thành phần sẽ được cài đặt trong tệp mã nguồn thích hộp. Khi đã phát sinh tệp, hai bước còn lại là: 1) người phát triển thu nhận tệp và lập trình các thao tác của lớp; 2) thiết kế giao diện đồ họa. Rational Rose của Rational Software Corporation không hướng vào thiết kế giao diện đồ họa. Hãy sử dụng ngôn ngữ lập trình để thiết kế màn hình và báo cáo. Khi phát sinh mã trình, Rose sử dụng cấu trúc gói trong Component view để tạo ra các danh mục thích ứng. Mặc định, danh mục gốc cho mã trình phát sinh là nơi ứng dụng Rose. Có thể thay đổi danh mục thông qua đặc tính phát sinh mã nguồn. Nếu không có cấu trúc thành phần, Rose sẽ sử dụng cấu trúc gói trong Logical view để tạo lập cấu trúc danh mục. Khi gặp khó khăn chuyển đổi từ mô hình sang mã trình, hãy kiểm tra kỹ lưỡng phiên bản Rose cài đặt trên máy tính có phù hợp yêu cầu hay không. Rose có một số phiên bản chính như sau: Phát triển phần mềm bằng UML trang | 169
  34. • Rose Modeler. Cho phép tạo lập mô hình nhưng không cho khả năng phát sinh mã trình hay chuyển đổi ngược từ mã trình thành mô hình. • Rose Professional. Cho phép phát sinh mã trình cho một loại ngôn ngữ. • Rose Enterprise. Cho phép phát sinh mã trình trong nhiều ngôn ngữ khác nhau như C++, Java, Visual Basic, lược Oracle8 7.3.3 - Rational Rose và Visual C++ Rational Rose là công cụ hiển thị giúp phân tích và thiết kế hệ thống phần mềm. Visual C++ là môi trường lập trình tích hợp (Intergrated Development Environmet– IDE ) mạnh cho phép người phát triển xây dựng ứng dụng bằng C++. Hai công cụ này làm việc chặt chẽ với nhau để xây dựng ứng dụng phần mềm có chất lượng tốt. Thông thường, trong môi trường phát triển phần mềm, các yêu cầu được thu thập bằng UC và các tài liệu khác, chúng được mô hình hóa bằng mô hình UC, sau đó xây dựng các mô hình phân tích và thiết kế. Mô hình thiết kế là trừu tượng hệ thống, được ánh xạ trực tiếp thành mã trình. Sau khi có mã trình là các công việc dịch, thực hiện và gỡ lỗi. Trong khi Rose là công cụ quản lý các mô hình thì Visual C++ là công cụ quản lý mã trình và thực hiện nó. Quá trình chuyển tiếp từ mô hình sang mã trình và qui trình ngược lại từ mã trình sang mô hình được gọi là RTE (Round Trip Engineering). Khả năng RTE là chìa khóa thắng lợi của dự án phần mềm. Khi người cài đặt phát hiện lỗi thiết kế và sửa nó trong mã trình thì sự thay đổi này sẽ được tự động phản ánh ngược lại mô hình. Hơn nữa, việc thay đổi mô hình sẽ được phản ánh trong mã trình đang có. Khả năng này đảm bảo tính đồng bộ giữa mã trình và mô hình. Hình 7.14 Nhập thư viện MFC vào mô hình Để hỗ trợ ứng dụng MFC (Microsoft Foundation Class), Rose có khả năng chuyển đổi ngược toàn bộ thư viện MFC. Hãy sử dụng thực đơn Tools/Visual C++/ Quick Import MFC 6.0 (hình 7.14) để nhập chúng vào mô hình. Gói mới với tên MFC được bổ sung vào Logical view. Người sử dụng có thể sử dụng các lớp MFC này để thiết kế chi tiết hệ thống. Mỗi thành phần mô hình được kết hợp vào dự án (project) khác nhau của Visual C++, hơn nữa Visual C++ Project phải được tạo lập trước khi gán cho thành phần mô hình. Phát triển phần mềm bằng UML trang | 170
  35. Để sử dụng lợi thế giữa Rose và Visual C++ thì trên máy tính phải có sẵn hai phần mềm sau: 1. Visual C++ 6.0 2. Phiên bản Rational Rose Enterprise hay Rational Rose Professional C++ Edition. Nếu Visual C++ chưa sẵn sàng trong Rational Rose thì hãy thực hiện các bước sau: 1. Khởi động Rational Rose 2. Chọn thực đơn Add-Ins> Add-In Manager 3. Chọn VC++ add-in 4. Nhấn phím OK. Đặt ngôn ngữ mặc định cho Rational Rose: 1. Chọn thực đơn Tools > Options 2. Chọn bảng Notation 3. Chọn hộp danh sách Default Language 4. Chọn Visual C++ 5. Nhấn phím OK. Hình 7.15 Biểu đồ thành phần của hệ thống đơn hàng 7.3.4 - Thí dụ: Hệ thống bán hàng (tiếp theo) Phần này thực hành tạo lập biểu đồ thành phần cho hệ thống quản lý bán hàng. Trong chương trước ta đã tìm ra các lớp cần cho UC New Order. Sau khi hoàn chỉnh phân tích và thiết kế, ta có thể xây dựng biểu đồ thành phần. Giả sử ta sẽ sử dụng ngôn ngữ lập trình C++ để cài đặt hệ thống. Biểu đồ thành phần chính tập trung vào các gói của thành phần được chỉ ra trên hình 7.15. Phát triển phần mềm bằng UML trang | 171
  36. Hình 7.16 Biểu đồ thành phần gói Entities Hình 7.16 bao gồm các thành phần trong gói Entities. Các thành phần này chứa các lớp trong gói Entities trong khung nhìn logic. Hình 7.17 Biểu đồ thành phần gói Control Hình 7.17 bao gồm các thành phần trong gói Control. Các thành phần này chứa các lớp trong gói Control trong khung nhìn logic. Hình 7.18 bao gồm các thành phần trong gói Boundaries. Các thành phần này chứa các lớp trong gói Boundaries trong khung nhìn logic. Phát triển phần mềm bằng UML trang | 172
  37. Hình 7.18 Biểu đồ thành phần gói Boundaries Hình 7.19 chỉ ra toàn bộ các thành phần trong hệ thống. Biểu đồ này cho toàn bộ phụ thuộc giữa các thành phần trong hệ thống. 7.3.4.1 - Lập các gói thành phần 1. Nhấn phím phải trên Component view trong brower 2. Chọn New > Package 3. Đặt tên gói là Entities 4. Lặp bước 1-3 cho các gói Boundaries và Control 7.3.4.2 - Bổ sung gói vào biểu đồ thành phần Main Mở biểu đồ thành phần Main Di các gói Entities, Boundaries và Control từ brower vào Main Component diagram. Phát triển phần mềm bằng UML trang | 173
  38. OrderClientExe OrderOption OrderDelail OrderMgr OrderServerExe Order TransactionMgr OrderItem Hình 7.19 Biểu đồ thành phần của hệ thống đơn hàng 7.3.4.3 - Vẽ các phụ thuộc gói 1. Chọn phím Dependency từ thanh công cụ 2. Nhấn trên gói Boundaries trong Main Component diagram 3. Di phụ thuộc đến gói Control 4. Thực hiện tương tự để vẽ các phụ thuộc cho các gói còn lại. 7.3.4.4 - Bổ sung thành phần cho các gói và vẽ các phụ thuộc 1. Nhấn đúp vào gói Entities trong biểu đồ thành phần Main. 2. Chọn phím Package specification (đặc tả gói) trên thanh công cụ 3. Đặt đặc tả gói vào biểu đồ 4. Nhập tên OrderItem cho đặc tả gói 5. Lặp các bước 2-4 để bổ sung đặc tả gói Order 6. Chọn phím Package Body (thân gói) từ thanh công cụ 7. Đặt thân gói vào biểu đồ 8. Nhập tên OrderItem cho thân gói Phát triển phần mềm bằng UML trang | 174
  39. 9. Lặp các bước 6-8 để bổ sung thân gói Order 10. Chọn phím Dependency từ thanh công cụ 11. Nhấn phím chuột trên thân gói OrderItem 12. Di đường phụ thuộc tới đặc tả gói OrderItem 13. Lặp để vẽ các phụ thuộc còn lại 14. Làm tương tự cho cách thành phần và phụ thuộc sau đây: Với gói Boundaries • Đặc tả gói OrderOptions • Thân gói OrderOptions • Đặc tả gói OrderDetail • Thân gói OrderDetail Các phụ thuộc trong gói Boundaries • Thân gói OrderOptions đến đặc tả gói OrderOptions • Thân gói OrderDetail đến đặc tả gói OrderDetail • Đặc tả gói OrderOptions đến đặc tả gói OrderDetail Với gói Control • Đặc tả gói OrderMgr • Thân gói OrderMgr • Đặc tả gói TransactionMgr • Thân gói TransactionMgr Các phụ thuộc trong gói Control • Thân gói OrderMgr đến đặc tả gói OrderMgr • Thân gói TransactionMgr đến đặc tả gói TransactionMgr • Đặc tả gói OrderMgr đến đặc tả gói TransactionMgr 7.3.4.5 - Tạo biểu đồ thành phần System 1. Nhấn phím phải trên Component View trong browser 2. Chọn thực đơn New>Component Diagram 3. Đặt tên biểu đồ mới là System 4. Nhấn đúp trên biểu đồ thành phần System 7.3.4.6 - Đặt các thành phần vào biểu đồ thành phần System 1. Nhấn đặc tả gói Order trong gói Entities 2. Di đặc tả gói Order vào biểu đồ 3. Lặp để đặt đặc tả gói OrderItem vào biểu đồ 4. Làm tương tự để đặt các thành phần sau đây vào biểu đồ. Phát triển phần mềm bằng UML trang | 175
  40. Trong gói thành phần Boundaries: • Đặc tả gói OrderOptions • Đặc tả gói OrderDetail Trong gói thành phần Control: • Đặc tả gói OrderMgr • Đặc tả gói TransactionMgr • Đặc tả nhiệm vụ OrderClientExe • Đặc tả nhiệm vụ OrderServerExe 5. Chọn Task Specification trên phím công cụ 6. Đặt đặc tả nhiệm vụ vào biểu đồ và đặt tên là OrderClientExe 7. Lặp cho đặc tả nhiệm vụ OrderServerExe 7.3.4.7 - Bổ sung các phụ thuộc khác vào biểu đồ thành phần System 1. Chọn phím Depedency từ thanh công cụ 2. Nhấn trên đặc tả gói OrderDetail, di đến đặc tả gói OrderMgr. 3. Lặp để bổ sung các phụ thuộc sau: • Đặc tả gói OrderMgr đến đặc tả gói Order • Đặc tả gói TransactionMgr đến đặc tả gói OrderItem • Đặc tả gói TransactionMgr đến đặc tả gói OrderOptions • Đặc tả nhiệm vụ OrderClientExe đến đặc tả gói OrderOptions • Đặc tả nhiệm vụ OrderServerExe đến đặc tả gói OrderMgr Ánh xạ các lớp vào thành phần: 1. Định vị lớp Order trong gói Entities trong khung nhìn logic của browser. 2. Di nó đến đặc tả gói thành phần Order trong Component view, có nghĩa là ánh xạ lớp Order vào đặc tả gói thành phần Order. 3. Di lớp Order vào thân gói thành phần Order trong Component view (có nghĩa là ánh xạ lớp Order vào thân thành phần Order). 4. Lặp lại để ánh xạ các lớp sau đây vào thành phần: • Lớp OrderItem vào đặc tả gói OrderItem • Lớp OrderItem vào thân gói OrderItem • Lớp OrderOptions vào đặc tả gói OrderOptions • Lớp OrderOptions vào thân gói OrderOptions • Lớp OrderDetail vào đặc tả gói OrderDetail • Lớp OrderDetail vào thân gói OrderDetail • Lớp OrderMgr vào đặc tả gói OrderMgr • Lớp OrderMgr vào thân gói OrderMgr Phát triển phần mềm bằng UML trang | 176
  41. • Lớp TransactionMgr vào đặc tả gói TransactionMgr • Lớp TransactionMgr vào thân gói TransactionMgr 7.3.4.8 - Lập biểu đồ triển khai Phần này tạo lập biểu đồ triển khai cho hệ thống xử lý đơn hàng. Biểu đồ hoàn thiện được thể hiện trên hình 7.20. Bổ sung nút vào biểu đồ triển khai theo các bước sau đây: Nhấn đúp trên Deployment view trong browser để mở biểu đồ triển khai Data Server Application Printer OrderServerExe Server Client Client Workstation #2 Workstation #2 Hình 7.20 Biểu đồ triển khai của hệ thống Xử lý đơn hàng 1. Chọn phím Processor từ thanh công cụ, 2. Nhấn trên biểu đồ để vẽ bộ xử lý 3. Nhập tên Database Server cho bộ xử lý 4. Lặp bước 2-4 để bổ sung các biểu đồ sau: • Application Server • Client Workstation #1 • Client Workstation #2 5. Chọn phím Device từ thanh công cụ 6. Nhấn phím chuột trên biểu đồ để vẽ thiết bị 7. Nhập tên thiết bị là Printer 7.3.4.9 - Bổ sung kết nối 1. Chọn phím Connection từ thanh công cụ 2. Nhấn trên bộ xử lý Database Server 3. Di đường kết nối với bộ xử lý Application Server Phát triển phần mềm bằng UML trang | 177
  42. 4. Lặp để vẽ các kết nối sau: • Application Server đến bộ xử lý Client Workstation #1 • Application Server đến bộ xử lý Client Workstation #2 • Application Server đến thiết bị Printer 7.3.4.10 - Bổ sung tiến trình 1. Nhấn phím phải trên bộ xử lý Application Server trong Browser 2. Chọn thực đơn New>Process 3. Nhập tên tiến trình OrderServerExe 4. Lặp các bước 1-3 để bổ sung các tiến trình sau: • OrderClientExe cho bộ xử lý Client Workstation #1 • OrderClientExe cho bộ xử lý Client Workstation #2 7.3.4.11 - Hiển thị tiến trình 1. Nhấn phím phải trên tiến trình Application Server 2. Chọn Show Processes từ thực đơn 3. Lặp các bước 1-2 để hiển thị tiến trình của các bộ xử lý sau: • Bộ xử lý Client Workstation #1 • Bộ xử lý Client Workstation #2 7.3.4.12 - Phát sinh mã trình Visual C++ Bổ sung thân gói vào biểu đồ thành phần hệ thống trong Component view: 1. Mở System Component Diagram 2. Chọn thân gói Order trong Entities từ browser 3. Di thân gói Order tới System Component Diagram 4. Lặp lại các bước 2-3 cho các thành phần sau: a. Thân gói OrderItem trong Entities b. Thân gói OrderOptions trong Boundaries Phát triển phần mềm bằng UML trang | 178
  43. OrderClientExe OrderOptions OrderDail OrderDetail OrderOptions OrderMgr OrderServerExe OrderItem Order Order OrderMgr OrderItem TransactionMgr TransactionMgr Hình 7.21 Biểu đồ thành phần của hệ thống nhập đơn hàng c. Thân gói OrderDetail trong Boundaries d. Thân gói Transaction trong Control e. Thân gói OrderMgr trong Control Biểu đồ thành phần hệ thống nhập đơn hàng như trên hình 7.21. Đặt ngôn ngữ phát sinh là Visual C++ 1. Mở Component Specification của thành phần Order trong gói thành phần Entities Phát triển phần mềm bằng UML trang | 179
  44. 2. Chọn ngôn ngữ Visual C++ 3. Lặp lại bước 1-2 cho các thành phần sau: a. Entities: Thân gói Order b. Entities: Đặc tả gói OrderItem c. Entities: Thân gói OrderItem d. Boundaries: Đặc tả gói OrderOptions e. Boundaries: Thân gói OrderOptions f. Boundaries: Đặc tả gói OrderDetail g. Boundaries: Thân gói OrderDetail h. Control: Đặc tả gói TransactionMgr i. Control: Thân gói TransactionMgr j. Control: Đặc tả gói OrderMgr k. Control: Thân gói OrderMgr l. Đặc tả nhiệm vụ OrderClientExe m. Đặc tả nhiệm vụ OrderServerExe. Phát sinh mã trình Visual C++ được thực hiện như sau: 1. Mở biểu đồ System Component 2. Chọn toàn bộ đối tượng trong biểu đồ System Component 3. Chọn Tools > Visual C++ > Update Code. Trên màn hình sẽ xuất hiện hộp thoại cho phép chọn thành phần hay lớp sẽ chuyển sang Visual C++ (hình 7.22). Các tệp mã trình mới sẽ được gán vào tệp Project nào đó của Visual C++. Nếu không sử dụng tệp Project nào có sẵn thì phải tạo tệp mới. Phát triển phần mềm bằng UML trang | 180
  45. Hình 7.22 Chọn thành phần hay lớp để chuyển sang Visual C++ Hình 7.23 Tạo lập Project trong Visual C++ 6.0 1. Nhấn phím chuột trên thành phần Order trong cửa sổ Component in model 2. Chọn Yes để gán thành phần vào VC++ Project Phát triển phần mềm bằng UML trang | 181
  46. 3. Nhấn phím của cửa sổ Workspace File (Optional) để xuất hiện hộp thoại Select a VC++ Project File 4. Nhấn đúp trên biểu tượng New Project trong cửa sổ New. Cửa sổ New của Microsoft Visual C++ xuất hiện. Lựa chọn các thuộc tính cho Visual C++ cho phù hợp. Một thí dụ chọn lựa như trên hình 7.23 5. Nhấn phím OK > Finish để trở về Rational Rose 6. Nhấn phím OK > OK để trở về hộp thoại code Update Tool (hình 7.22) 7. Nhấn phím lần nữa trên thành phần Order trong cửa sổ Components in Model 8. Thực hiện tương tự cho các thành phần còn lại trong cửa sổ Components in Model. Nhưng lần này chọn thuộc tính bổ sung vào Project hiện hành. 9. Nhấn phím OK để Rational Rose tự động phát sinh mã trình Visual C++ cho các thành phần đã đánh dấu 10. Mở Microsoft Visual C++ để bổ sung các mã trình cho lớp và xây dựng các lớp giao diện người sử dụng. Dưới đây là hai tệp thí dụ được Rational Rose phát sinh từ mô hình UML. Tệp Order.cpp //Copyright (C ) 1991- 1999 Rational Software Corporation- #include “stdafx.h” #include “Order.h” //##Modelld=3A77E3CD0280 Boolean Order::Create() { //TODO:Add your specialized code here //NOTE:Requires a correct return value to compile. } //##Modelld=3A77E3E603316 Boolean Order::SetInfo(Integer OrderNum, String Customer, Date OrderDate, Date FillDate) { //TODO:Add your specialized code here. //NOTE:Requires a correct return value to compile. } //##Modelld=3A77E4E0230 String Order::GetInfo() { //TODO:Add your specialized code here. //NOTE:Requires a corrct return value to compile. } Tệp Order.h //Copyright (C) 1991-1999 Rational Software Corporation #if defined (_MSC_VER) &&(_MSC_VER >=1000) Phát triển phần mềm bằng UML trang | 182
  47. #pragma once #endif #ifndef_INC_ORDER_3A77E11400C8_INCLUDED #define_INC_ORDER_3A77E11400C8_INCLUDED //##Modelld=3A77E11400C8 class Order { pubbic: //##Modelld=3A7F695F019A OrderItem* theOrderItem; //##ModelId=3A77E3CD0280 Boolean Create(); //##ModelId=3A77E3E60316 Boolean SetInfo(Integer OrderNum, String Customer, Date OrderDate, Date FillDate); //##ModelId=3A77E4E0230 String GetInfo(); private: //##ModelId=3A7E13F9038E Integer OrderNumber; //ModelId=3A7E14260122 String CustomerName: //##ModelId=3A7E14470208 Date OrderDate; //##ModelId=3A7E145303D4 Date OrderFillDate; }; #endif /*_INC_ORDER_3A77E11400C8_INCLUDED*/ Phát triển phần mềm bằng UML trang | 183
  48. CHƯƠNG 8 VÍ DỤ ÁP DỤNG Trong các thư viện truyền thống, thủ thư phải làm việc vật vả với khối lượng lớn giấy tờ, và độc giả rất vất vả để tìm ra quyển sách mà họ quan tâm. Do công nghệ phần mềm và đặc biệt Internet phát triển nhanh, khái niệm mới, thư viện điện tử, đã xuất hiện. Loại thư viện này đã cho nhiều lợi ích như khả năng xâm nhập từ mọi nơi trên thế giới, khả năng tìm kiếm sách, tạp chí, các tiệp đa phương tiện một cách nhanh chóng Chương này có sử dụng một số thí dụ trong tài liệu [KALA01] để trình bày một trong những cách ứng dụng hiệu quả UML vào phân tích, thiết kế hệ thống thư viện điện tử. Hệ thống thư viện điện tử được mô tả trong chương này được xem như bài học thực nghiệm (Case Study) chứ chưa phải là một ứng dụng hoàn chỉnh. 8.1 KHẢO SÁT TIẾN TRÌNH TÁC NGHIỆP Các công việc của một thư viện điện tử được làm rõ dần dần thông qua đối thoại giữa phân tích viên và khách hàng, người đặt hang xây dựng hệ thống. Hãy xem xét kỹ đoạn hội thoại giữa họ được mô tả vắn tắt dưới đây. Phân tích viên: Độc giả ci đến đâu trong thư viện và để làm những việc gì? Khách hàng: Độc giả đi đến hang lang của thư viện để tìm thông tin về tài liệu muốn mượn. Sau khi đã tìm thấy sách (tạp chí) để mượn, độc giả đến giá sách (tạp chí) để lấy sách (tạp chí) Phân tích viên: Độc giả tìm kiếm những thông tin gì? Khách hàng: Thông tin chính về sách hay tài liệu và về tác giả của tài liệu được sắp theo thứ tự abc. Các thông tin này được ghi trong phích và đặt trong các hộp khác nhau hoặc nó được truy cập từ máy tính đặt tại hành lang. Phân tích viên: CSDL của các thông tin này để ở đâu Khách hàng: CSDL được lưu trong máy của mạng LAN, còn các máy đầu cuối được đặt trong thư viện Phân tích viên: Có thể tìm tài liệu theo loại dữ liệu nào? Khách hàng: Dữ liệu để tìm sách và tạp chí tương tự nhau, bao gồm số xuất bản (ISBN), tên, năm xuất bản, nhà xuất bản. Nhưng sách còn có loại dữ liệu khác như tác giả, thể loại và tạp chí có tập và lĩnh vực. Phân tích viên: Có những loại sách và tạp chí nào trong thư viện? Khách hàng: Ngoài sách và tạp chí dưới dạng giấy trong còn có dưới dạng điện tử. Các tài liệu điện tử được lưu trong CSDL của máy chủ Phân tích viên: Ai quản trị khối lượng lớn tài liệu và dữ liệu điện tử này? Khách hàng Nhân viên thư viện. Phân tích viên: Đến nay đã có thể thấy rõ ràng rằng mỗi độc giả đều có quyền tìm kiếm tài liệu trên máy tính để mượn. Có thể đọc ngay sách hay tạp chí lưu trữ dưới dạng số. Có thể mượn sách hay tạp chí trong. Bây giờ thảo luận về tiến trình mượn sách. Khách hàng: Sau khi tìm ra tài liệu mượn thì bất kỳ ai có thẻ thư viện đều có thể mượn tài liệu. Có thể mượn tài liệu in tại bàn cho mượn của thư viện. Nếu còn quyển sách hay tập tạp chí trong thư viện thì thủ thư đưa cho độc giả. Phát triển phần mềm bằng UML trang | 184
  49. Phân tích viên: Vậy, có hai trường hợp xảy ra, đó là còn và hết sách (tạp chí) trong thư viện? Khách hàng: Nếu hết tài liệu thì độc giả có thể đặt mượn trước; khi nào có tài liệu thì thư viện sẽ thông báo cho độc giả. Độc giả phải đến thư viện để mượn. Chú ý rằng tài liệu này sẽ chỉ dành cho độc giả đã đăng ký trước trong vòng hai tuần lễ kể từ ngày thông báo. Phân tích viên: Nếu còn tài liệu trong thư viện thì sao? Khách hàng: Trong trường hợp này thủ thư sẽ kiểm tra dữ liệu về đọc giả xem độc giả có thẻ thư viện hay không. Nếu đã có thẻ. Nếu đã có thẻ, thủ thư ghi lại ISBN của tài liệu mượn và thông tin về độc giả mượn vào sổ mượn, đồng thời ghi vào CSDL mượn. Mỗi độc giả chỉ được mượn một số sách (tạp chí) nhất định, trong khoản thời gian nhất định. Phân tích viên: Thủ thư có thể mượn sách hay tạp chí không? Khách hàng: Có, mỗi thủ thư cũng có một bản ghi mượn. Phân tích viên: Ai thực hiện việc ghiu thông tin mượn tài liệu vào CSDL? Khách hàng: Ngoài máy trạm trong mạng để tìm kiếm tài liệu, thủ thư còn có máy trạm để kiểm tra thông tin về độc giả,tài liệu có còn khôngvà xem danh sách đôc giả phải trả tài liệu hết hạn mượn. Phân tích viên: Với tài liệu điện tử thì sao? Khách hàng: Nó luôn luôn có sẵn trong thư viện. Phân tích viên: Trường hợp độc giả không tìm thấy sáchtrong danh sách tìm kiếm thì thủ thư có khuyên nhủ gì không? Khách hàng: Thủ thư có thể khuyến cáo độc giả , nhưng độc giả có đống ý hay không. Phân tích viên: Trên đây ta đã trao đổi các hoạt động của nhân viên thư viện liên quan đến việc mượn, đặt trước, khuyến cáo và tìm kiếm.Bây giờ trao đổi về giao thiệp giữa thủ thư với độc giả,sách và tạp chí. Khách hàng: Nhiệm vụ của thủ thư tập trung vào mượn và trả sách,tạp chí. Họ gửi thông báo đến ai phải trả sách hết hạn mượn, đến ai đặt trước để mượn và nay đã có sách trong thư viện. Phân tích viên:Thư viện có thuê mướn nhân viên để quản trị khối dữ liệu lớn hay không? Khách hàng:Thư viện có nhân viên nhập liệu làm việc trên các máy trạm. Họ nhập liệu và bảo trì,còn chuyên gia CSDL thực hiện quản trị CSDL. Phân tích viên:Nếu ai đó muốn trở thành độc giả của thư viện thì cần làm gì? Khách hàng:Họ phải đến phòng tiếp đón để làm thủ tục.Thủ thư ghi bản ghi mới để ghi họ và tên ,đại chỉ nơi ở và chứng minh thư, số điện thoại và e-mail và ngày tháng năm sinh.Sau khi đăngvà in bản ký,thủ thư in thẻ thư viện và đưa cho độc giả và in bản ghi trên giấy để lưu trong hồ sơ thư viện. Phân tích viên:Nhập thông tin về sách và tạp chí như thế nào? Khách hàng:Sách và tạp chí có rất nhiều thuộc tính chung,bao gồm ISBN,tên, năm xuất bản và nhà xuất bản.Mỗi ấn phẩm còn có số lượng bản trong thư viện đôi khi chúng còn kèm theo dữ liệu đa phương tiện. Phân tích viên: Thư viện có hỗ trợ dữ liệu đa phương tiện cho các ấn phẩm điện tử và ấn phẩm giấy? Khách hàng: Không quan tâm đến hình thức ấn phẩm.Thư viện hỗ trợ dữ liệu đa phương tiện cho cả ấn phẩm điện tử và ấn phẩm giấy . Phát triển phần mềm bằng UML trang | 185
  50. Phân tích viên: Khi tìm kiếm thông tin về tài liệu ,tôi có thể xem ngay dữ liệu đa phương tiện?Dữ liệu đa phương tiện là những dữ liệu loại gì? Khách hàng:Nếu kết quả tìm kiếm trên máy tính là dữ liệu đa phương tiện thì độc giả có thể xem ngay nó.Dữ liệu đa phương tiện bao gồm văn bản ,âm thanh, ảnh và hình ảnh động. Phân tích viên:Nhập thông tin về ta`c giả như thế nào? Khách hàng:Thông tin về tác giả được nhập riêng.Chúng bao gồm họ và tên,ngày tháng năm sinh và nơi sinh.Khi nhập thông tin về sách,nếu tên tác giả đã có trong danh sách tác giả thì nhân viên nhập liệu chỉ việc chọn dữ liệu từ danh sách,nếu không thì phải tạo thông tin tác giả.Ngoài ra còn phải nhập loại sách. Phân tích viên:Còn tạp chí thì sao? Khách hàng: Số tạp chí và lĩnh vực của nó. Phân tích viên: Như đã nói trênlà tồn tại hai loai lưu trữ thông tin(điện tửvà giấy),vậy,biểu diễn dữ liệu đa phương tiện trên bì giấy bằng cách nào? Khách hàng:Dữ liệu đa phương tiện chỉ lưu trữ dưới khuôn dạng số.Thẻ giấy được in từ bản ghi và chỉ chứa có một vài thông tin cần thiết cho thẻ. Phân tích viên: Ta đã khảo sát thấy công việc của thủ thư bao gồm nhập tên sách,tạp chí và thông tin tác giả , độc giả .Nhưng còn số lượng ấn phẩm thì sao? Khách hàng:Số lượng ấn phẩm được nhập đồng thời khi nhập thông tin về sách .Số liệu cần quan tâmlà số lượng mới và số lượng đang có trong thư viện. Phân tích viên: Có thể cho rằng công việc phân tích về công việc của thủ thư đã được thực hiện đầy đủ? Khách hàng:Đúng vậy! Từ mô tả trên đây về cuộc trao đổi giữa khách hàng(người yêu cầu xây dựng hệ thống thư viện)và phân tích viên hệ thống,ta có thể vẽ một số biểu đồ hoạt động của hệ thống thư viện điện tử.Sau đây là một vài biểu đồ biểu diễn các khía cạnh khác nhau của hệ thống: Hình 8.1 và hình 8.2 là biểu đồ nhoạt động của cả hệ thống. Hình 8.3 là biểu đồ hoạt động của thủ thư khi cho mượn sách hay tạp chí. Hình 8.4 biểu đồ hoạt động của nhân viên nhập liệu. Phát triển phần mềm bằng UML trang | 186
  51. Khaùch haøng vaøo thö vieän [ chöa coù theû ] Ñi ñeán baøn tieáp Laøm theû ñoùn thö vieän [ Tìm kieám ] Ñi ñeán Maùy traïm haønh lang coøn troáng? [ ñi möôïn ] 1 Ñi ñeán nôi möôïn [ khoâng ] [ tö vaán ] [ möôïn ] Ñi ñeán noäp hoà sô Khuyeán Trình theû vaø danh caùo saùch taøi lieäu Tìm kieám phích Möôïn taøi lieäu [ thaáy taøi lieäu ] Cho vaøo danh saùch möôïn [ tìm tieáp ] Möôïn? Ñoäc giaû ra khoûi thö vieän [ coù ] [ khoâng ] Hình 8.1 Biểu đồ hoạt động Phát triển phần mềm bằng UML trang | 187
  52. Ñaêng nhaäp heä thoáng Löïa choïn Nhaäp Truy tìm kieám vaán Nhaän danh saùch taøi lieäu Choïn taøi lieäu Duyeät taøi [ ñieän töû ] lieäu soá In [ in ] [ giaáy ] [ tìm tieáp ] Möôïn taøi lieäu Möôïn? [ coù ] [ khoâng ] Hình 8.2 Biểu đồ hoạt động (tiếp theo) Phát triển phần mềm bằng UML trang | 188
  53. Laáy danh saùch taøi Laáy thoâng tin taøi lieäu vaø theû TV lieäu vaø theû TV Laáy moät taøi lieäu ra Tìm baûn khoûi danh saùch ghi möôïn Nhaäp ngaøy vaø thoâng Ghi ngaøy traû vaø ñoùng baûn ghi tin ñoäc giaû vaø saùch [ Coøn saùch ] [ heát saùch ] Laáy taøi lieäu NewState1 khoûi giaù 0 [ taøi lieâïu khaùc ] [ heát ] Ñöa saùch cho ñoäc giaû [ chöa ] Heát danh saùch [ ñaõheát ] Hình 8.3 Biểu đồ hoạt động của thủ thư Phát triển phần mềm bằng UML trang | 189
  54. [ taøi lieäu ] [ taùc giaû ] [ saùch ] [ taïp chí ] [ ñoäc giaû ] Nhaäp döõ lieäu Nhaäp döõ lieäu Nhaäp döõ lieäu caàn thieát caàn thieát caàn thieát [ ña phöông tieän ] Choïn taùc giaû Nhaäp döõ lieäu trong danh saùch ña phöông tieän Ghi döõ lieäu vaøo baûn ghi [ khoâng thaáy ] [ thaáy ] Nhaäp döõ lieäu Ghi thoâng tin taùc giaû In theû giaáy Ñieàn vaøo ña phöông tieän vaøo baûn ghi saùch theû ñoäc giaû Chuyeån noù cho ñoäc giaû Nhaäp döõ lieäu caàn thieát Nhaäp döõ lieäu caàn thieát [ ña phöông tieän ] Nhaäp döõ lieäu Nhaäp döõ lieäu ña phöông tieän caàn thieát Nhaäp döõ lieäu caàn thieát Hình 8.4 Biểu đồ hoạt động của nhân viên nhập liệu 8.2 PHÂN TÍCH LĨNH VỰC Bước tiếp theo là tìm kiếm các đối tượng hệ thống tương ứng với đối tượng thế giới thực cho mô hình .Trước mắt ta tìm các đối tượng từ phỏng vấn trong lĩnh vực vấn đề mô tả trên bằng cách tìm ra các danh từ , động từ và các nhóm động từ.Một số danh từ trở thành lớp, một số khác trở thành thuộc tính của mô hình, còn động từ và nhóm động từ trở thành thao tác hay nhãn của các kết hợp.Sau đây là danh sách danh từ ,phần in nghiêng có thể là thuộc tính và sẽ bị tách khỏi danh sách. Hành lang ,bản ghi dữ liệu ,cặp lưu trữ,mạng LAN,máy chủ,máy trạm,sách in,tạp chí in,sách điện tử,tạp chí điện tử ,quyển sách,ngày tháng,giới hạn ngày tháng,sách ,tạp chí,tài liệu,tác giả ,phích,thư viện,CSDL,ISBN,tiêu đề năm xuất bản,loại,nhà xuất bản,số tạp chí,lĩnh vực,đặt trước,nhân,mượn,nơi mượn,thủ thư,người sử dụng,độc giả,bản ghi cho mượn,báo Phát triển phần mềm bằng UML trang | 190
  55. cáo,tổng số quyển sách,nhân viên nhập liệu,chuyên gia CSDL,nơi tiếp đón,họ và tên,địa chỉ ,nơi ở ,số đăng ký cá nhân,điện thoại,e-mail,ngày sinh,thẻ bạn đọc,tài liệu thư viện,số liệu đa phương tiện,thông tin,văn bản,âm thanh ,hình ảnh,hình ảnh động. Danh sách động từ tìm ra từ phỏng vấn khách hàng như sau: Đi,tìm kiếm,mượn,sắp xếp,in,lấy,có,chuyển đổi,ghi,quản lý ,xâm nhập,đọc ,duyệt,lấy quyển sách,đặt trước ,thông báo,đưa cho,kiểm tra dữ liệu,khuyến cáo,gửi,mua,thao tác,quản trị,nhập. Có thể nhóm một số danh từ để thử hình thành những lớp trừu tượng sau này.Thí dụ ta có các nhóm sau: • Nhóm con người:Độc giả,tác giả,nhân viên,thủ thư,chuyên gia CSDL,nhân viên nhập liệu. • Nhóm các mục thư viện:sách,tạp chí,quyển sách,đặt trước,mượn tài liệu. • Nhóm các vùng trong thư viện:hành lang,nơi mươn,nơi đón tiếp. • Nhóm khác:thẻ thư viện,bản ghi dữ liệu,số liệu đa phương tiện,bản ghi mượn. Kết quả là đã tìm ra các lớp trừu tượng như trên hình 8.5 .Chúng sẽ được chi tiết hóavà bổ sung trong các bước tiếp theo. Muïc Nhaân vieân Saùch Taïp chí Thuû thö Nhaân vieân nhaäp lieäu Chuyeân gia CSDl Thö vieän Möôïn Döõ lieäu ña phöông tieän Baûn ghi döõ lieäu Haønh lang Nôi möôïn Nôi ñoùn tieáp Ñaët tröôùc Phích Taùc giaû Theû ñoäc giaû Baûn ghi möôïn Quyeån saùch Ñoäc giaû Hình 8.5 Các lớp Phát triển phần mềm bằng UML trang | 191
  56. Baøn möôïn taøi lieäu Baøn ñoùn tieáp Baøn ghi döõ lieäu Theû Taøi lieäu ñieän töû 1 n 1 1 1 n 1 n ñi ñeán ñi ñeán tìm kieám tìm kieám in 1 n 1 n 1 n 1 n Ñoäc giaû 1 n 1 n 1 n 1 n 1 n möôïn laáy thöïc hieän duyeät 1 n 1 n 1 n 1 n Taøi lieäu Ñaët tröôùc Döõ lieäu ña phöông tieän Taøi lieäu Hình 8.6 Lớp “Độc giả” Từ các động từ hay cụm động từ trong phỏng vấn ta có thể hình thành các kết hợp giữa một vài lớp và đặt tên cho chúng.Thí dụ,khi khảo sát lớp “Độc giả”ta có thể hình thành các câu thể hiện kết hợp như dưới đây: • Độc giả tìm phích hay bản ghi dữ liệu • Độc giả đi đến bàn mượn tài liệu • Độc gỉa mượn tài liệu. • Độc giả đặt trước để mượn. • Độc giả lấy tài liệu(sách,tạp chí) • Độc giả duyệt dữ liệu đa phương tiện. • Độc giả đi đến bàn đón tiếp. • Độc giả in ấn phẩm điện tử. Sau khi bổ sung tính nhiều(multiplicity) cho các kết hợp ta có “Độc giả”như trên hình 8.6. Khi khảo sát lớp “Tài liệu” (sách hoặc tạp chí) ta có thể hình thành các câu thể hiện kết hợp như dưới đây: • Tài liệu(sách hay tạp chí)có thể được khuyến cáo cho tác giả. • Tài liệu được độc giả đặt trước. • Tài liệu điện tử được độc giả in. • Tài liệu được sắp xếp theo thứ tự trong phích và bản ghi dữ liệu. • Tài liệu có bản mẫu. • Tài liệu có dữ liệu đa phương tiện. Sau khi bổ sung tính nhiều cho các kết hợp ta có lớp “Tài liệu”như trên hình 8.7. Phát triển phần mềm bằng UML trang | 192
  57. Ñoäc giaû Ñoäc giaû Ñoäc giaû 1 n 1 n 1 n khuyeán caùo ñaët tröôùc bôûi in bôûi 1 n 1 n 1 n Taøi lieäu 1 n 1 n 1 n 1 n coù coù saép xeáp saép xeáp 1 n 1 n 1 n 1 n Baûn maãu Phích Baûn ghi döõ Döõ lieäu ña lieäu phöông tieän Hình 8.7 Lớp “Tài liệu” Tương tự,ta có thể xây dựng kết hợp và tính nhiều cho lớp “Nhân viên”.Cần chú ý rằng nhân viên thư viện cũng là độc giả, do vậy nó cũng có các kết hợp như lớp “Độc giả”, nhưng nhân viên có thể thực hiện các công việc khác mà độc giả không làm. • Thủ thư lập bản ghi mượn tài liệu. • Thủ thư cho độc giả mượn tài liệu. • Nhân viên nhập liệu nhập thông tin về sách. • Nhân viên nhập liệu nhập thông tin về tài liệu. • Nhân viên nhập liệu nhập thông tin về tác giả • Nhân viên nhập liệu nhập thông tin về độc giả • Nhân viên nhập liệu nhập thông tin về bản mẫu. Sau khi bổ sung tính nhiều cho các kết hợp ta có lớp “Thủ thư”như trên hình8.8 và lớp “Nhân viên nhập liệu” như trên hình 8.9. Thuû thö 1 1 1 phaùt sinh cho möôïn cho möôïn 1 n 1 n 1 n Baûn ghi möôïn Taøi lieäu(giaáy) Baûn ghi döõ lieäu Hình 8.8 Lớp “Thủ thư” Phát triển phần mềm bằng UML trang | 193
  58. Saùch Taïp chí 1 n 1 n nhaäp lieäu nhaäp lieäu 1 n 1 n Nhaân vieân nhaäp lieäu 1 n 1 n 1 n nhaäp lieäu nhaäp lieäu nhaäp lieäu 1 n 1 n 1 n Taùc giaû Ñoäc giaû Ñaàu taøi lieäu Hình 8.9 Lớp “Nhân viên nhập liệu” 8.3 PHÂN TÍCH HỆ THỐNG. 8.3.1 - Xây dựng biểu đồ trường hợp sử dụng (Use Case-UC) Danh sách tác nhân.Từ phân tích yêu cầu phần mềm ta nhận ra các tác nhân như sau:Độc giả,Thủ thư,Nhân viên nhập liệu,chuyên gia CSDL. Danh sách các trường hợp sử dụng.Từ phân tích yêu cầu phần mềm,các chức năng hệ thống được hình thành.Đó là các trường hợp sử dụng của hệ thống,chúng được chia thành nhiều gói để dễ quan sát như gói Độc giả,gói Thủ thư ,gói Sách,gói Bản mẫu đầu tài liệu,gói Mượn sách,gói Tác giả và gói Đặt trước.Tương tự,ta có thể nhận ra các UC cho gói khác như gói Nhân viên nhập liệu,Đa phương tiện và gói Tạp chí. Gói Độc giả.Gói này bao gồm các UC sau đây(hình8.10). Goùi ñoäc giaû Nhaäp döõ lieäu ñeå tìm kieám Truyeàn döõ lieäu tìm kieám Nhaän thoâng tin phaûn hoài Truyeàn döõ lieäu ñaët tröôùc Thöïc hieän ñaët tröôùc Laáy danh saùch ñaàu taøi lieäu Nhaän danh saùch gôïi yù Nhaän danh saùch taïp chí gôïi yù Hình 8.10 Gói UC “Độc giả” Phát triển phần mềm bằng UML trang | 194
  59. • Trường hợp sử dụng “Nhập dữ liệu để tìm kiếm” w Mô tả UC:Độc giả nhập dữ liệu tìm kiếm vào cửa sổ (form)tìm kiếm. w Tác nhân kích hoạt:Độc giả w Tiền điều kiện:Độc giả có dữ liệu tìm kiếm;Hậu điều kiện:Độc giả nhập dữ liệu tìm kiếm vào thư điện tử. w Các bước trong UC này: q Từ mạng LAN của thư viện hay từ nơi khác độc giả kích hoạt giao diện người sử dụng để nhập liệu tìm kiếm. q Cửa sổ mẫu tìm kiếm xuất hiện trên màn hình. q Độc giả nhập dữ liệu vào mẫu. • UC “Truyền dữ liệu để tìm kiếm”. w Mô tả UC:Lấy dữ liệu từ cửa sổ rồi gửi đến mô tơ tìm kiếm CSDL thư viện. w Tiền điều kiện:Dữ liệu mẫu tìm kiếm được nhập vào cửa sổ.Hậu điều kiện:Dữ liệu đến mô tơ tìm kiếm CSDL thư viện. w Các bước trong UC này: q Nhấn phím “Đệ trình” trên cửa sổ giao diện. q Kích hoạt cơ chế truyền dữ liệu qua mạng. q Dữ liệu đi đến mô tơ tìm kiếm CSDL thư viện. q Trên màn hình xuất hiện thông báodữ liệu đã gửi và chờ để đọc lại dữ liệu. UC này liên quan đếnUC “Nhập liệu để tìm kiếm”, chúng có quan hệ phụ thuộc >(hình 8.11). • UC “Lấy danh sách đầu tài liệu tìm thấy”. w Mô tả UC:Lấy danh sách sách hay tạp chí sau khi nhập dữ liệu vào cửa sổ và gửi đến CSDL thư viện. w Tác nhân kích hoạt :Độc giả. w Tiền điều kiện:Độc giả sử dụng cửa sổ tìm kiếm và liên lạc mạng LAN tốt,phím “Đệ trình” bị nhấn,Hậu điều kiện:Danh sách đầu tài liệu trên màn hình. w Các bước trong UC này: q Chờ trong khi tực hiện tìm kiếm. q CSDL thư viện truyền danh sách đầu tài liệu đến giao diện người dùng thông qua mạng. q Độc giả nhận danh sách đầu tài liệu phù hợp với mẫu dữ liệu đã nhập. UC này liên quan đến UC “Truyền dữ liệu để tìm kiếm”,chúng có quan hệ phụ thuộc >. Phát triển phần mềm bằng UML trang | 195
  60. > Nhaäp döõ lieäu ñeå tìm kieám Truyeàn döõ lieäu tìm kieám > Nhaän danh saùch saùch gôïi yù Laáy danh saùch ñaàu taøi lieäu Ñoäc giaû > > > > Nhaän danh saùch taøi lieäu gôïi yù Thöïc hieän ñaët tröôùc Truyeàn döõ lieäu ñaët tröôùc > Nhaän thoâng tin phaûn hoài Hình 8.11 Quan hệ giữa các UC trong gói “Độc giả” • UC “Đặt trước” w Mô tả UC:Độc giả muốn đặt trước đầu tài liệu sau khi tìm kiếm hay được tư vấn. w Tiền điều kiện:Có danh sách đầu sách hay tạp chí.Nhấn phím “Đặt trước” ;Hậu điều kiện:Bản ghi giữ chỗ được truyền đến thư viện điện tử. w Các bước trong UC này: q Độc giả nhận được danh sách đầu tài liệu. q Độc giả nhấn phíM “Đặt trước”tài liệu mà họ muốn. q Độc giả điền mẫu cho đặt trước. • UC “ Truyền dữ liệu đặt trước”: UC này tương tự như UC “Truyền dữ liệu để tìm kiếm”, nó liên quan đến các UC “Thực hiện đặt trước” và “Nhận phản hồi”.Kết nối là >. • UC “Nhận thông tin phản hồi”: w Mô tả UC:Sau khi nhấn phím “Đệ trình”trong cửa sổ đặt trước,phản hồi từ thư viện điện tử sẽ trở lại và thông báo cho độc giả trạng thái của đặt trước. Trạng thái đặt trước có thể là còn đầu tài liệu mong muốn hay đã cho mượn hết. w Tiền điều kiện:Phím “Đệ trình”bị nhấn,truyền thông trên mạng tốt ;Hậu điều kiện:Nhận trạng thái đặt trước. w Các bước trong UC này: q Chờ cho đến khi nhận được thông tin phản hồi. Phát triển phần mềm bằng UML trang | 196
  61. q Truyền thông tin cần thiết qua mạng đến giao diện độc giả. q Độc giả nhận trạng thái đặt trước. • UC “Lấy danh sách đầu mục gợi ý”: w Mô tả UC: Thủ thư kích hoạt chức năng gợi ý của hệ thống và nhận lại các đầu tài liệu khuyến cáo. w Tác nhân kích hoạt: Độc giả . w Tiền điều kiện: Phím “Gợi ý”bị nhấn; Hậu điều kiện:Nhận danh sách đầu sách. w Các bước trong UC này: q Kích hoạt chức năng gợi ý của hệ thống. q Thư viện điện tử kích hoạt thuật toán gợi ý để phát sinh danh sách đầu tài liệu. q Hiển thị danh sách đầu mục tài liệu gợi ý trên màn hình độc giả. Gói Sách.Gói này bao gồm các UC sau đây (hình 8.12). • Trường hợp sử dụng “Nhập dữ liệu mới”: w Mô tả UC: Nhập dữ liệu tìm kiếm vào cửa sổ (form)sách. w Tác nhân kích hoạt: Nhân viên nhập liệu. w Tiền điều kiện: Cửa sổ nhập liệu đã được kích hoạt ,có sẵn dữ liệu cho sách mới .Hậu điều kiện :Dữ liệu nhập vào CSDL thư viện điện tử. w Các bước trong UC này: q Nhân viên nhập liệu kích hoạt giao diện nhập thông tin sách qua LAN hay Internet. q Mẫu nhập liệu xuất hiện trên màn hình. q Nhân viên nhập thông tin cần thiết. Goùi Saùch Nhaäp döõ lieäu môùi Söûa döõ lieäu ñang coù Nhaäp döõ lieäu ña phöông tieän Nhaän phaûn hoài töø boå sung ña phöông tieän Nhaän phaûn hoài töø möôïn taøi lieäu Nhaän toång soá baûn maãu hieän coøn Choïn taùc giaû Nhaän thoâng tin veà taùc giaû Kieåm laïi ñaët tröôùc Kieåm laïi soá baûn maãu ñang coù Nhaän toång soá baûn ñaët tröôùc Tìm ra ñaët tröôùc sôùm nhaát Thöïc hieän möôïn Thöïc hieän ñaët tröôùc Nhaän phaûn hoài töø ñaët tröôùc Hình 8.12 Gói UC “Sách” • Trường hợp sử dụng “Chọn tác giả”. w Mô tả UC: Chọn tác giả sách từ danh sách tác giả. w Tác nhân kích hoạt : Nhân viên nhập liệu. w Tiền điều kiện: Bản ghi tác giả có trong CSDL.Hậu điều kiện:Dữ liệu về tác giả sách. w Các bước trong UC này: Phát triển phần mềm bằng UML trang | 197
  62. q Nhấn phím “Đệ trình”trong cửa sổ tìm kiếm. q Kích hoạt cơ chế truyền dữ liệu trên mạng. q Mẫu dữ liệu tìm kiếm đến mô tơ tìm kiếm trong CSDL. q Trên màn hình độc giả xuất hiện thông báo đã truyền và chờ đến khi nhận được dữ liệu nào đó. UC này liên quan đến UC “Nhập thông tin sách mới”,do vậy phải bổ sung quan hệ phụ thuộc >giữa chúng trong biểu đồ UC(hình8.13). Phát triển phần mềm bằng UML trang | 198
  63. > > Choïn taùc giaû Nhaän thoâng tin veà taùc giaû > > > Nhaäp döõ lieäu môùi Nhaân vieân nhaäp lieäu Nhaäp döõ lieäu ña phöông tieän Söûa döõ lieäu ñang coù > Nhaän phaûn hoài töø boå sung ña phöông tieän Nhaän toång soá baûn maãu hieän coøn > Tìm ra ñaët tröôùc sôùm nhaát > > Thöïc hieän ñaët tröôùc Nhaän phaûn hoài töø ñaët tröôùc Ñoäc giaû Kieåm laïi soá baûn maãu ñang coù Nhaän toång soá baûn ñaët tröôùc > > Thöïc hieän möôïn > Nhaän phaûn hoài töø möôïn taøi lieäu Thuû thö Kieåm laïi ñaët tröôùc Hình 8.13 Quan hệ giữa các UC trong gói “Sách” • Trường hợp sử dụng “Khai thác dữ liệu tác giả”. w Mô tả UC: Khai thác toàn bộ thông tin cần thiết về tác giả đã lựa chọn từ UC “Chọn tác giả”. w Tiền điều kiện: Tác giả đã được chọn từ danh sách tác giả.Hậu điều kiện: Thông tin về tác giả sách. Phát triển phần mềm bằng UML trang | 199
  64. w Các bước trong UC này: q Sau khi tìm kiếm, CSDL chọn bản ghi tác giả và tách ra các thông tin cần thiết về tác giả. q Gửi thông tin đến cửa sổ nhập dữ liệu tác giả . q Hiển thị thông tin trên màn hình người sử dụng. UC này chứaUC “Chọn tác giả”. • Trường hợp sử dụng: “Nhập dữ liệu đa phương tiện”. w Mô tả UC: Nếu sách có dữ liệu đa phương tiện thì nó được nhập vào bản ghi sách. w Tiền điều kiện: Sách có dữ liệu đa phương tiện và tệp đa phương tiện đang được lưu ở đâu đó trong máy chủ, phím “Đa phương tiện” được nhấn.Hậu điều kiện:Dữ liệu đa phương tiện được nhập vào. w Các bước trong UC này: q Nếu sách có dữ liệu đa phương tiện, phím “Đa phương tiện”được nhấn và cửa sổ nhập liệu hiển thị. q Người sử dụng nhập liệu đa phương tiện, vị trí trên máy chủ nơi lưu dữ liệu lưu trữ. q Nhấn phím “Đệ trình” và bản ghi đa phương tiện được gửi đến CSDL. UC này được gộp vào UC “Sửa dữ liệu của sách đã có” và UC “Nhập dữ liệu cho sách mới . • Trường hợp sử dụng “Nhận phản hồi từ bổ sung đa phương tiện”. w Mô tả UC: Sau khi làm đầy cửa sổ nhập ,CSDL gửi thông báo kết quả thực hiện tiến trình bổ sung dữ liệu đa phương tiện . w Tiền điều kiện: Cửa sổ nhập dữ liệu đa phương tiện đã được điền, có tệp đa phương tiện và mạng thông.Hậu điều kiện:Nhận được trạng thái giao dịch. w Các bước trong UC này: q Dữ liệu đa phương tiện đến CSDL, tiến trình tạo bản ghi mới bắt đầu. q Kết quả của tiến trình có thể tốt hay có thể hỏng q Loại kết thúc tiến trình tạo lập được trả lại cửa sổ nhập liệu sách. UC này được gộp vào UC “Nhập dữ liệu đa phương tiện” • Trường hợp sử dụng “Nhận dữ liệu cho sách đang tồn tại”. w Mô tả UC:Nếu nhập nhầm thông tin quyển sách nào đó,có thể sửa lại chúng. w Tiền điều kiện:Bản ghi sách đã có,phím “Sửa”được nhấn,nhập sai dữ liệu sách.Hậu điều kiện:Thay đổi bản ghi sách. w Các bước trong UC này: q Người sử dụng nhấn phím “Sửa”, cửa sổ chứa thôn g tin sách xuất hiện trên màn hình. q Chọn và sửa thông tin sai trong bản ghi q Nếu thay đổi thông tin tác giả hay thông tin đa phương tiện , tiến trình được nhập như dữ liệu mới được thực hiện. • Trường hợp sử dụng “Đặt trước”. w Mô tả UC:Độc giả có thể đặt trước sách sẽ mượn. w Tiền điều kiện:Sách phải có trong danh sách tìm kiếm từ tiến trình tìm kiếm hay tiến trình quản lý, độc giả muốn đặt trước.Hậu điều kiện:Dữ liệu của sách cần thiết và độc giả được truyền đến CSDL thư viện điện tử. w Các bước trong UC này: q Người sử dụng nhấn phím “Đặt trước” và nhập các thông tin cần thiết để đặt trước q CSDL nhận yêu cầu đặt trước. q Thực hiện kiểm tra dữ liệu và bản ghi CSDL. Phát triển phần mềm bằng UML trang | 200
  65. q Hệ thống kiểm tra đầu sách còn lại, thựchiện đặt trước. q Chờ đến khi nhận được thông tin phản hồi. • Trường hợp sử dụng “Nhận phản hồi từ đặt trước”. w Mô tả UC:Sau khi độc giả điền dữ liệu vào cửa sổ và nhấn phím “Đặt trước”,hệ thống nhận yêu cầu và thực hiện tiến trình đặt trước rồi nhận thông báo trạng thái. w Tiền điều kiện: “Đặt trước”bị nhấn.Hậu điều kiện:Trạng thái đặt trước. w Các bước trong UC này: q Lấy trạng thái thực hiện đặt trước. q Gửi trạng thái đến người dùng qua mạng. q Thông điệp trạng thái đặt trước hiển thị trên màn hình. UC này và UC “Thực hiện đặt trước”có quan hệ phụ thuộc >. • Trường hợp sử dụng “Kiểm tra đầu sách còn trong thư viện”. w Mô tả UC:Đếm đầu sách còn chưa cho mượn, kết quả đượ gửi đến tiến trình đặt trước. w Tiền điều kiện:Có yêu cầu đặt trước.Hậu điều kiện :Tổng số đầu sách còn trong thư viện. w Các bước trong UC này: q Nhận tổng số đầu sách yều cầu đặt trước. q Đếm số sách còn trong thư viện. q Gửi giá trị này cho hệ thống. UC này và UC “Thực hiện đặt trước”có quan hệ phụ thuộc >. • Trường hợp sử dụng “Cho lại đầu sách còn trong thư viện”. w Mô tả UC :Cho lại đầu sách còn chưa cho mượn. w Tiền điều kiện:Có yêu cầu một số đầu sách.Hậu điều kiện:Truyền tổng số đầu sách còn trong thư viện. w Các bước trong UC này: q Nhận tổng số đầu sách yêu cầu đặt trước truyền đến. q Kiểm tra kết quả để xác định trạng thái đặt trước. q Truyền trạng thái đặt trước tới hệ thống. UC này và UC “Kiểm tra đầu sách còn trong thư viện” có quan hệ phụ thuộc >. • Trường hợp sử dụng “Thực hiện mượn”. w Mô tả UC :Độc giả muốn mượn sách. w Tiền điều kiện:Độc giả phải có mặt tại thư viện,sách in, còn đầu sách trong thư viện,độc giả yêu cầu mượn.Hậu điều kiện:Yêu cầu mượn được truyền đến thư viện . w Các bước trong UC này: q Thủ thư kích hoạt giao diện để nhận sách trả hay cho mượn. q Thủ thư nhập dữ liệu của tài liệu và tổng số vào cửa sổ giao diện cho mượn. q Sau khi nhấn phím “Cho mượn”,tiến trình cho mượn được thực hiện. • Trường hợp sử dụng “Nhận phản hồi từ tiến trình cho mượn” w Mô tả UC:Sau khi nhấn phím “Cho mượn”trong cửa sổ giao diện, bản ghi đặt trước mới được ghi vào CSDL,kết qủa của phiên giao dịch này được trả lại giao diện cho mượn. w Tiền điều kiện:Truyền tin qua LAN,có phím “Cho mượn”trên giao diện, dữ liệu đã được nhập vào cửa sổ cho mượn.Hậu điều kiện:Trạng thái của phiên giao dịch. w Các bước trong UC này: q Chờ cho đến khi tiến trình cho mượn kết thúc ,nhận lại kết quả trạng thái cho mượn. q Truyền trạng thái qua mạng đến màn hình thủ thư. q Nếu còn đầu sách thì độc giả lấy nó. Phát triển phần mềm bằng UML trang | 201
  66. UC này và UC “Thực hiện mượn”có quan hệ phụ thuộc >. • Trường hợp sử dụng “Nhận tổng số bản đặt trước”. UC này xảy ra khi bản ghi mượn mới được tạo lập.Nếu sách được đặt trước mà không còn đầu sách thì tiến trình mượn thất bại. • Trường hợp sử dụng “Kiểm tra đặt trước”. Nếu độc giả đã đặt trước sách để mượn, thì nếu đầu sách còn thì độc giả nậhn sách,nếu không thì tiến trình cho mượn thất bại. • Trường hợp sử dụng “Tìm lần đặt trước đầu tiên”. UC này được sử dụng trong tiến trình cập nhật bản ghi đặt trước .Nếu độc giả yêu cầu đặt trước và không còn đầu sách,thì khi có đầu sách UC này tìm ra đặt trước sớm nhất cho đầu sách này,đặt lại trạng thái đầu sách từ “sẵn có” sang “đã đặt trước”.Đặt lại đầu sách là sẵn sàng khi ai đó trả nó cho thư viện. Goùi Ñaàu Saùch Boå sung ñaàu saùch môí Ñaët ñaàu saùch laø coøn Söûa thoâng tin ñaàu saùch ñang toàn taïi Nhaän laïi toång soá ñaàu saùch coøn Nhaän yeâu caàu veà ñaàu saùch Hình 8.14 Gói UC “Đầu sách” Phát triển phần mềm bằng UML trang | 202
  67. Cho möôïn saùch Nhaän yeâu caàu ñeå traû taøi lieäu möôïn Traû taøi lieäu möôïn Baõi boû möôïn taøi lieäu Kieåm soaùt ñaêït tröôùc Thöïc hieän möôïn Nhaän ñaët tröôùc sôùm nhaát Truyeàn keát quaû cuûa traû taøi lieäu Nhaän yeâu caàu ñeå möôïn taøi lieäu Truyeàn keát quaû möôïn Hình 8.15 Gói UC “Cho mượn sách” Giữa UC “Thực hiện mượn” và UC “Kiểm tra đặt trước”,giữa UC “Thực hiện mượn” và “Nhận số bản đặt trước”có quan hệ >. Việc phân tích trường hợp sử dụng được thực hiện tương tự cho các gói Đầu sách(hình 8.14),gói Cho mượn sách (hình 8.15),gói Tác giả (hình 8.16),gói Đặt trước (hình 8.17) và gói Thủ thư (hình 8.18). Goùi Taùc giaû Nhaäp taùc giaû môùi Söûa thoâng tin taùc giaû Nhaän yeâu caàu veà thoâng tin taùc giaû Truyeàn döõ lieäu Hình 8.16 Gói UC “Tác giả” Phát triển phần mềm bằng UML trang | 203
  68. Goùi Ñaët tröôùc Huûy boû ñaët tröôùc Nhaän yeâu caàu ñaët tröôùc Thöïc hieän ñaët tröôùc Truyeàn keát quaû Hình 8.17 Gói UC “Đặt trước” Goùi Thuû thö Nhaäp thoâng tin veà möôïn môùi Nhaän thoâng tin phaûn hoài veà möôïn Nhaän taøi lieäu traû Nhaän thoâng tin phaûn hoài töø traû saùch Hình 8.18 Gói UC “Thủ thư” Tương tự ta có thể nhận ra các UC cho gói khác như gói Nhân viên nhập liệu,Đa phương tiện và gói Tạp chí. 8.4 BIỂU ĐỒ TƯƠNG TÁC Một trong các cách tìm ra tương tác là xem xét các cấu phần hệ thống trong từng gói UC.Nhiệm vụ ở đây là chỉ ra các cấu phần hệ thống tương tác với nhau như thế nào để hoàn thiện từng UC .Hãy khảo sát gói “Độc giả” và gói “Sách” làm thí dụ. 8.4.1 - Tiến trình đặt trước sách để mượn Giả sử rằng độc giả đặt trước sách có trong danh sách sách gợi ý.Để thực hiện thao tác này ta cần có sự tham gia của một số UC trong gói “Độc giả”,bao gồm Lấy danh sách sách gợi ý,Thực Phát triển phần mềm bằng UML trang | 204
  69. hiện đặt trước,Truyền dữ liệu đặt trước và nhận thông tin phản hồi (hình 8.11).Sau đây là mô tả các bước của từng UC. Nhận danh sách sách gợi ý. 1. Kích hoạt phần giao diện về gợi ý sách mượn. 2. Sau khi nhấn phím “Gợi ý”trên giao diện,tín hiệu được gửi tới hệ thống để kích hoạt thuật toán gợi ý. 3. Hệ thống kích hoạt thuật toán gợi ý để phát sinh danh sách sách gợi ý. 4. Hệ thống gửi danh sách sách đến giao diện độc giả. 5. Hiển thị danh sách tài liệu trên màn hình độc giả. Thực hiện đặt trước. 1. Độc giả nhận danh sách sách,tạp chí(từ tìm kiếm hay từ gợi ý). 2. Độc giả nhấn phím “Đặt trước”cho sách,tạp chí mong muốn. 3. Cửa sổ để xác nhận đặt trước xuất hiện. 4. Độc giả điền thông tin vào cửa sổ. Truyền thông tin đặt trước. 1. Nhấn phím trên “Đệ trình”trên cửa sổ đặt trước. 2. Hệ thống truyền yêu cầu đặt trước đến CSDL Đặt trước. 3. Yêu cầu đến CSDL Đặt trước 4. Trên màn hình độc giả xuất hiện các thông báo “Đã gửi yêu cầu”và “Chờ xác nhận đã nhận yêu cầu”. Trước khi đi đến UC “Nhận thông tin phản hồi”ta thấy các UC “Đặt trước mới” và UC “Truyền thông tin phản hồi”của gói “Đặt trước” sẽ tham gia vào tiến trình tương tác này. Đặt trước mới. 1. Yêu cầu đến CSDL đặt trước,kích hoạt tiến trình tạo đặt trước để mượn 2. Kết quả của tiến trình là trạng thái đặt trước ,nó được gửi đến hệ thống. 3. Gửi trạng thái đăt trước đến hệ thống thư viện Truyền thông tin phản hồi. 1. Hệ thống thư viện gửi trạng thái đặt trước đến giao diện độc giả . 2. Trạng thái đặt trước đến phía độc giả . Phát triển phần mềm bằng UML trang | 205
  70. GUI Thö vieän ñieän Baûn ghi ñaêït CSDL ñaët tröôùc töû tröôùc 1: Kích hoaït thuaät toaùn ñaët tröôùc 2: DanhSaùchSaùch:=GoiY() 3: GöûiDanhSaùchSaùch 4: ChoïnSaùch 5: Nhaäp(DöõLieäuXaùcNhaän) 6: TaïoÑoáiTöôïng 7: Ñaêng kyù((ÑaëtTröôùc)) 8: HieånThò(ÑaõGöûiYeâuCaàu) 9: Göûi(TraïngThaùiÑaëtTröôùc) 10: Göûi(TraïngThaùi) 11: HieånThò(ThoângÑieäp) Hình 8.19 Biểu đồ trình tự của tiến trình đặt trước Nhận thông tin phản hồi . 1. Giao diện độc giả nhận trạng thái do hệ thống gửi đến. 2. Giải mã trạng thái. 3. Hiển thị thông báo lên màn hình phù hợp với trạng thái đặt trước . Biểu đồ trình tự của tiến trình đặt trước tài liệu gợi ý để mượn như trên hình 8.19. 8.4.2 - Tiến trình mượn sách , tạp chí. Giả sử rằng độc giả muốn mượn sách,ông ta đi đến thư viện,sách muốn mượn có trong thư viện và là sách in (không phải sách điện tử).Các UC trong gói “Sách” cần thiết cho thao tác này(hình 8.13),chúng bao gồm “Thực hiện mượn”,”Truyền dữ liệu mượn”, “Nhận tổng số bản đặt trước”, “Kiểm tra lại đặt trước” và “Nhận phản hồi từ mượn tài liệu”. Thực hiện mượn. 1. Kích hoạt tiến trình mượn/trả từ giao diện thủ thư 2. Cửa sổ cho mượn xuất hiện trên màn hình thủ thư Phát triển phần mềm bằng UML trang | 206