Giáo trình Phân tích và thiết kế hướng đối tượng (Phần 2) - Nghề: Thiết kế trang web - Trình độ: Cao đẳng - Trường Cao đẳng nghề Đà Lạt

pdf 98 trang Gia Huy 17/05/2022 2130
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Phân tích và thiết kế hướng đối tượng (Phần 2) - Nghề: Thiết kế trang web - Trình độ: Cao đẳng - Trường Cao đẳng nghề Đà Lạt", để 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_va_thiet_ke_huong_doi_tuong_phan_2_nghe.pdf

Nội dung text: Giáo trình Phân tích và thiết kế hướng đối tượng (Phần 2) - Nghề: Thiết kế trang web - Trình độ: Cao đẳng - Trường Cao đẳng nghề Đà Lạt

  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 | 139
  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 | 140
  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 | 141
  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 | 142
  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 | 143
  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. Hình 6.8 Trạng thái ẩn Phát triển phần mềm bằng UML trang | 144
  7. 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 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 Phát triển phần mềm bằng UML trang | 145
  8. 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. 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á độ Phát triển phần mềm bằng UML trang | 146
  9. (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. 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át triển phần mềm bằng UML trang | 147
  10. 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. 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 Phát triển phần mềm bằng UML trang | 148
  11. 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. Hình 6.15 Mô hình hóa luồng công việc Phát triển phần mềm bằng UML trang | 149
  12. 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. 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. Phát triển phần mềm bằng UML trang | 150
  13. 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 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 Phát triển phần mềm bằng UML trang | 151
  14. 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 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ả Phát triển phần mềm bằng UML trang | 152
  15. 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 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 Phát triển phần mềm bằng UML trang | 153
  16. 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 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 Phát triển phần mềm bằng UML trang | 154
  17. 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. 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 | 155
  18. 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 Phát triển phần mềm bằng UML trang | 156
  19. Dƣới đây là mô tả vắn tắt một vài kiểu thành phần của UML 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 | 157
  20. 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 Phát triển phần mềm bằng UML trang | 158
  21. 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 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, Phát triển phần mềm bằng UML trang | 159
  22. 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. 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 Phát triển phần mềm bằng UML trang | 160
  23. 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: 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. Phát triển phần mềm bằng UML trang | 161
  24. 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 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. Phát triển phần mềm bằng UML trang | 162
  25. 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. 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ý Phát triển phần mềm bằng UML trang | 163
  26. 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) 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 2. Chọn bảng General 3. Nhập stereotype trong hộp Stereotype Phát triển phần mềm bằng UML trang | 164
  27. 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. Tìm kiếm vi phạm xâm nhập nhƣ sau: Phát triển phần mềm bằng UML trang | 165
  28. 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 | 166
  29. 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. Hình 7.11 Đặt thuộc tính (tiếp) Phát triển phần mềm bằng UML trang | 167
  30. 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. 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. Phát triển phần mềm bằng UML trang | 168
  31. 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. 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ã. Phát triển phần mềm bằng UML trang | 169
  32. 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: • 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. Phát triển phần mềm bằng UML trang | 170
  33. 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. Để 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 Phát triển phần mềm bằng UML trang | 171
  34. 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. 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. Phát triển phần mềm bằng UML trang | 172
  35. 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. 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 Phát triển phần mềm bằng UML trang | 173
  36. 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. 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 Phát triển phần mềm bằng UML trang | 174
  37. 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 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 Phát triển phần mềm bằng UML trang | 175
  38. 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 đồ. 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 Phát triển phần mềm bằng UML trang | 176
  39. • 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 • 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 Phát triển phần mềm bằng UML trang | 177
  40. 3. Di đƣờng kết nối với bộ xử lý Application Server 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
  41. 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
  42. 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
  43. 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 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. Phát triển phần mềm bằng UML trang | 181
  44. } //##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) #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 | 182
  45. 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 | 183
  46. 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? Phát triển phần mềm bằng UML trang | 184
  47. 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â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 | 185
  48. Hình 8.1 Biểu đồ hoạt động Phát triển phần mềm bằng UML trang | 186
  49. Hình 8.2 Biểu đồ hoạt động (tiếp theo) Phát triển phần mềm bằng UML trang | 187
  50. 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 | 188
  51. 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 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 Phát triển phần mềm bằng UML trang | 189
  52. 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 | 190
  53. 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 gi aû 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 | 191
  54. Ñoäc gi aû Ñoäc gi aû Ñoäc gi aû 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 phöông tieän lieäu 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 | 192
  55. 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 gi aû Ñoäc gi aû Ñ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 Tru yeà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 T höï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 | 193
  56. • Trƣờng hợp sử dụng “Nhập dữ liệu để tìm kiếm” Mô tả UC:Độc giả nhập dữ liệu tìm kiếm vào cửa sổ (form)tìm kiếm. Tác nhân kích hoạt:Độc giả  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ử. Các bƣớc trong UC này: 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.  Cửa sổ mẫu tìm kiếm xuất hiện trên màn hình. Độc giả nhập dữ liệu vào mẫu. • UC “Truyền dữ liệu để tìm kiếm”.  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. 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. Các bƣớc trong UC này:  Nhấn phím “Đệ trình” trên cửa sổ giao diện. Kích hoạt cơ chế truyền dữ liệu qua mạng. Dữ liệu đi đến mô tơ tìm kiếm CSDL thƣ viện. 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”.  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.  Tác nhân kích hoạt :Độc giả. 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. Các bƣớc trong UC này:  Chờ trong khi tực hiện tìm kiếm. 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.  Độ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 | 194
  57. > 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 gi aû > > > > 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” 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.  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ử. Các bƣớc trong UC này:  Độc giả nhận đƣợc danh sách đầu tài liệu. Độc giả nhấn phíM “Đặt trƣớc”tài liệu mà họ muốn. Độ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”:  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.  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. Các bƣớc trong UC này:  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 | 195
  58.  Truyền thông tin cần thiết qua mạng đến giao diện độc giả. Độc giả nhận trạng thái đặt trƣớc. • UC “Lấy danh sách đầu mục gợi ý”:  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.  Tác nhân kích hoạt: Độc giả . 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.  Các bƣớc trong UC này: Kích hoạt chức năng gợi ý của hệ thống. 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. 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”:  Mô tả UC: Nhập dữ liệu tìm kiếm vào cửa sổ (form)sách. Tác nhân kích hoạt: Nhân viên nhập liệu. 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ử. Các bƣớc trong UC này:  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. Mẫu nhập liệu xuất hiện trên màn hình.  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 Phát triển phần mềm bằng UML trang | 196
  59. Nhaän phaûn hoài töø ñaët tröôùc Thöïc hieän möôïn Thöïc hieän ñ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ả”.  Mô tả UC: Chọn tác giả sách từ danh sách tác giả. Tác nhân kích hoạt : Nhân viên nhập liệu. 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. Các bƣớc trong UC này:  Nhấn phím “Đệ trình”trong cửa sổ tìm kiếm. Kích hoạt cơ chế truyền dữ liệu trên mạng. Mẫu dữ liệu tìm kiếm đến mô tơ tìm kiếm trong CSDL. 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 | 197
  60. > > Choïn taùc gi aû Nhaän thoâng tin veà taùc gi aû > > > 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 gi aû 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ả”.  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ả”.  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.  Các bƣớc trong UC này: Phát triển phần mềm bằng UML trang | 198
  61.  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ả.  Gửi thông tin đến cửa sổ nhập dữ liệu tác giả .  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”.  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.  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.  Các bƣớc trong UC này: 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ị.  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ữ.  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”.  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 . 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. Các bƣớc trong UC này:  Dữ liệu đa phƣơng tiện đến CSDL, tiến trình tạo bản ghi mới bắt đầu. Kết quả của tiến trình có thể tốt hay có thể hỏng 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”.  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. 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.  Các bƣớc trong UC này:  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. Chọn và sửa thông tin sai trong bản ghi  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”.  Mô tả UC:Độc giả có thể đặt trƣớc sách sẽ mƣợn. 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ả Phát triển phần mềm bằng UML trang | 199
  62. 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ử. Các bƣớc trong UC này:  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 CSDL nhận yêu cầu đặt trƣớc. Thực hiện kiểm tra dữ liệu và bản ghi CSDL.  Hệ thống kiểm tra đầu sách còn lại, thựchiện đặt trƣớc. 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”.  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.  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.  Các bƣớc trong UC này:  Lấy trạng thái thực hiện đặt trƣớc. Gửi trạng thái đến ngƣời dùng qua mạng. 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”.  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. 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.  Các bƣớc trong UC này:  Nhận tổng số đầu sách yều cầu đặt trƣớc. Đếm số sách còn trong thƣ viện.  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”.  Mô tả UC :Cho lại đầu sách còn chƣa cho mƣợn. 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. Các bƣớc trong UC này:  Nhận tổng số đầu sách yêu cầu đặt trƣớc truyền đến. Kiểm tra kết quả để xác định trạng thái đặt trƣớc. 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”.  Mô tả UC :Độc giả muốn mƣợn sách.  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 . Các bƣớc trong UC này: Phát triển phần mềm bằng UML trang | 200
  63.  Thủ thƣ kích hoạt giao diện để nhận sách trả hay cho mƣợn. 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. 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” 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.  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. Các bƣớc trong UC này:  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. Truyền trạng thái qua mạng đến màn hình thủ thƣ. Nếu còn đầu sách thì độc giả lấy nó. 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 Nhaän laïi toång soá ñaàu saùch coøn Nhaän Söûa thoâng tin ñaàu saùch ñang toàn taïi 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 | 201
  64. 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 | 202
  65. 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 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 ý. Phát triển phần mềm bằng UML trang | 203
  66. 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ả. GUI Thö vieän ñieän Baûn ghi ñaêït CSDL ñaët tröôùc töû tröôùc 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 | 204
  67. 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ƣ 3. Thủ thƣ nhập dữ liệu cần thiết 4. Dữ liệu mƣợn đƣợc truyền đến hệ thống thƣ viện Truyền dữ liệu mƣợn tài liệu 1. Thủ thƣ nhấn phím “Đệ trình”trên cửa sổ cho mƣợn,dữ liệu mƣợn đƣợc truyền đến hệ thống thƣ viện . Phát triển phần mềm bằng UML trang | 205
  68. 2. Hệ thống nhận dữ liệu ,yêu cầu mới về mƣợn tài liệu đƣợc gửi đến CSDL cho mƣợn. 3. Yêu cầu đƣợc gửi đến CSDL cho mƣợn,chờ thông tin xác nhận. Khi dữ liệu đƣợc truyền đến CSDL cho mƣợn,cơ chế bổ sung bản ghi mới vào CSDL đƣợc kích hoạt .Thao tác này sẽ kết hợp với các UC trong gói “Cho mƣợn”(hình 8.15),bao gồm “Nhận yêu cầu mƣợn sách”, “Thực hiện mƣợn”,”Truyền kết quả mƣợn”. Nhận yêu cầu mƣợn sách . 1. CSDL cho mƣợn nhận yêu cầu thực hiện tạo bản ghi mới. 2. Kích hoạt tiến trình tạo và bổ sung bản ghi mới vào CSDL. Thực hiện mƣợn . 1. CSDL kích hoạt cơ chế tạo bản ghi mới. 2. Nhận kết quả tạo bản ghi. 3. Gửi kết quả đến hệ thống thƣ viện. Truyền kết quả mƣợn . 1. Kết quả tiến trình mƣợn đƣợc gửi đến hệ thống . 2. Truyền kết quả đến giao diện thủ thƣ . Tiến trình đƣợc tiếp tục lại với UC trong gói “Sách” . Nhận phản hồi từ mƣợn sách . 1. Giao diện thủ thƣ đã nhận kết quả từ tiến trình mƣợn. 2. Giải mã kết quả , hiển thị thông điệp trên màn hình. 3. Gửi yêu cầu nhận trạng thái trong bản ghi mƣợn của độc giả đến CSDL cho mƣợn. 4. Danh sách bản ghi đƣợc lấy ra từ CSDL cho mƣợn. 5. Hiển thị danh sách trên màn hình. Giao dieän thuû Thö vieän ñieän Baûn ghi cho CSDL cho möôïn thö töû möôïn Phát triển phần mềm bằng UML trang | 206