Giáo trình Phân tích thiết kế hệ thống hướng đối tượng bằng UML (Phần 2)

pdf 104 trang phuongnguyen 7031
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Phân tích thiết kế hệ thống hướng đối tượng bằng UML (Phần 2)", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

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

  • pdfgiao_trinh_phan_tich_thiet_ke_he_thong_huong_doi_tuong_bang.pdf

Nội dung text: Giáo trình Phân tích thiết kế hệ thống hướng đối tượng bằng UML (Phần 2)

  1. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Chương 7 XÂY DỰNG SƠ ĐỒ LỚP ĐỐI TƯỢNG HỆ THỐNG Mục tiêu: - Các khái niệm về sự phân loại - Tìm các lớp đối tượng với các phương pháp: cụm danh từ, phân loại đối tượng và sử dụng sơ đồ use case - Xác định liên kết giữa các lớp - Xác định thuộc tính và phương thức của lớp Giới thiệu Phân tích hướng đối tượng là một tiến trình mà qua đĩ chúng ta cĩ thể định dạng được các lớp đĩng một vai trị quan trọng nhằm đạt được mục tiêu và yêu cầu hệ thống. Mơ hình hố đối tượng là một tiến trình mà trong đĩ, các đối tượng trong một hệ thống thực được thể hiện bởi các đối tượng luận lý trong các sơ đồ và trong chương trình. Sự thể hiện trực quan này của các đối tượng và quan hệ giữa chúng cho phép dễ dàng hiểu về đối tượng của hệ thống. Tuy nhiên, việc xác định lớp là một cơng việc khĩ nhất bởi vì khơng cĩ một cấu trúc lớp nào hồn hảo cũng như khơng cĩ một cấu trúc nào hồn tồn đúng. Trong phần dưới đây sẽ trình bày về cách để phát triển các mơ hình đối tượng bằng cách xây dựng các sơ đồ lớp mơ tả việc phân loại đối tượng hệ thống. Trước tiên, chúng ta sẽ ơn lại các khái niệm cơ bản của sơ đồ lớp. Sau đĩ, chúng ta sẽ được giới thiệu xây dựng sơ đồ lớp thơng qua việc giới thiệu lần lượt về các cách tiếp cận để phân loại đối tượng và xác định lớp, cách xác định liên kết giữa các lớp cũng như thuộc tính và phương thức của lớp. Sơ đồ lớp (Class diagram) Các khái niệm Đối tượng Trong tiếp cận hướng đối tượng, chúng ta mơ hình hố hệ thống bằng các đối tượng, nghĩa là nhìn hệ thống như là một đối tượng . Do đĩ, trước khi tiếp cận để mơ hình hố hệ thống. Chúng ta cần phải hiểu như thể nào là một đối tượng (object). Cĩ nhiều nguồn mơ tả hoặc định nghĩa về đối tượng, tuy nhiên trong tài liệu này chúng ta cĩ thể tổng hợp lại như sau: một đối tượng là một thực thể cĩ một vai trị xác định rõ ràng trong lãnh vực ứng dụng, cĩ trạng thái, hành vi và định danh. Một đối tượng là một khái niệm, một sự trừu tượng hố hoặc một sự vật cĩ ý nghĩa trong phạm vi ngữ cảnh của hệ thống. Đối tượng được cĩ thể là một thực thể hữu hình, trực quan (như là: con người, vị trí, sự vật, ); cĩ thể là một khái niệm, sự kiện (ví dụ: bộ phận, đặng ký, ); cĩ thể là một khái niệm trong tiến trình thiết kế (như là: User interface, Controller, Scheduler, ) Lớp (class) Là một tập hợp các đối tượng chia sẽ chung một cấu trúc và hành vi (cùng thuộc tính, hoạt động, mối quan hệ và ngữ nghĩa). Cấu trúc được mơ tả bởi các thuộc tính và các mối quan hệ, cịn hành vi được mơ tả bởi các hoạt động. Một lớp là một sự trừu tượng hố của các đối tượng thế giới thực, và các đối tượng tồn tại trong thế giới thực được xem như là các thể hiện của lớp. @ Đại Học KHTN-TP HCM ; ASIA-ITC 88
  2. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Ký hiệu: lớp được trình bày gồm ba phần: tên lớp, danh sách các thuộc tính (attribute), danh sách các hoạt động (operation). Trong đĩ, phần thuộc tính và phần hoạt động cĩ thể bị che dấu đi trong mức độ trình bày tổng quan. Tên class Tên class Tên class Thuộc tính Method Ví dụ: biểu diễn tập hợp các đơn hàng NGK, khách hàng mua NGK, nhà cung cấp NGK, cùng chia sẽ chung thuộc tính, hoạt động, mối quan hệ và ngữ nghĩa thành các lớp: Đơn hàng Khách hàng Nhà cung cấp Số ĐH Họ tên KH Họ tên NCC Ngày lập Dia chỉ Địa chỉ Số tiền Điện thoại Điện thoại Tính_Trị_giá () Mối kết hợp (association) Mối kết hợp nhị phân: là quan hệ ngữ nghĩa được thiết lập giữa hai hay nhiều lớp, biểu diễn bởi những thành phần sau: - Tên quan hệ: thường là cụm động từ phản ánh mục đích của mối kết hợp - Vai trị quan hệ (role): là một phần của mối kết hợp dùng để mơ tả ngữ nghĩa tham gia của một lớp vào mối kết hợp đĩ (khơng phải một phần của lớp). Mỗi quan hệ cĩ thể cĩ 2 vai trị (quan hệ nhị phân) hoặc nhiều hơn (quan hệ đa phân). o Tên vai trị: dùng động từ hoặc danh từ (cụm danh từ) để biểu diễn vai trị của các đối tượng. Trong mối kết hợp làm việc tại cĩ hai vai trị, làm tại và gồm cho biết: nhân viên làm việc tại phịng ban và phịng ban gồm cĩ các nhân viên trực thuộc. o Bản số: là cặp giá trị (mincard, maxcard) xác định khoảng giá trị cho phép một đối tượng của một lớp cĩ thể tham gia bao nhiêu lần vào mối kết hợp với các đối tượng của các lớp khác. Giá trị mincard: qui định về ràng buộc tối thiểu của một đối tượng tồn tại trong lớp phải tham gia vào mối kết hợp với một số lượng lớn hơn hoặc bằng. Giá trị maxcard: qui định số lượng tối đa mà một đối tượng của lớp nếu tồn tại trong lớp đĩ khơng được tham gia vào mối kết hợp vượt giá trị này. Bản số mối kết hợp dưới cho biết một nhân viên phải thuộc ít nhất và nhiều nhất (duy nhất) một phịng ban, tuy nhiên mỗi đối tượng phịng ban cĩ thể tồn tại mà khơng cĩ nhân viên làm việc thuộc phịng. Các mẫu bản số thừơng là: 0 1, 1 1, 3 5, 0 *, 1 *, 2 * Nhân viên Làm việc tại Phòng ban 0 * 1 1 gồm làm tại @ Đại Học KHTN-TP HCM ; ASIA-ITC 89
  3. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Đơn hàng Khách hàng 1 * 1 1 Có Lập bởi p1 nv1 d1 k1 nv2 d2 p2 k2 nv3 p3 d3 k3 nv4 p4 d4 k4 nv5 d5 Nhân viên Phịng ban Đơn hàng Khách hàng Tổng quát, cho hai lớp C1, C2 và mối kết hợp A giữa chúng. Tùy theo giá trị bản số tối thiểu chúng ta cĩ những trường hợp sau: ƒ Nếu mincard (C1,A) = 0 thì chúng ta nĩi rằng lớp C1 cĩ sự tham gia tùy ý trong mối kết hợp bởi vì một đối tượng của lớp C1 cĩ thể khơng tham gia kết hợp với đối tượng lớp C2 trong mối kết hợp A. ƒ Nếu mincard (C1,A) >0 thì chúng ta nĩi rằng lớp C1 cĩ sự tham gia bắt buộc vào mối kết hợp bởi vì một đối tượng của lớp C1 phải bắt buộc tham gia kết hợp với ít nhất một phần tử của lớp C2 trong mối kết hợp A. Tùy theo giá trị của bản số tối đa mà chúng ta cĩ các trường hợp sau: ƒ Nếu maxcard(C1,A) = 1 và maxcard(C2,A) = 1 thì ta gọi là mối kết hợp một - một (one- to – one) ƒ Nếu maxcard(C1,A) = 1 và maxcard(C2,A) = n thì ta gọi là mối kết hợp một - nhiều (one- to – many) ƒ Nếu maxcard(C1,A) = n và maxcard(C2,A) = 1 thì ta gọi là mối kết hợp nhiều - một (many- to – one) ƒ Nếu maxcard(C1,A) = n và maxcard(C2,A) = n thì ta gọi là mối kết hợp nhiều - nhiều (many- to – many) o Tính khả điều hướng (navigability): được mơ tả bởi một mũi tên chỉ ra hướng truy xuất trong mối kết hợp từ một đối tượng của lớp đến một đối tượng của lớp cịn lại. Tính khả điều hướng cĩ thể là khơng cĩ, hoặc chỉ một, hoặc cả hai. Ví dụ trên cho thấy chiều mũi tên trong mối kết hợp làm việc tại cho biết chúng ta cĩ thể truy cập lớp phịng ban từ mối kết hợp, tuy nhiên, chúng ta khơng thể truy xuất tới lớp nhân viên từ mối kết hợp này. Hoặc trong mối kết hợp giữa lớp Đơn hàng và Khách hàng, hướng truy xuất là cĩ thể cho cả hai lớp (khơng cĩ chiều mũi tên) - Mối kết hợp phản thân: một mối kết hợp cĩ thể được thiết lập từ một lớp đến chính nĩ. Ví dụ mối kết hợp quản lý được thiết lập giữa lớp Nhân viên tới chính nĩ cho biết một nhân viên quản lý những nhân viên khác. @ Đại Học KHTN-TP HCM ; ASIA-ITC 90
  4. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Quản lý 0 1 Nhân viên 0 * - Mối kết hợp đa phân: là mối kết hợp được thiết lập từ ba lớp trở lên. Ký hiệu mối kết hợp đa phân là một hình thoi với hơn ba vai trị nối tới các lớp tham gia. Đây là mối kết hợp được thừa hưởng từ cách tiếp cận truyền thống của mơ hình thực thể - kết hợp (ER). Tuy nhiên, mối kết hợp đa phân khơng cho phép quan hệ thu nạp, bản số phức tạp. Do đĩ, trong cách sử dụng chúg ta thường thay thế nĩ bằng một lớp và đưa về mối kết hợp nhị phân. Năm học Môn học Sinh viên Mở mơn học Lớp kết hợp Khi một mối kết hợp cĩ các đặc trưng (thuộc tính, hoạt động, và các mối kết hợp), chúng ta tạo một lớp để chứa các thuộc tính đĩ và kết nối với mối kết hợp, lớp này được gọi là lớp kết hợp. Tên của lớp này chính là tên của mối kết hợp, trong trường hợp lớp này cĩ thuộc tính nhưng khơng cĩ hoạt động hoặc bất kỳ mối kết hợp nào khác, thì tên của mối kết hợp vẫn duy trì trên mối kết hợp và để trống phần tên của lớp này để duy trì tính tự nhiên của nĩ. Môn học 0 * Sinh viên 1 * Kết quả Điểm Trường hợp phổ biến nhất của lớp kết hợp là mối kết hợp nhiều - nhiều. Ví dụ trên cho thấy, sinh viên tham gia các mơn học khác nhau và mỗi lần đăng ký học, sinh viên sẽ cĩ một kết quả được ghi nhận bởi điểm thi. Vậy điểm thi là một thuộc tính được hình thành thơng qua việc tham gia học tập của một sinh viên trên một mơn học nên nĩ là thuộc tính của mối kết hợp. Nhân viên 0 * được quản ly 0 1 quản lý Đánh giá Ngày_BĐ Ngày_KT Ngày đánh giá Kquả đánh giá @ Đại Học KHTN-TP HCM ; ASIA-ITC 91
  5. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Quan hệ thu nạp (aggregation) và quan hệ thành phần (composition, a-part-of) - Quan hệ thu nạp (aggregation): mơ tả mối quan hệ giữa một đối tượng lớn hơn được tạo ra từ những đối tượng nhỏ hơn. Một loại quan hệ đặc biệt này là quan hệ “cĩ”, nĩ cĩ nghĩa là một đối tượng tổng thể cĩ những đối tượng thành phần. Ví dụ dưới đây cho thấy, Gia đình là một đối tượng tổng thể cĩ những Thành viên trong gia đình. Gia đình Thành viên 0 1 Có 0 * Dự án 0 1 Gồm có 0 * Giai đoạn Đội 1 * Vận động viên 0 * Con người 1 * Đia chỉ 0 * 1 1 Nhà 0 1 Một đối tượng thành phần cũng cĩ thể tham gia kết hợp với nhiều đối tượng tổng thể khác nhau, trường hợp này gọi là chia sẽ. Ví dụ một vận động viên cĩ quan hệ tới một đội với ý nghĩa là một phần tử của đội, tuy nhiên vận động viên này cũng cĩ thể thành viên của một đội khác, trường hợp này gọi là sự chia sẽ. Do đĩ, nếu một đội bị hủy bỏ, thì khơng nhất thiết phải huỹ bỏ vận động viên này. - Quan hệ thành phần (composition) là một loại đặc biệt của quan hệ thu nạp, nĩ cĩ một sự liên hệ mạnh mẽ hơn để trình bày thành phần của một đối tượng phức hợp. Quan hệ thành phần cũng được xem như là quan hệ thành phần - tổng thể (part- whole), và đối tượng tổng hợp sẽ quản lý việc tạo lập và huỷ bỏ của những đố tượng thành phần của nĩ. Xe hơi 1 1 1 1 1 1 1 1 4 1 1 4 10 2 5 Bánh xe Đèn Cửa Động cơ @ Đại Học KHTN-TP HCM ; ASIA-ITC 92
  6. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Hoá đơn 1 1 Dòng hoá đơn 1 * Như vậy, quan hệ thành phần mơ tả sự phụ thuộc rất chặt chẽ giữa lớp tổng thể đến lớp thành phần về sự phụ thuộc. Nghĩa là các lớp thành phần là một bộ phận cấu tạo nên lớp tổng thể và thể hiện vật lý của nĩ là nằm trong lớp tổng thể. Ví dụ trên cho thấy, mộ chiếc xe hơi được làm nên bởi những bánh xe, đèn, cửa, động cơ, việc tạo thành một chiếc xe hơi là việc lắp ráp các thành phần này. Cũng như hố đơn chứa các dịng hố đơn trong đĩ, một hố đơn bị huỹ nghĩa là các địng của hĩa đơn đĩ cũng sẽ bị huỹ theo. Quan hệ tổng quát hĩa Là quan hệ được thiết lập giữa một lớp tổng quát hơn đến một lớp chuyên biệt. Quan hệ này dùng để phân loại một tập hợp đối tượng thành những loại xác định hơn mà hệ thống cần làm rõ ngữ nghĩa. Xe Xe tải Xe bus Xe hơi Nhân viên Mã_NV Phòng ban Họ tên 0 * Địa chỉ 1 1 gồm Điện thoại làm tại Thư ký Kỹ sư Nhân viên quản lý Kỹ năng ngoại ngữ Chuyên ngành Số lượng NV trực thuộc Hoá đơn Hoá đơn khách quen Ví dụ trên đây chỉ ra rằng, tất cả các lớp chuyên biệt Thư ký, Kỹ sư, Nhân viên quản lý đều cĩ thể kế thừa các thuộc tính (Mã_NV, Họ tên, Địa chỉ, Điện thoại) của lớp tổng quát Nhân viên và mối kết hợp giữa lớp Nhân viên với Phịng ban. @ Đại Học KHTN-TP HCM ; ASIA-ITC 93
  7. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Trong mối kết hợp tổng quát hố, một thể hiện của lớp chuyên biệt cũng là một thể hiện của lớp tổng quát. Ví dụ trên cho thấy một đối tượng Kỹ sư, hoặc Thư ký, hoặc Nhân viên quản lý đều là một đối tượng của lớp Nhân viên. Vì lý do đĩ, đặc trưng của loại kết hợp này là tính kế thừa, một lớp chuyên biệt cĩ thể kế thừa tất cả các đặc trưng (thuộc tính, mối kết hợp, hoạt động) của lớp tổng quát. Sự tương quan của các lớp trong quan hệ tổng quát hố Sự tương quan giữa các lớp chuyên biệt với lớp tổng quát: - Tập hợp các đối tượng của tất cả các lớp chuyên biệt phủ tồn bộ tập đối tượng của lớp tổng quát thì gọi là tồn phần (complete). - Tập hợp các đối tượng của tất cả các lớp chuyên biệt khơng phủ tồn bộ tập đối tượng của lớp tổng quát thì gọi là bán phần (incomplete). Sự tương quan giữa các lớp chuyên biệt: - Khơng tồn tại một đối tượng của lớp tổng quát thuộc hai lớp chuyên biệt trở lên thì gọi là riêng biệt (disjoint). - Tồn tại một đối tượng của lớp tổng quát thuộc hai lớp chuyên biệt trở lên thì gọi là chồng lắp (overlapping). Tập tổng quát Tập tổng quát Tập Tập Tập chuyên chuyên chuyên Tập biệt biệt biệt chuyên biệt Chuyên biệt bán phần, chồng Chuyên biệt tồn phần, riêng lắp biệt Tập tổng quát Tập tổng quát Tập chuyên biệt Tập chuyên Tập biệt chuyên Tập biệt chuyên biệt Chuyên biệt bán phần, riêng Chuyên biệt tồn phần, chồng biệt lắp Hình 3. Sự tương quan giữa các lớp trong quan hệ tổng quát hố Như vậy, trong quan hệ tổng quát hố, sự tương quan giữa các lớp được biểu diễn quan bốn trường hợp (bán phần - chồng lắp, bán phần - riêng biệt, tồn phần - chồng lắp, tồn phần – riêng biệt). Sự tương quan này phản ánh ràng buộc ngữ nghĩa trong tập hợp các đối tượng của quan hệ: một đối tượng của lớp chuyên biệt này cĩ thể là đối tượng trong lớp chuyên biệt khác hay khơng? Và một đối tượng trong lớp tổng quát cĩ thể khơng thuộc một lớp chuyên biệt nào hay khơng?. @ Đại Học KHTN-TP HCM ; ASIA-ITC 94
  8. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Ví dụ, quan hệ tổng quát hố giữa Xe – Xe tải, Xe bus, Xe hơi cĩ sự tương quan là bán phần – riêng biệt (incomplete, disjoint). Quan hệ giữa Nhân viên – Thư ký, Kỹ sư, Nhân viên quản lý cĩ sự tương quan là bán phần - chồng lắp (incomplete, overlapping). Đa kế thừa Đa số các trường hợp trong quan hệ tổng quát hố là đơn kế thừa, nơi mà một lớp là chuyên biệt duy nhất cho một lớp tổng quát. Trong một số trường hợp đặc biệt chúng ta cũng thấy một lớp chuyên biệt cĩ thể kế thừa từ hai hoặc nhiều lớp tổng quát. Trường hợp này gọi là đa kế thừa. Ví dụ sau cho thấy, lớp Giáo viên_Nhà nghiên cứu là lớp đa kế thừa từ hai lớp Giáo viên và lớp Nhà nghiên cứu. Lớp này sẽ thừa kế tất cả các đặc trưng như: Giờ chuẩn giảng dạy, Chủ đề nghiên cứu, Phân_cơng_Lớp và Phân_cơng_Đề_tài của hai lớp trên. Tuy nhiên, theo lời khuyên của các chuyên gia thì khơng nên sử dụng đa kế thừa vì tính chất phức tạp của nĩ. Do đĩ, đa kế thừa khơng được đưa vào ngơn ngữ UML gốc và một số ngơn ngữ hướng đối tượng khác. Đối tượng đào tạo Mã số Họ tên Ngày sinh Địc chỉ Giáo viên Nhà nghiên cứu Sinh viên Giờ chuẩn giảng dạy Chủ đề nghiên cứu Phân_công_Lớp (Integer mlop) Phân_công_Đề_tài (Integer mDetai) Giáo viên_Nhà nghiên cứu Quan hệ hoặc (OR) Là mối quan hệ xác định một tình huống mà trong đĩ hai (hoặc nhiều) lớp tham gia mối kết hợp với một lớp thứ ba với ràng buộc loại trừ. Một thể hiện của lớp thứ ba sẽ tham gia kết hợp loại trừ với các đối tượng của hai lớp kia (hoặc là khơng kết hợp, hoặc kết hợp chỉ các đối tượng của một trong hai lớp) tại một thời điểm. Ví dụ dưới đây cho thấy, một hợp đồng cĩ thể được lập bởi một cơng ty hoặc bởi một khách hàng lẽ. Hoặc một chiếc xe hơi thì được sở hữu bởi một cá nhân hoặc bởi một cơng ty, khơng sở hữu một lúc bởi cả hai. Công ty 0 1 Hợp đồng 0 * {or} 0 * 0 1 Khách lẽ @ Đại Học KHTN-TP HCM ; ASIA-ITC 95
  9. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Công ty 0 1 0 * Xe hơi {or} 0 * 0 1 Cá nhân Thực chất của mối kết hợp OR cũng chính là một ràng buộc ngữ nghĩa giữa các lớp tham gia kết hợp với một lớp thứ ba: sự hiện diện tham gia của đối tượng này sẽ khơng cho phép sự tham gia của đối tượng kia và ngược lại. Thuộc tính (attribute) Thuộc tính dùng để mơ tả đặc trưng của đối tượng, người ta cĩ thể chia thuộc tính thành ba loại sau: - Thuộc tính đơn trị: là thuộc tính chỉ cĩ một giá trị duy nhất cho một đối tượng, đây là thuộc tính phổ biến nhất. Ví dụ: họ tên, ngày sinh, lương, - Thuộc tính đa trị: là thuộc tính cĩ thể cĩ nhiều giá trị cho một đối tượng. Ví dụ: nếu chúng ta muốn lưu nhiều số điện thoại của một nhân viên, chúng ta cĩ thể đặt thuộc tính số điện thoại trong lớp nhân viên là đa trị. - Thuộc tính tham chiếu. Biểu diễn một thuộc tính Thuộc tính được biểu diễn gồm những thành phần như sau: : = : nhận một trong những giá trị sau: + tồn cục (cĩ thể truy cập bởi tất cả lớp) # bảo vệ (cĩ thể truy cập bởi lớp và lớp chuyên biệt của nĩ) - riêng (chỉ được truy cập bởi lớp) Bản số: là một cặp (số tối thiểu, số tối đa) mà thuộc tính cĩ thể cĩ giá trị. - số tối thiểu= 0 Ỉ thuộc tính được gọi là khơng bắt buộc. - số tối thiểu = 1 Ỉ thuộc tính được gọi là bắt buộc. - số tối đa = 1 Ỉ thuộc tính đơn trị. - số tối đa > 1 Ỉ thuộc tính đa trị Ví dụ: Số điện thoại[0 *]: string, Địa chỉ[0 1]: string, Trong giai đoạn phân tích việc xác định thuộc tính thường chỉ bao gồm xác định tên thuộc tính (cĩ thể thêm kiểu dữ liệu), các đặc điểm khác của thuộc tính sẽ được xác định lại trong giai đoạn thiết kế. Thuộc tính quan hệ (Qualifier) Là một thuộc tính quan hệ (khơng phải của lớp). Nghĩa là thuộc tính này sẽ hình thành từ một quan hệ giữa các lớp. Nhằm thực hiện việc thiết lập mối liên kết giữa một tập thể hiện với một thể hiện khác. Một đối tượng và một giá trị của thuộc tính qualifier sẽ xác lập một định danh duy nhất, hình thành nên khố phức hợp. @ Đại Học KHTN-TP HCM ; ASIA-ITC 96
  10. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Dòng đặt hàng Ngân hàng Mã SP Số TK 0 * 0 * 0 1 0 1 Sản phẩm Khách hàng Tên sản phẩm Đơn giá Xem xét mối kết hợp giữa lớp Sản phẩm và lớp Dịng đặt hàng của đơn đặt hàng. Một dịng trong đơn hàng sẽ liên quan đến một sản phẩm sẽ được đặt, mỗi dịng đơn hàng tham chiếu đến duy nhất một sản phẩm, trong khi đĩ mỗi sản phẩm cĩ thể được đặt trong nhiều dịng đơn hàng của những đơn hàng khác nhau. Mối liên kết qualifier cĩ thuộc tính Mã SP cho biết: mỗi sản phẩm cĩ duy nhất một Mã SP và Dịng đơn hàng liên kết với Sản phẩm sử dụng Mã SP. Định danh (identifier) Định danh là một hoặc nhiều thuộc tính của lớp cĩ giá trị xác định duy nhất cho một đối tượng của lớp. Các cách tiếp cận xác định lớp đối tượng Gần như khơng cĩ một phương thức chung để xác định các lớp của một hệ thống. Thơng thường đây là một quá trình sáng tạo và lặp lại qua nhiều vịng lặp và cần phải cĩ sự thống nhất với các chuyên gia trong lãnh vực ứng dụng nghiệp vụ. Cĩ nhiều phương pháp tiếp cận để xác định lớp. Cĩ phương pháp đề nghị tiến hành mơ hình hố nghiệp vụ, chỉ ra phạm vi bài tốn nghiệp vụ sẽ được tự động hố mà kết quả của nĩ sẽ cung cấp các lớp cho hệ thống tương ứng với việc tự động hố việc quản lý, lưu trữ các đối tượng thơng tin (thực thể) đã đuợc thống nhất trên các yêu cầu với người dùng xử lý nghiệp vụ. Cĩ phương pháp để xuất xác định tất cả các lớp thuộc phạm vi bài tốn, mối quan hệ của chúng. Sau đĩ, sẽ phân tích use case và phân bổ trách nhiệm các lớp theo use case. Cĩ phương pháp đề xuất lấy mơ hình use case làm nền tảng để tìm lớp (use case - driven), và trong quá trình xác định trách nhiệm thực hiện của use case thì các lớp sẽ được tìm thấy. Vì quá trình xác định lớp trong giai đoạn này là một quá trình lặp lại mà kết quả của bước sau cĩ thể làm thay đổi các kết quả của bước trước, cho nên các lớp được tìm thấy thường được gọi là lớp ứng viên (candidate class). Dưới đây chúng ta đề cập đến một số kỹ thuật tiếp cận để xác định lớp: tiếp cận theo cụm danh từ; tiếp cận theo mẫu chung; và tiếp cận theo use case. Tiếp cận theo cụm danh từ (noun phrase) Phương pháp tiếp cận theo cụm danh từ được đề xuất bởi Rebecca Wirfs-Brock, Brian Wilkerson, và Lauren Wiener. Phương pháp đề xuất việc xác định các lớp thơng qua việc đọc trong các văn bản mơ tả use case hoặc các mơ tả yêu cầu để tìm kiếm và trích lọc các cụm danh từ. Các cụm danh từ cĩ thể được xem là các ứng viên của các lớp và các động từ là các ứng viên của phương thức (method) của lớp. Tất cả danh từ hoặc cụm danh từ tìm được sẽ được phân thành ba loại: - Các lớp hiển nhiên @ Đại Học KHTN-TP HCM ; ASIA-ITC 97
  11. Phân tích thiết kế hệ thống hướng đối tượng bằng UML - Các lớp mờ - Các lớp giả tạo Class hiển Class mờ Class giả tạo nhiên Đầu tiên tất cả lớp thuộc loại lớp giả sẽ bị loại bỏ, vì nĩ khơng cĩ mục đích hoặc khơng cần thiết để sử dụng. Các lớp thuộc hai loại cịn lại sẽ trở thành các ứng viên. Quy trình xác định như sau: Xác định các danh Danh từ, cụm từ, cụm danh từ danh từ Mơ tả use case, yêu cầu Đồng nhất các class Danh từ, cụm danh Loại bỏ các danh từ trùng nghĩa từ ứng viên mơ tả class giả Loại các danh từ Loại các class khơng Danh sách các thuộc tính cĩ mục tiêu class Khởi tạo danh sách các lớp ứng viên - Tìm các danh từ hoặc các cụm danh từ trong các mơ tả use case, yêu cầu - Tất cả các lớp phải cĩ ý nghĩa trong lãnh vực ứng dụng, tránh đưa vào các lớp cài đặt được mơ tả trong giai đoạn thiết kế. - Đặt tên cho lớp Trích lọc trong use case và mơ tả use case của hệ thống ATM, chúng ta cĩ những danh từ và cụm danh từ sau: Tài khoản Bao thư Số dư tài khoản Bốn ký số Số tiền Ngân quỹ Tiến trình đăng nhập Tiền Thẻ ATM PIN Máy ATM PIN khơng hợp lệ @ Đại Học KHTN-TP HCM ; ASIA-ITC 98
  12. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Ngân hàng Thơng điệp Khách hàng ngân hàng Mật khẩu Thẻ Mã PIN Tiền mặt Mẫu tin Khách hàng Bước Tài khoản khách hàng Hệ thống VND Giao dịch Lịch sử giao dịch Loại bỏ các lớp giả Các lớp ứng viên phải thuộc loại lớp hiển nhiên và lớp mờ. Các lớp giả sau đây sẽ bị loại khỏi danh sách: Bao thư, Bốn ký số, Bước. Tài khoản Bao thư Số dư tài khoản Bốn ký số Số tiền Ngân quỹ Tiến trình đăng nhập Tiền Thẻ ATM PIN Máy ATM PIN khơng hợp lệ Ngân hàng Thơng điệp Khách hàng ngân hàng Mật khẩu Thẻ Mã PIN Tiền mặt Mẫu tin Khách hàng Bước Tài khoản khách hàng Hệ thống VND Giao dịch Lịch sử giao dịch Đồng nhất các lớp ứng viên trùng lắp Cần rà sốt lại danh sách để tìm kiếm các danh từ, cụm danh từ trùng lắp về ý nghĩa mặc dù cách dùng từ cĩ khác nhau. Chúng ta chọn lựa danh từ, hoặc cụm danh từ chứa đầy ngữ nghĩa nhất và loại những danh từ, cụm danh từ khác. Khách hàng, Khách hàng ngân hàng = Khách hàng Tài khoản, Tài khoản khách hàng = Tài khoản PIN, Mã PIN = PIN Tiền, Ngân quỹ = Ngân quỹ Thẻ ATM, Thẻ = Thẻ ATM Tài khoản Bao thư Số dư tài khoản Bốn ký số @ Đại Học KHTN-TP HCM ; ASIA-ITC 99
  13. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Số tiền Ngân quỹ Tiến trình đăng nhập Tiền Thẻ ATM PIN Máy ATM PIN khơng hợp lệ Ngân hàng Thơng điệp Khách hàng ngân hàng Mật khẩu Thẻ Mã PIN Tiền mặt Mẫu tin Khách hàng Bước Tài khoản khách hàng Hệ thống VND Giao dịch Lịch sử giao dịch Xác định các danh từ, cụm danh từ cĩ thể là các thuộc tính Các danh từ hoặc cụm danh từ là các thuộc tính khi: - Chỉ được sử dụng như là giá trị - Khơng cĩ nhiều hơn một đặc trưng riêng, hoặc chỉ mơ tả một đặc trưng của đối tượng khác. Xem xét các danh từ, cụm danh từ cĩ thể là thuộc tính của danh sách trên ta cĩ: Số tiền: một giá trị, khơng phải một lớp Số dư tài khoản: thuộc tính của lớp Tài khoản PIN khơng hợp lệ: một giá trị, khơng phải một lớp Mật khẩu: một thuộc tính (cĩ thể của lớp Khách hàng) Lịch sử giao dịch: một thuộc tính (cĩ thể của lớp Giao dịch) PIN: một thuộc tính (cĩ thể của lớp Khách hàng) Sau đây là danh sách các ứng viên cịn lại: Tài khoản Bao thư Số dư tài khoản Bốn ký số Số tiền Ngân quỹ Tiến trình đăng nhập Tiền Thẻ ATM PIN Máy ATM PIN khơng hợp lệ Ngân hàng Thơng điệp Khách hàng ngân hàng Mật khẩu Thẻ Mã PIN Tiền mặt Mẫu tin Khách hàng Bước @ Đại Học KHTN-TP HCM ; ASIA-ITC 100
  14. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Tài khoản khách hàng Hệ thống VND Giao dịch Lịch sử giao dịch Loại bỏ các lớp ứng viên khơng cĩ mục tiêu hoặc khơng thuộc phạm vi hệ thống Mỗi lớp phải cĩ một mục tiêu khi thuộc hệ thống, mục tiêu này phải thật rõ ràng trong ngữ cảnh mục tiêu chung hệ thống. Nếu chúng ta khơng thể diễn đạt mục tiêu của lớp trong hệ thống thì loại ra khỏi danh sách. Hoặc các lớp mặc dù cĩ tham gia vào hoạt động của hệ thống, tuy nhiên nĩ khơng thuộc phạm vi quản lý của hệ thống sẽ bị loại ra. Các lớp ứng viên là: Máy ATM: cung cấp một giao diện tới ngân hàng Thẻ ATM: cung cấp một khách hàng với một khố tới một tài khoản Khách hàng: một khách hàng là một cá nhân sử dụng máy ATM, cĩ một tài khoản. Ngân hàng: các khách hàng phụ thuộc vào ngân hàng. Nĩ là một nơi tập trung các tài khoản và xử lý các giao dịch tài khoản. Tài khoản: nĩ mơ hình hố một tài khoản của khách hàng và cung cấp các dịch vụ về tài khoản cho khách hàng Giao dịch: mơ tả một giao tác của khách hàng khi sử dụng thẻ ATM. Một giao tác được lưu trữ với thời gian, ngày, loại, số tiền, và số dư. Các danh từ, cụm danh từ khơng cĩ mục đích hoặc khơng thuộc phạm vi quản lý của hệ thống: Thơng điệp Hệ thống Mẫu tin Ngân quỹ VND Tiền mặt Tiến trình đăng nhập Kết quả của quá trình chọn lựa gồm các lớp ứng viên sau hệ thống ATM: MáyATM ThẻATM KháchHàng NgânHàng TàiKhoản GiaoDịch Nhận xét: một hạn chế chính của cách tiếp cận cụm danh từ là nĩ phụ thuộc vào tính đúng và đầy đủ của các tài liệu mơ tả. Điều này trên thực tế để cĩ được những tài liệu này thì quả là khĩ. Hoặc chăng một văn bản lớn của hệ thống cĩ thể dẫn đến quá nhiều lớp ứng viên! Dầu vậy, cách tiếp cận này rất cĩ tính sư phạm và hữu dụng khi kết hợp với các cách tiếp cận khác. @ Đại Học KHTN-TP HCM ; ASIA-ITC 101
  15. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Tiếp cận phân loại Phương pháp thứ hai được gọi là phương pháp sử dụng mẫu lớp chung, phương pháp này dựa trên một cơ sở tri thức về việc phân loại lớp theo những mẫu chung. Các mẫu chung đĩ là: Lớp khái niệm (concept) Một khái niệm là một quan niệm hoặc sự hiểu biết riêng biệt về thế giới. Lớp khái niệm bao gồm các nguyên lý được dùng để tổ chức hoặc để lưu trữ các hoạt động và các trao đổi về mặt quản lý. Thơng thường các khái niệm là các ý tưởng, sự hiểu biết được chia sẽ trong cộng đồng và dùng để trao đổi. Ví dụ: phương pháp, phương pháp luận, mơ hình, là ví dụ của đối tượng lớp khái niệm. Lớp sự kiện (event) Lớp sự kiện là các điểm thời gian cần được lưu trữ. Các sự việc xảy ra tại một thời điểm, hoặc một bước trong một dãy tuần tự các bước. Liên quan tới các sự việc được lưu trữ là các thuộc tính (và các đối tượng chứa thuộc tính) như là: ai, cái gì, khi nào, ở đâu, như thế nào, hoặc tại sao. Ví dụ: đăng ký, kết quả, hố đơn, đơn hàng Lớp tổ chức (organization) Một lớp tổ chức là một tập hợp con người, tài nguyên, phương tiện, hoặc những nhĩm xác định chức năng người dùng, . Ví dụ: đơn vị, bộ phận, phịng ban, chức danh, Lớp con người (people) Lớp con người thể hiện các vai trị khác nhau của người dùng trong việc tương tác với ứng dụng. Những đối tượng này thường là người dùng hệ thống hoặc những người khơng sử dụng hệ thống nhưng thơng tin về họ được lưu trữ bởi hệ thống (đa số là những đối tượng mà hệ thống cĩ trao đổi thơng tin nhưng khơng sử dụng hệ thống) Ví dụ: sinh viên, khách hàng, giáo viên, nhân viên, Lớp vị trí (place) Các vị trí vật lý mà hệ thống cần mơ tả thơng tin về nĩ. Ví dụ: tồ nhà, kho, văn phịng, chi nhánh, đại lý, Sự vật hữu hình và lớp thiết bị Các đối tượng vật lý hoặc các nhĩm của đối tượng hữu hình mà cĩ thể cảm nhận trực quan và các thiết bị mà hệ thống tương tác. Ví dụ: xe hơi, máy bay, là các sự vật hữu hình; thiết bị cảm ứng nhiệt là một lớp thiết bị. Ví dụ: chúng ta cố gắng xác định lại các lớp trong hệ thống ATM dùng phương pháp tiếp cận: - Các lớp khái niệm: TàiKhoản - Các lớp sự kiện: @ Đại Học KHTN-TP HCM ; ASIA-ITC 102
  16. Phân tích thiết kế hệ thống hướng đối tượng bằng UML GiaoDịch - Các lớp tổ chức: NgânHàng - Các lớp con người: KháchHàng - Các lớp sự vật hữu hình và thiết bị: MáyATM ThẻATM Cách tiếp cận theo use case Như chúng ta đã được giới thiệu, use case được dùng để mơ hình hố các kịch bản trong hệ thống và xác định cách thức các tác nhân tương tác với kịch bản. Kịch bản cĩ thể được mơ tả bằng văn bản hoặc thơng qua một thứ tự các bước. Một khi hệ thống được mơ tả trong ngữ nghĩa các kịch bản. Chúng ta cĩ thể kiểm tra đoạn mơ tả văn bản hoặc các bước của mỗi kịch bản để xác định các đối tượng nào cần thiết để cho kịch bản được thực hiện. Chúng ta cĩ thể mơ hình hố các kịch bản của use case sử dụng sơ đồ tuần tự (sequence diagram) hoặc sơ đồ hợp tác (collaboration diagram). Các mơ hình này cho phép chúng ta mơ hình hố một cách trực quan hơn ở giai đoạn phân tích và trợ giúp thiết kế hệ thống thơng qua việc mơ hình hố sự tương tác giữa các đối tượng trong hệ thống. Tuy nhiên, việc mơ hình hố kịch bản của use case một cách quá cụ thể sẽ dễ dẫn đến mơ tả hoạt động phần mềm hệ thống nơi mà các đối tượng phần mềm cĩ thể sẽ được xác định (mà đúng ra nĩ phải được xác định ở giai đoạn thiết kế). Do đĩ, cách tiếp cận này nên kết hợp với cách tiếp cận phân tích cụm danh từ hoặc cách tiếp cận phân loại để xác định đúng các đối tượng trong giai đoạn phân tích. Trước tiên, chúng ta xác định các dịng tương tác của tác nhân với hệ thống trong một use case. Sau đĩ, chúng ta sẽ đặt câu hỏi “đối tượng nào của hệ thống sẽ chịu trách nhiệm tiếp nhận sự tương tác này?”. Trả lời câu hỏi này giúp chúng ta tìm ra đối tượng đầu tiên của use case. Nếu đối tượng này chuyển giao tồn bộ hoặc một phần trách nhiệm xử lý cho đối tượng khác nào đĩ, thì chúng ta tiếp tục tiếp tục xác định đối tượng đĩ. Quá trình này cứ tiếp tục cho đến khi hết tất cả các dịng tương tác đã được kiểm tra. Ví dụ: trong hệ thống ATM chúng ta xem hoạt động của use case “Giải quyết PIN khơng hợp lệ”. Ở đây chúng ta cần nghĩ về tuần tự các hoạt động mà một khách hàng cĩ thể thực hiện: - Đưa vào thẻ ATM - Nhập mã PIN - Rút thẻ ATM @ Đại Học KHTN-TP HCM ; ASIA-ITC 103
  17. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Dựa trên các hoạt động này, phản ứng của hệ thống hoặc chấp nhận quyền truy cập của tài khoản tương ứng hoặc từ chối. Kế tiếp chúng ta cần xác định một cách tường minh hơn về hệ thống: Chúng ta đang tương tác với cái gì (của hệ thống)? Máy ATM. Tiếp tục với kịch bản tiếp theo: máy ATM sẽ sử dụng đối tượng nào để kiểm tra mã PIN? Khách hàng ngân hàng. Một khách hàng trong trường hợp này là bất kỳ người nào muốn truy cập đến một tài khoản thơng qua máy ATM, và cĩ thể cĩ hoặc cĩ thể khơng cĩ tài khoản. Ngược lại, một khách hàng ngân hàng cĩ một tài khoản. Sơ đồ tuần tự : MáyATM : KháchHàngNgânHàng : KháchHàng Đưa thẻ vào ATM Yêu cầu PIN Nhập mã PIN Kiểm tra mã PIN Mã PIN khơng hợp lệ Thơng báo mã PIN khơng hợp lệ Nhảy thẻ Yêu cầu lấy thẻ Lây thẻ Hiển thị màn hình chính Sơ đồ hợp tác 1: Đua thẻ vào ATM 3: Nhập mã PIN 9: Lấy thẻ : MáyATM 2: Yêu cầu PIN : KháchHàng 6: Thơng báo mã PIN khơng hợp lệ 5: Mã PIN khơng hợp lệ 7: Nhảy thẻ 4: Kiểm tra mã PIN 8: Yêu cầu lấy thẻ 10: Hiển thị màn hình chính : KháchHàngNgânHàng Hoặc xét use case “Rút tiền” Sơ đồ tuần tự @ Đại Học KHTN-TP HCM ; ASIA-ITC 104
  18. Phân tích thiết kế hệ thống hướng đối tượng bằng UML : KháchHàngNgânHàng : MáyATM : TàiKhoản Đưa vào thẻ ATM Yêu cầu PIN Nhập mã PIN Kiểm tra mã PIN Mã PIN hợp lệ Yêu cầu số tiền Nhập số tiền Xử lý giao tác rút Giao tác thành cơng Phân phối tiền mặt Yêu cầu lấy thẻ Lấy thẻ Yêu cầu tiếp tục Kết thúc In hố đơn Sơ đồ hợp tác 1: Đưa vào thẻ ATM 3: Nhập mã PIN 7: Nhập số tiền 12: Lấy thẻ 14: Kết thúc : MáyATM : KháchHàngNgânHàng 4: Kiểm tra mã PIN 2: Yêu cầu PIN 8: Xử lý giao tác rút 6: Yêu cầu số tiền 10: Phân phối tiền mặt 11: Yêu cầu lấy thẻ 5: Mã PIN hợp lệ 13: Yêu cầu tiếp tục 9: Giao tác thành cơng 15: In hố đơn : TàiKhoản @ Đại Học KHTN-TP HCM ; ASIA-ITC 105
  19. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Như vậy, dựa vào hai sơ đồ tuần tự của hai use case chúng ta đã xác định được các lớp: MáyATM, KháchHàngNgânHàng (KháchHàng), TàiKhoản. Tiếp tục mơ hình hố với sơ đồ tuần tự hoặc hợp tác với các use case cịn lại của hệ thống ATM, chúng ta sẽ xác định được các lớp cịn lại. Xác định mối quan hệ giữa các lớp Trong mơi trường hướng đối tượng, đối tượng đảm nhiệm một vai trị chủ động trong một hệ thống. Đối tượng khơng tồn tại một cách độc lập mà luơn tương tác với những đối tượng khác. Sự tương tác này thể hiện thơng qua mối kết hợp bao gồm luơn các hoạt động và hành vi của các đối tượng. Sau đây chúng ta sẽ được giới thiệu các hướng dẫn giúp xác định ba loại liên kết: mối kết hợp, mối kết hợp thu nạp (thành phần) và mối kết hợp tổng quát hố. Xác định mối kết hợp (association) Xác định mối kết hợp bắt đầu bằng việc phân tích sự tương tác giữa các lớp. Thơng thường thì bất kỳ cĩ một liên kết phụ thuộc nào giữa hai hay nhiều lớp đều cĩ thể thiết lập mối kết hợp. Một cách làm điều này chính là kiểm tra trách nhiệm của đối tượng để thiết lập mối kết hợp. Nĩi cách khác, nếu một đối tượng được xác nhận để thi hành một nhiệm vụ và lại thiếu thơng tin để thi hành nhiệm vụ đĩ, thì đối tượng này phải ủy quyền thực hiện lại cho đối tượng khác sở hữu thơng tin đĩ. Cĩ nhiều cách tiếp cận để xác định mối kết hợp, đầu tiên trích lọc các mối kết hợp ứng viên từ việc tham khảo mơ tả hệ thống và yêu cầu hệ thống và những tài liệu khác liên quan đến hệ thống. Sau đĩ, tinh chế dần để chọn ra mối kết hợp cĩ ý nghĩa nhất. Chú ý rằng mối kết hợp và mối kết hợp thành phần cĩ ngữ nghĩa rất gần nhau, do đĩ cĩ những trường hợp khĩ phân biệt, mối kết hợp thành phần chỉ là một trường đặc biệt của mối kết hợp. Tùy theo lãnh vực ứng dụng nếu chúng ta tìm được một cách tự nhiên để biểu diễn mối kết hợp thành phần thì hãy chọn nĩ, ngược lại hãy chọn mối kết hợp để biểu diễn. Sau đây là các hướng dẫn và các mẫu chung cho phép xác định mối kết hợp: Hướng dẫn xác định mối kết hợp - Một sự phụ thuộc giữa hai hay nhiều lớp cĩ thể thiết lập thành mối kết hợp. Mối kết hợp thường tương ứng với một động từ hoặc cụm giới từ như là thành phần của, làm việc cho, chứa trong, - Một tham chiếu từ một lớp đến một lớp khác là một mối kết hợp. Mẫu chung xác định mối kết hợp - Mối kết hợp vị trí (location): liên kết tới, thành phần của, chứa trong, làm việc tại, . - Mối kết hợp sở hữu: của, cĩ, thuộc, Mối kết hợp cĩ giữa lớp TàiKhoản và lớp GiaoDịch, mối kết hớp của giữa lớp TàiKhoản và lớp KháchHàng - Mối kết hợp truyền thơng, liên lạc (communication): đặt tới, trao đổi với, gởi cho, tiếp nhận từ, @ Đại Học KHTN-TP HCM ; ASIA-ITC 106
  20. Phân tích thiết kế hệ thống hướng đối tượng bằng UML NgânHàng KháchHàng MáyATM 1 Của 1 n Cĩ TàiKhoản GiaoDịch 1 0 n Loại bỏ những mối kết hợp khơng cần thiết - Mối kết hợp cài đặt: mối kết hợp cài đặt nên được đưa vào trong quá trình thiết kế và cài đặt hệ thống. Mối kết hợp cài đặt là mối kết hợp mơ tả sự liên quan giữa các lớp trong giai đoạn thiết kế cài đặt hệ thống bên trong mơi trường phát triển hoặc ngơn ngữ lập trình cụ thể và khơng phải là mơi liên kết giữa các đối tượng mơ tả nghiệp vụ. - Mối kết hợp đa phân: là mối kết hợp giữa ba lớp trở lên, mối kết hợp này phức tạp trong cách thể hiện. Nếu cĩ thể, phát biểu lại nĩ dùng mối kết hợp nhị phân. Lớp học Môn học Lớp học 1 1 Môn học 0 * 0 * 1 1 Buổi học 0 * 1 1 Giáo viên Phòng học 0 * Giáo viên Phòng học 1 1 Buổi học - Mối kết hợp trực tiếp dư thừa (directed action): là các mối kết hợp được định nghĩa trong ngữ nghĩa của những mối kết hợp khác (cịn gọi là mối kết hợp suy diễn hoặc bắc cầu). Những mối kết hợp loại này là dư thừa do đĩ cần loại bỏ nĩ khỏi mơ hình. Trong các mối kết hợp dưới đây liên quan, đặt tới, giao từ thì mối kết hợp giao từ cĩ thể được suy ra từ mối kết hợp liên quan và đặt tới. Vậy mối kết hợp giao từ là dư thừa và cĩ thể loại bỏ nĩ khỏi mơ hình. 1 1 Phiếu đặt hàng 0 * liên quan đặt tới 0 * 1 1 Nhà cung cấp Phiếu giao hàng 0 * giao từ 1 1 @ Đại Học KHTN-TP HCM ; ASIA-ITC 107
  21. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Xác định mối kết hợp tổng quát – chuyên biệt (generalization) Mối kết hợp tổng quát hố – chuyên biệt thể hiện quan hệ kế thừa giữa các lớp và một cấu trúc phân cấp xác định những dịng kế thừa này. Quan hệ này cho phép các đối tượng cĩ thể xây dựng từ những đối tượng khác. Một thuận lợi chính khi sử dụng mối kết hợp này là chúng ta cĩ thể xây dựng trên những gì đang cĩ và quan trọng hơn là sử dụng lại cái đã cĩ. Sau đây là các tiếp cận hướng dẫn xác định mối kết hợp tổng quát hố: Tiếp cận trên xuống (top-down): Từ một lớp chúng ta tìm kiếm cụm danh từ chứa tên lớp và tính từ (hoặc danh từ). Đánh giá xem cụm danh từ này cĩ thể là một trường hợp đặc biệt cần được quản lý trong hệ thống khơng; tìm kiếm xem cĩ những đặc trưng riêng của lớp này mà hệ thống cần chỉ ra hay khơng. Nếu quyết định là một lớp thì nĩ là một loại chuyên biệt của lớp ban đầu. Ví dụ: từ lớp Hố đơn chúng ta tìm thấy một cụm danh từ Hố đơn giao hàng cĩ chứa từ Hố đơn, và trường hợp dưới đây quyết định Hố đơn giao hàng là một lớp chuyên biệt của lớp Hĩa đơn. Hoá đơn Số_HĐ Ngày_HĐ Diễn_giải Trị_giá_HĐ Hoá đơn giao hàng Đã thanh toán Ngày thanh toán Hoặc trong hệ thống ATM, từ lớp GiaoDịch chúng ta cĩ thể chuyên biệt hố xuống hai lớp con GiaoDịchRút và GiaoDịchGởi. GiaoDịch GiaoDịchRút GiaoDịchGởi Trong quá trình tạo cấu trúc phân cấp tổng quát – chuyên biệt, chúng ta khơng nên quá lạm dụng việc chuyên biệt hĩa mà đưa vào tất cả các lớp chuyên biệt khơng cần thiết. Các lớp chuyên biệt cần thiết là các lớp cĩ những đặc trưng (thuộc tính, hành vi và mối kết hợp) riêng được biểu diễn trong hệ thống. Ví dụ, cĩ rất nhiều loại hố đơn cĩ thể tạo lớp chuyên biệt như là: hố đơn bán lẽ, hố đơn bán sĩ, hố đơn giao hàng. Trong khi đĩ, chỉ cĩ Hố đơn giao hàng là cĩ những thuộc tính riêng nên nĩ được biểu diễn trong hệ thống, cịn hai lớp cịn lại khơng cần thiết vì khơng tìm ra đặc trưng riêng của nĩ. Tiếp cận dưới lên (bottom-up): tìm kiếm trong các lớp để xác định xem cĩ các thuộc tính và phương thức giống nhau. Sau đĩ chúng ta cĩ thể gom nhĩm và đưa các thuộc tính và phương thức chung này lên một lớp tổng quát (trừu tượng). Tạo mối kết hợp tổng quát hố từ các lớp này đến lớp tổng quát mới xác định. @ Đại Học KHTN-TP HCM ; ASIA-ITC 108
  22. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Mơ hình dưới đây cho thấy, các lớp Hố đơn và Đơn đặt hàng cĩ ba thuộc tính giống nhau (Hố đơn: Số HĐ, Ngày HĐ, Diễn giải. Đơn đặt hàng: Số ĐH, Ngày ĐH, Diễn giải) và mối kết hợp với lớp NGK giống nhau. Do đĩ, chúng ta tạo ra một lớp tổng quát Chứng từ và di chuyển cả ba thuộc tính và mối kết hợp lên lớp này và tạo ra mối kết hợp tổng quát hố từ lớp Hố đơn và Đơn đặt hàng đến lớp Chứng từ. Dòng hoá đơn SLượng Đơn_giá NGK Hoá đơn Mã_NGK Số_HĐ 1 * Tên_NGK Ngày_HĐ 0 * ĐVTính chi tiết Diễn_giải Hiệu Trị_giá_HĐ ĐGiá_bán_lẽ Tồn_tối_thiểu 1 * Dòng đặt hàng SLĐặt chi tiết Đơn giá 0 * Đơn đặt hàng Số ĐH Ngày_ĐH Diễn giải Chứng từ NGK Số CT 0 * chi tiết 1 * Mã_NGK Ngày CT Tên_NGK Diễn giải ĐVTính Hiệu ĐGiá_bán_lẽ Dòng chứng từ Tồn_tối_thiểu SLượng Đơn giá Đơn đặt hàng Hoá đơn Số ĐH Số_HĐ Ngày_ĐH Ngày_HĐ Diễn giải Diễn_giải Trị_giá_HĐ Tiếp cận tái sử dụng: di chuyển các thuộc tính và phương thức lên càng cao càng tốt trong cấu trúc phân cấp. Đa kế thừa: tránh sử dụng quá mức đa kế thừa trong mơ hình vì đa kế thừa sẽ phức tạp trong việc xác định đường dẫn kế thừa một hành vi từ những lớp nào. @ Đại Học KHTN-TP HCM ; ASIA-ITC 109
  23. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Xác định mối quan hệ thành phần (a-part-of, aggregation) Mối quan hệ thành phần được sử dụng trong tình huống một lớp hình thành bao gồm những lớp thành phần. Hai đặc trưng chính của mối quan hệ thành phần là tính bắc cầu và tính phản đối xứng. - Tính bắc cầu: nếu lớp A là một thành phần của lớp B và lớp B là thành phần của lớp C, thì lớp A là thành phần của lớp C. - Tính phản đối xứng: nếu lớp A là thành phần của lớp B thì lớp B khơng phải là thành phần của lớp A. Việc xác định mối quan hệ thành phần cĩ thể dựa trên các mẫu chỉ dẫn sau: - Tập hợp: một đối tượng vật lý được hình thành từ các đối tượng vật lý thành phần khác. TồNhà 1 1 0 * Phịng - Vật chứa: một đối tựơng vật lý chứa đựng các thành phần nhưng khơng được cấu tạo bởi các thành phần. PhịngHọc 0 1 0 1 0 * 0 * Bàn Ghế Một phịng học chứa đựng tất cả các đối tượng bàn ghế nhưng khơng được cấu tạo từ những đối tượng này. - Tập hợp – thành viên: một đối tượng quan niệm chứa các thành phần cĩ thể vật lý hoặc quan niệm. PhịngBan ĐộiBĩng DựÁn 1 1 0 1 1 1 Làm tại 0 * gồm 0 * 0 * NhânViên CầuThủ GiaiĐoạn @ Đại Học KHTN-TP HCM ; ASIA-ITC 110
  24. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Các lớp PhịngBan, ĐộiBĩng, DứAn, GiaiĐoạn là các lớp quan niệm; các lớp NhânViên, CầuThủ là các lớp vật lý. Trong hệ thống ATM, một ngân hàng bao gồm các máy ATM, các tài khoản, các tồ nhà, các nhân viên,.v.v Tuy nhiên, các đối tượng tồ nhà, nhân viên, khơng thuộc phạm vi hệ thống đang xét. Do đĩ, chúng ta định nghĩa mối kết hợp thành phần giữa lớp NgânHàng và các lớp: MáyATM, TàiKhoản. NgânHàng KháchHàng MáyATM 1 của 11. cĩ TàiKhoản GiaoDịch 1 0 n GiaoDịchRút GiaoDịchGởi Xác định thuộc tính (attribute) và phương thức (method) của lớp Xác định thuộc tính và phương thức cũng là một cơng việc khĩ như là xác định lớp, và đây cũng là một tiến trình lặp. Thơng thường người ta cũng dựa vào use case và các sơ đồ UML khác để xác định các thuộc tính và phương thức của lớp. Thuộc tính là các thành phần mà một đối tượng phải ghi nhớ như là màu sắc, trị giá, hảng sản xuất, Xác định thuộc tính của một lớp hệ thống bắt đầu với việc tìm hiểu về các trách nhiệm của hệ thống. Và chúng ta đã xác định răng, trách nhiệm của hệ thống cĩ thể được nhận định qua việc phát triển các use case và các đặc điểm mong muốn của ứng dụng như là xác định thơng tin gì mà người dùng cần cho hệ thống. Các câu hỏi sau đây cĩ thể giúp xác định nhiệm vụ của lớp và các thành phần dữ liệu mà hệ thống muốn lưu trữ. - Thơng tin gì về đối tượng sẽ được lưu trữ? - Dịchvụ gì mà một lớp phải cung cấp? Trả lời câu hỏi thứ nhất giúp chúng ta xác định các thuộc tính của một lớp. Trả lời câu hỏi thứ hai giúp chúng ta xác định các phương thức của lớp. Xác định thuộc tính Bằng việc phân tích các use case, các yêu cầu, các mơ tả và các sơ đồ chúng ta cĩ thể bắt đầu hiểu trách nhiệm của lớp và cách thức mà các lớp tương tác để thi hành cơng việc. Mục tiêu chính ở đây là để hiểu những gì mà một lớp cĩ trách nhiệm về tri thức. Sau đây à một số hướng dẫn giúp xác định lớp trong các use case: @ Đại Học KHTN-TP HCM ; ASIA-ITC 111
  25. Phân tích thiết kế hệ thống hướng đối tượng bằng UML - Thuộc tính thường tương ứng tới các danh từ đi theo bởi các cụm phĩ từ như là: chi phí của sản phẩm. Các thuộc tính cũng cĩ thể tương ứng tới các tính từ hoặc các phĩ từ. - Giữ cho lớp đơn giản: chỉ dùng đủ thuộc tính để diễn đạt trạng thái đối tượng - Các thuộc tính ít cĩ thể được mơ tả đầy đủ trong mơ tả vấn đề. Do đĩ, chúng ta phải sử dụng tri thức về lãnh vực ứng dụng và thực tế để tìm chúng. - Khơng nên quan tâm quá về việc phải khám phá hết thuộc tính. Chúng ta cĩ thể bổ sung thêm các thuộc tính trong các vịng lặp tiếp theo. Ví dụ: xác định các thuộc tính cho các lớp của hệ thống ATM. Xác định thuộc tính cho lớp KháchHàng Bằng việc phân tích use case, các sơ đồ tuần tự và hợp tác và sơ đồ hoạt động, rõ ràng rằng, với lớp KháchHàng, lãnh vực bài tốn và hệ thống đưa ra một vài thuộc tính. Tìm kiếm trong sơ đồ tuần từ của use case “Xứ lý PIN khơng hợp lệ” chúng ta tìm thấy rằng lớp KháchHàng phải cĩ một mã PIN (hay password) và số thẻ. Do đĩ, mãPIN và sốThẻ là hai thuộc tính thích hợp của lớp KháchHàng. Các thuộc tính khác của KháchHàng là các biểu diễn tri thức chung về khách hàng, do đĩ các thuộc tính của lớp KháchHàng là: tênKháchHàng họKháchHàng mãPIN sốThẻ trong thời điểm này chúng ta chỉ quan tâm đến chức năng của đối tượng khách hàng mà khơng quan tâm đến các thuộc tính cài đặt Xác định thuộc tính cho lớp TàiKhoản Tương tự các thuộc tính của lớp TàiKhoản được xác định là: sốTàiKhoản loạiTàiKhoản sốDư Xác định thuộc tính cho lớp GiaoDịch giaoDịchID ngàyGiaoDịch thờiGianGiaoDịch loạiGiaoDịch sốTiền sốDư Xác định thuộc tính cho lớp MáyATM Máy ATM là một đối tượng vật lý và hữu hình, do đĩ thuộc tính của nĩ dùng để mơ tả vị trí và trạng thái của máy. địaChỉ trạngThái sồTiềnHiệnTại @ Đại Học KHTN-TP HCM ; ASIA-ITC 112
  26. Phân tích thiết kế hệ thống hướng đối tượng bằng UML NgânHàng KháchHàng tênKháchHàng MáyATM họKháchHàng địaChỉ mãPIN trạngThái sốThẻ SốTiềnHiệnTại 1 của GiaoDịch 1 TàiKhoản giaoDịchID ngàyGiaoDịch sốTàiKhoản cĩ thờiGianGiaoDịch loạiTàiKhoản loạiGiaoDịch sốDư 1 0 n sốTiền sốDư GiaoDịchRút GiaoDịchGởi Xác định phương thức Phương thức (method) và thơng điệp (message) là các thành phần gánh vác cơng việc xử lý hệ thống hướng đối tượng. Trong một mơi trường hướng đối tượng, mỗi phần dữ liệu hoặc đối tượng được bao quanh bởi một tập hợp các thường trình gọi là các phương thức. Những phương thức này chính là các dịch vụ và các tốn tử của một lớp định nghĩa để cài đặt hànhvi của các đối tượng thành viên của lớp. Các phương thức chính là cách thức mà đối tượng thực hiện tương tác với các đối tượng khác trong hệ thống. Phát hiện các phương thức để cài đặt các hành vi đối tượng là một hoạt động quan trọng trong giai đoạn phân tích. Cũng như thuộc tính, một lớp sẽ cĩ những phương thức nội bộ (private) và tồn cục (puplic). Trong giai đoạn phân tích, chúng ta chỉ quan tâm phát hiện các phương thức tồn cục mà ít khi quan tâm đến các phương thức nội bộ của đối tượng. Các phương thức thường tương ứng với các truy vấn về các thuộc tính của đối tượng. Nĩi cách khác, các phương thức chịu trách nhiệm quản lý các trị của thuộc tính như là truy vấn, cập nhật, đọc và ghi. Chú ý rằng trong giai đoạn phân tích, chú ta đang làm việc ở mức cao của sử trừu tượng hố. Do đĩ, các phương thức như là tạo (constructor) hoặc các phương thức mơ tả chi tiết việc cài đặt sẽ được phát hiện trong giai đoạn thiết kế. Trong phần này chúng chúng ta xem xét cách thức xác định phương thức sử dụng các sơ đồ UML như là: sơ đồ trạng thái, sơ đồ hoạt động, sơ đồ tuần tự/hợp tác và sơ đồ use case. Xác định phương thức bằng việc phân tích các sơ đồ UML và use case Trong sơ đồ tuần tự, các đối tượng được đặt trong sơ đồ với các đường đứt quảng thẳng đứng. Do đĩ, các sự kiện xảy ra giữa các đối tượng được đặt theo dịng nằm ngang. Một sự kiện được xem như là một hành động để chuyển thơng tin. Mặt khác, những hành động này là các tốn tử mà đối tượng phải thực thi. Ví dụ, để xác định các phương thức của lớp TàiKhoản, chúng ta xem xét các sơ đồ tuần tự ứng với các use case: @ Đại Học KHTN-TP HCM ; ASIA-ITC 113
  27. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Rút tiền Gởi tiền Xem thơng tin tài khoản Sơ đồ tuần tự cĩ thể trợ giúp chúng ta xác định các dịch vụ mà các đối tượng phải cung cấp. Ví dụ, qua việc nghiên cứu sơ đồ tuần tự của use case Rút tiền, chúng ta thấy rằng lớp TàiKhoản phải cung cấp dịch vụ rútTiền. Qua việc nghiên cứu use case Gởi tiền, lớp TàiKhoản phải cung cấp dịch vụ gởiTiền. Tương tự, các dịch vụ lớp KháchHàng: kiểmTraMậtKhẩu (kiểm tra mật khẩu của khách hàng) Các dịch vụ của lớp MáyATM Khởi động máy Đĩng máy NgânHàng KháchHàng MáyATM tênKháchHàng địaChỉ họKháchHàng trạngThái mãPIN SốTiềnHiệnTại sốThẻ khcĩởiĐộngMáy() kiểmTraMậtKhẩu() đĩngMáy() 1 của 1 GiaoDịch TàiKhoản giaoDịchID sốTàiKhoản ngàyGiaoDịch loạiTàiKhoản thờiGianGiaoDịch sốDư loạiGiaoDịch 1 0 n sốTiền rútTiền() sốDư gởiTiền() xemTàiKhoản() GiaoDịchRút GiaoDịchGởi Chú ý, các dịch vụ được đưa vào lớp tổng quát sẽ được thừa kế trong các lớp chuyên biệt. Câu hỏi và bài tập Câu hỏi 1. Các đối tượng của hệ thống trong giai đoạn phân tích cĩ thể xác định từ đâu? 2. Mơ tả chiến lược “cụm danh từ” trong việc xác định các lớp ứng viên trong một lãnh vực vần đề? @ Đại Học KHTN-TP HCM ; ASIA-ITC 114
  28. Phân tích thiết kế hệ thống hướng đối tượng bằng UML 3. Chiến lược phân loại là gì? 4. Các lớp khái niệm là gì? 5. Các lớp sự kiện là gì? 6. Các lớp tổ chức là gì? 7. Các lớp con người là gì? 8. Các lớp vị trí là gì? 9. Các lớp sự vật hữu hình và thiết bị là gì? 10. Tại sao xây dựng các sơ đồ tuần tự/hợp tác là một hoạt động hữu dụng cho việc xác định các lớp? 11. Tại sao việc xác định lớp là một quá trình gia tăng? 12. Tại sao việc xác định sự phân cấp của các lớp là quan trọng trong phân tích hướng đối tượng? 13. Liên kết kết hợp (association), tổng quát hố (generalization) là gì? 14. Thuộc tính và phương thức của lớp được xác định bằng cách nào? Bài tập 1. Hãy xây dựng sơ đồ lớp của hệ thống “Diễn đàn trao đổi học tập của khoa Cơng Nghệ Thơng Tin”. @ Đại Học KHTN-TP HCM ; ASIA-ITC 115
  29. Phân tích thiết kế hệ thống hướng đối tượng bằng UML PHẦN 3 THIẾT KẾ HỆ THỐNG Mục tiêu Cung cấp các nội dung về: - Các nguyên lý căn bản về thiết kế hướng đối tượng - Quá trình thiết kế lớp đối tượng: thiết kế thuộc tính, method và mối kết hợp - Kiến trúc ba tầng trong thiết kế phần mềm - Thiết kế use case o Quá trình thiết kế các lớp tầng truy cập dữ liệu: xác định các lớp, thuộc tính, method và mối kết hợp qua việc phân tích use case o Thiết kề các lớp tầng giao diện: xác định các lớp, xây dựng bản mẫu (prototype), xác định thuộc tính và method qua việc phân tích use case o Mơ hình hố use case hiện thực hố dùng sơ đồ lớp, sơ đồ tương tác - Nâng cấp kiến trúc bằng việc phân chia hệ thống thành các gĩi (package) - Xây dựng mơ hình thiết kế vật lý hệ thống sơ đồ thành phần và sơ đồ triển khai nhằm chuẩn bị cho cài đặt phần mềm hệ thống Giới thiệu Mục tiêu chính của giai đoạn phân tích việc phát triển phần mềm là tập trung vào xác định những gì cần được thực hiện. Các đối tượng được phát hiện trong giai đoạn phân tích cĩ thể phục vụ như là bộ khung (framework) cho giai đoạn thiết kế. Các thuộc tính, phương thức và mối liên kết của lớp được xác định trong giai đoạn phân tích phải được thiết kế cho việc cài đặt như là một thành phần được mơ tả theo ngơn ngữ cài đặt. Trong phần này, chúng ta tập trung chi tiết hố khung nhìn luận lý (logical view) của hệ thống phần mềm bằng cách xác định thêm các lớp phần mềm (tầng giao diện và tầng truy cập CSDL) và thiết kế chúng và kết quả là một sơ đồ lớp hồn chỉnh mơ tả đầy đủ các đối tượng phần mềm hệ thống chuẩn bị cho cài đặt. Mặt khác, dựa trên kết quả này chúng ta phát triển thiết kế vật lý hệ thống bằng cách xây dựng thêm vào các khung nhìn cài đặt (implementation view) và khung nhìn triển khai (deployment view) nhằm chuyển giao kết quả thiết kế hệ thống gần với một ngơn ngữ và cơng cụ lập trình xác định cho giai đoạn lập trình và sau đĩ cĩ thể cài đặt phù hợp với các thiết bị tài nguyên trong một mơi trường hệ thống thực tế một cách hiệu quả. Phần này bao gồm bốn chương: các chương về thiết kế luận lý: chương 8 Thiết kế lớp, chương 9 Thiết kế use case, chương 10 Thiết kế gĩi và hệ thống con; chương về thiết kế vật lý: chương 11 Thiết kế cài đặt. @ Đại Học KHTN-TP HCM ; ASIA-ITC 116
  30. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Chương 8 THIẾT KẾ LỚP Mục tiêu Cung cấp các kiến thức về: - Một số các tiên đề và hệ quả trong thiết kế hệ thống hướng đối tượng nhằm giúp người thiết kế đạt được một kết quả thiết kế tốt. - Bước đầu tiên tinh chế các lớp trong giai đoạn phân tích thành các lớp cĩ thể cài đặt trong hệ thống phần mềm bao gồm: thiết kế thuộc tính, mối kết hợp, và method Các tiên đề và hệ luận trong thiết kế hướng đối tượng Các tiên đề Theo Suh, trong tiếp cận thiết kế hướng đối tượng cĩ hai tiên đề được áp dụng, các tiên đề là: Tiên đề 1: tiên đề độc lập. Duy trì sự độc của các thành phần: Trong quá trình thiết kế, chúng ta đi từ yêu cầu và use case đến một thành phần hệ thống, mỗi thành phần phải thỗ mãn yêu cầu mà khơng ảnh hưởng đến những thành phần khác. Tiên đề 2: tiên đề thơng tin. Giảm tối đa nội dung thơng tin thiết kế. Tiên đề này nĩi về tính đơn giản hố trong thiết kế. Mục đích chính là giảm tối đa tính phức tạp, như vậy các đối tượng sẽ dễ bảo trì và nâng cấp hơn. Trong thiết kế hướng đối tượng, cách tốt nhất để giảm độ phức tạp là sử dụng tính thừa kế. (xem hệ luận 6) Các hệ luận Từ hai tiên đề trên, cĩ nhiều hệ luận được trích dẫn. Những hệ luận này sẽ mang lại lợi ích hơn trong việc quyết định thiết kế các tình huống cụ thể, vì chúng cĩ thể áp dụng tới các tình huống thực tế dễ dàng hơn so với tiên đề gốc ban đầu. Hệ luận 1: thiết kế độc lập, giảm tối đa thơng tin trao đổi (Uncouple Design with Less Information) Sự cố kết giữa các đối tượng cao cĩ thể làm giảm tính liên kết giữa chúng. Bởi vì chỉ một lượng nhỏ các thơng tin cần thiết trao đổi giữa các đối tượng đĩ. Coupling: Ở giai đoạn thiết kế, coupling được dùng để đo mức độ liên kết giữa các đối tượng hoặc giữa thành phần phần mềm. Coupling là một mối kết hợp nhị phân, và là một khái niệm quan trọng khi đánh giá một thiết kế bởi vì nĩ giúp chúng ta tập trung đúng vào vấn đề quan trọng của thiết kế. Ví dụ, một thành phần trong hệ thống thay đổi sẽ cĩ một tác động tối thiểu đến những thành phần khác. Coupling trong các đối tượng càng mạnh càng mạnh thì hệ thống càng phức tạp. Mức độ của coupling cĩ thể được đánh giá trên: - Mức độ phức tạp của kết nối - Kết nối tham chiếu đến chính bản thân đối tượng hoặc bên ngồi đối tượng - Các thơng điệp nhận và gửi đi Mức độ coupling giữa hai thành phần được xác định bằng mức độ phức tạp của thơng tin trao đổi giữa chúng. Coupling càng gia tăng thì càng làm gia tăng độ phức tạp hoặc mơ hồ, tối nghĩa của giao diện. Coupling càng giảm khi sự kết nối được thiết lập ở thành phần giao diện thay vì ở thành phần bên trong. Trong thiết kế hướng đối tượng, cĩ hai loại coupling là coupling tương tác và coupling thừa kế: @ Đại Học KHTN-TP HCM ; ASIA-ITC 117
  31. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Coupling tương tác: thể hiện qua số lượng và độ phức tạp của các thơng điệp giữa những thành phần, sự tương tác càng ít thì càng được ưu tiên. Coupling cũng áp dụng tới mức độ phức tạp của thơng điệp. Một chỉ dẫn chung là giữ các thơng điệp càng đơn giản và càng ít xảy ra thì càng tốt. Tổng quát, nếu một kết nối thơng điệp gồm ba tham số trở lên thì kiểm tra xem cĩ thể làm đơn giản hố nĩ nữa được khơng. Một đối tượng được kết nối với nhiều thơng điệp phức tạp thì gọi là liên kết chặt (tightly coupled), cĩ nghĩa là bất kỳ cĩ sự thay đổi nào cĩ thể tác động đến sự thay đổi trong những cái khác. A B D C Hình 4. Ví dụ về biểu diễn coupling và B là liên kết chặt Năm mức độ coupling tương tác Data coupling: kết nối giữa các thành phần hoặc là dữ liệu dạng nguyên tố hoặc là hoặc cấu trúc tổng hợp tất cả yếu tố được dùng bởi đối tượng nhận. Đây là loại coupling tốt nhất và là mục đích của thiết kế kiến trúc. Các đối tượng trao đổi với nhau thơng qua các dữ liệu thành tố hoặc các cờ hiệu thơng tin. Thành phần này khơng quan tâm đến bất cứ gì bên trong thành phần khác mà chỉ quan tâm đến dữ liệu gì nĩ cần và dữ liệu gì nĩ gởi trả. Class_A Class_B + Operation_A () : Integer + Operation_B (Integer Para_1) : Integer integer Operation_A() Operation_A khơng quan tâm đến nội { dung thực hiện của Operation_B mà int x,y; chỉ quan tâm đến dữ liệu gởi đến và nhận từ Operation_B Class_B cB; . y = cB.Operation_B(x); } Stamp coupling: trong stamp coupling, dữ liệu trao đổi là một phần của cấu trúc hoặc tồn bộ cấu trúc. Loại coupling này được đánh giá là thấp hơn so với data coupling bởi vì sự trao đổi là một cấu trúc thay vì một yếu tố đơn nên làm cho nĩ phức tạp hơn. Một thay đổi trong cấu trúc sẽ ảnh hưởng đến tất cả đối tượng sử dụng nĩ. Stamp coupling làm cho các thành phần phụ thuộc nhiều hơn đến thành phần khác, bởi vì, để tránh những lỗi cĩ thể xảy ra, những thành phần sẽ phải cĩ hiểu biết về hoạt động bên trong của thành phần khác sử dụng cùng cấu trúc dữ liệu. @ Đại Học KHTN-TP HCM ; ASIA-ITC 118
  32. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Class_A Class_B + Attribute_A1 : Integer + Attribute_A2 : Integer + Operation_B (Class_A s_Para) : Integer + Operation_A () : Integer integer Operation_A() { Operation_B nhận dữ liệu là cấu trúc Class_A để thực hiện. Do đĩ, nội dung int x,y; của nĩ sẽ sử dụng dữ liệu từng thành Class_B cB; phần của cấu trúc Class_A. Một sử thay đổi trong cấu trúc này sẽ ảnh . hưởng đến Operation_B y = cB.Operation_B(this); } Control coupling: khi một thành phần thành phần gởi một thơng tin điều khiển tới một thành phần khác, hai thành phần này được gọi là cĩ control coupling. Thơng tin điều khiển cĩ thể xuất hiện dưới dạng cờ hiệu thơng báo cho thành phần khác hành động sẽ thực hiện. Khi thơng tin điều khiển được gởi đi, thành phần gởi phải biết về hoạt động bên trong của thành phần nhận, do đĩ nĩ tạo ra một sự phụ thuộc giữa các thành phần. Common coupling: khi hai thành phần tham khảo đến cùng một vùng dữ liệu chung tồn cục thì cĩ liên kết common coupling. Liên kết này cũng nên tránh bởi vì nĩ tạo ra một cơ hội lớn về lỗi trên tồn bộ hệ thống. Một lỗi phát sinh trong bất kỳ một thành phần nào sử dụng dữ liệu tồn cục này cĩ thể gây ra lỗi trong bất kỳ thành phần khác sử dụng cùng dữ liệu này. Content coupling: loại coupling được xếp thấp nhất là content coupling. Bởi vì loại này giới thiệu một thành phần tham khảo trực tiếp hoạt động bên trong của một thành phần khác. Ví dụ, một method cĩ thể thay đổi dữ liệu trong một method khác hoặc thay đổi một đoạn code trong method khác. Hiện nay, các ngơn ngữ lập trình (đặc biệt là ngơn ngữ lập trình hướng đối tượng) đều khơng cho phép tạo ra content coupling. Tên coupling Xếp hạng phụ thuộc Data coupling Rất thấp Stamp coupling Thấp Control coupling Trung bình Common coupling Cao Content coupling Rất cao Coupling thừa kế: là coupling giữa lớp tổng quát và lớp chuyên biệt. Một lớp chuyên biệt liên kết với lớp tổng quát của nĩ thơng qua thuộc tính và method. Khơng như coupling tương tác, coupling thừa kế càng cao thì càng ưu tiên. Tuy nhiên, để đạt được mức độ cao coupling thừa kế trong một hệ thống. Mỗi lớp chuyên biệt khơng nên thừa kế những method và thuộc tính khơng liên quan hoặc khơng cần thiết. Ví dụ, nếu một lớp chuyên biệt chồng lên hầu hết các method hoặc khơng sử dụng nĩ từ lớp tổng quát, điều này cho thấy coupling thừa kế là thấp và lúc đĩ thiết kế viên phải thay đổi lại cách xây dựng tổng quát hố và chuyên biệt hố này. Cohesion @ Đại Học KHTN-TP HCM ; ASIA-ITC 119
  33. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Trong khi coupling đề cập đến mức độ tương tác giữa các đối tượng thành phần thì cohesion lại đề cập đến sự tương tác bên trong một đối tượng thành phần. Cohesion phản ánh tính “đơn mục đích” của một đối tượng. Tất cả các lệnh, chức năng trong một thành phần được định nghĩa gắn liền tới một nhiệm vụ. Trong hệ thống nếu các thành phần đạt được mức độ cohesion càng cao thì mức độ liên kết coupling giữa các thành phần càng yếu, do đĩ để đạt được đỉnh cao của cohesion thì chúng ta phải làm giảm mức độ coupling. Cohesion cũng trợ giúp trong thiết kế lớp bằng việc giúp xác định mục đích và mục tiêu của lớp một cách rõ ràng. Method cohesion: một method chỉ nên đảm nhận một chức năng hoặc một nhiệm vụ. Thơng thường cách đặt tên của method cũng phải ngụ ý nĩi lên chức năng liên quan của nĩ. Ví dụ: Chon_nha_cung_cap(), Tinh_ton(), Class cohesion: các method và các thuộc tính trong một lớp phải cĩ mức độ cohesion cao, nghĩa là phải được dùng bởi các method bên trong lớp hoặc chính là method phục vụ cho mục đích của lớp. Cohesion thừa kế: các lớp chuyên biệt và lớp tổng quát phải cùng mơ tả về một loại đối tượng của hệ thống. Các thuộc tính và hành vi của lớp tổng quát phải được thừa hưởng tối đa trong lớp chuyên biệt theo cách hoặc là phục vụ cho hành vi của lớp chuyên biệt hoặc trở thành một hành vi của lớp chuyên biệt. Hệ luận 2: đơn mục đích (single purpose) Mỗi lớp phải cĩ một mục đích xác định trong việc đạt được mục tiêu hệ thống. Nếu chúng ta mơ tả một lớp phức tạp thì hãy phân chia nĩ thành những lớp nhỏ hơn, đơn giản và xác định hơn. Mỗi method chỉ cung cấp một dịch vụ, kích thước khơng quá lớn (khơng nên vượt quá một trang coding) Hệ luận 3: nhiều lớp đơn. Tạo các lớp đơn để cho phép tái sử dụng Kết quả thiết kế hệ thống tốt chính là tạo ra một tập lớn các lớp đơn giản hơn là một tập nhỏ các lớp phức tạp. Các lớp càng ít chuyên biệt thì các vấn đề trong tương lai càng khĩ giải quyết hơn thơng qua việc kết nối các lớp đang cĩ và tái sử dụng chúng. Thiết kế hướng đối tượng luơn đề xuất việc sản sinh thư viện các thành phần tái sử dụng và nhấn mạnh trên tính bao bọc (encapsulation), đơn vị hố (modularization), và tính đa hình (polymorphism) để tái sử dụng khi xây dụng một đối tượng hơn là làm mới. Hệ luận 4: ánh xạ kết quả giữa các giai đoạn phải chặt chẽ (strong mapping) Giai đoạn phân tích và thiết kế dựa trên cùng mơ hình, kết quả mơ hình. Từ quá trình phân tích đến cài đặt, các chi tiết sẽ được đưa thêm vào nhưng vẫn duy trì về cơ bản giống nhau. Ví dụ, trong giai đoạn phân tích chúng ta xác định lớp Hố đơn. Trong giai đoạn thiết kế chúng ta thiết kế lớp Hố đơn: method, dữ liệu, Hệ luận 5: chuẩn hố (standardization). Đề xuất sự chuẩn hố bằng việc thiết kế các thành phần cĩ thể thay thế và tái sử dụng các thành phần cĩ sẵn. Để tái sử dụng, chúng ta phải cĩ một hiểu biết sâu về các lớp trong mơi trường lập trình hướng đối tượng chúng ta đang dùng. Hầu hết các hệ thống hướng đối tượng đều cĩ các các lớp thư viện xây dựng sẳn và ngày càng gia tăng khi chúng ta tạo các ứng dụng mới. Tri thức về các lớp tồn tại giúp chúng ta xác định những gì một lớp mới cần cĩ do thừa kế hơn là phải xây dựng mới. Mặc dù vậy, tài liệu mơ tả các lớp thư viện thường khơng được biên tập tốt hoặc ít được cập nhật thường xuyên khi cĩ sự điều chỉnh, nâng cấp. Do đĩ, trong quá trình xây dựng các hệ thống chúng ta nên tạo ra các lớp thư viện và tích lũy dần nĩ từ việc xây dựng các hệ thống và luơn luơn xem xét việc thừa kế nĩ khi xây dựng một hệ thống mới. Hệ luận 6: thiết kế thừa kế (design inheritance). @ Đại Học KHTN-TP HCM ; ASIA-ITC 120
  34. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Các đặc tính chung phải được chuyển lên lớp tổng quát. Cấu trúc lớp tổng quát – lớp chuyên biệt phải tạo ra ý nghĩa luận lý. Thiết kế lớp Một tiến trình thiết kế lớp bao gồm: - Tinh chế thuộc tính - Thiết kế hành vi (method) và nghi thức (protocol) sử dụng sơ đồ trong UML - Tinh chế quan hệ giữa các lớp - Tinh chế sự phân cấp và thiết kế sự kế thừa Phạm vi ảnh hưởng của lớp Trong việc thiết kế hành vi và thuộc tính cho các lớp, chúng ta gặp phải hai vấn đề. Thứ nhất là nghi thức (protocol), hoặc giao diện tới các tốn tử và sự cĩ thể thấy (visibility) của nĩ; thứ hai là cách thức cài đặt nĩ. Nghi thức được xem là cách thức xác định các đặc trưng của lớp cĩ thể “nhìn thấy” từ bên ngồi hoặc cỉ được xem là “nội bộ” bên trong. Các nghi thức đĩ là: tồn cục (public protocol), riêng (private protocol), và bảo vệ (protected protocol). - pupblic protocol: định nghĩ các hành vi trạng thái của lớp - private protocol: dùng để xác định các đặc trưng của lớp chỉ được truy cập bởi chính lớp đĩ - Protected protocol: xác định đặc trưng của một lớp cĩ thể sử dụng bởi chính nĩ và lớp con của nĩ. Các thơng điệp public protocol protected protocol private protocol Lớp con Tinh chế thuộc tính Các thuộc tính trong giai đoạn phân tích hướng đối tượng phải được tinh chế theo cách nhìn về việc cài đặt nĩ trong mơi trường tin học. Trong giai doạn phân tích, chúng ta chỉ cần tên của thuộc tính là đủ. Tuy nhiên, trong giai đoạn thiết kế, thơng tin chi tiết về thuộc tính đĩ phải được thêm vào. Mục tiêu chính của hoạt động này là tinh chế các thuộc tính tồn tại (được xác định trong giai đoạn phân tích) và đưa thêm các thuộc tính dùng cho việc cài đặt nhằm đặc tả lớp như một thành phần của mơi trường tin học. Kiểu thuộc tính Cĩ ba kiểu cơ bản của thuộc tính: @ Đại Học KHTN-TP HCM ; ASIA-ITC 121
  35. Phân tích thiết kế hệ thống hướng đối tượng bằng UML - Thuộc tính đơn trị - Thuộc tính đa trị - Thuộc tính dùng để tham chiếu tới các đối tượng khác hoặc tới một thể hiện kết nối Các thuộc tính thể hiện cho trạng thái của đối tượng. Khi một trạng thái của đối tượng thay đổi, sự thay đổi này được phản ánh qua giá trị của các thuộc tính. Thuộc tính đơn trị là loại phổ biến nhất, nĩ chỉ cĩ một giá trị hoặc một trạng thái tương ứng với một đối tượng. Ví dụ: Tên, Ngày sinh, Mức lương, Thuộc tính đa trị cĩ thể cĩ một tập các giá trị tương ứng cho một đối tượng. Ví dụ: chúng ta muốn lưu trữ nhiều số điện thoại của một khách hàng, chúng ta cĩ thể đặt thuộc tính Số điện thoại là đa trị. Thuộc tính tham chiếu được dùng để cung cấp việc tham khảo cần thiết để một đối tượng đáp ứng các trách nhiệm của nĩ. Nĩi cách khác, thuộc tính tham chiếu hiện thực hố mối kết hợp của các đối tượng. Hiển thị thuộc tính Trong UML việc trình bày thuộc tính được đề nghị như sau: : = Trong đĩ, sẽ là: + : tồn cục (public protocol) # : bảo vệ (protected protocol) - : cục bộ (private protocol) là một đặc tả cài đặt thuộc tính độc lập ngơn ngữ. là một biểu thức độc lập ngơn ngữ xác định giá trị khởi tạo khi một đối tượng được tạo mới. tham số này là tuỳ chọn. Thuộc tính đa trị được xác định bằng việc thêm vào chỉ số mảng theo sau tên thuộc tính. Ví dụ: Địa_chỉ[3]: string Tập_hợp_điểm[2 *]: điểm Ví dụ: tinh chế thuộc tính các lớp của hệ thống ATM Lớp KháchHàng #tênKháchHàng: String #họKháchHàng: String #mãPIN: String #sốThẻ: String #tàiKhoản: TàiKhoản (thuộc tính tham chiếu) Trong đĩ, thuộc tính #tàiKhoản dùng để mơ tả mối quan hệ giữa lớp KháchHàng và lớp TàiKhoản. Việc thêm thuộc tính này cho phép chúng ta tham khảo đến một đối tượng tài khoản từ một đối tượng khách hàng. Tất cả thuộc tính đều được gán cho một phạm vi truy cập nội bộ dạng nghi thức protected nhằm đảm bảo tính bao bọc và cĩ thể thừa kế nếu sau này các phát triển thêm các lớp con. Lớp TàiKhoản #sốTàiKhoản: String @ Đại Học KHTN-TP HCM ; ASIA-ITC 122
  36. Phân tích thiết kế hệ thống hướng đối tượng bằng UML #loạiTàiKhoản: String #sốDư: float #giaoTác: GiaoTác (cài đặt mối kết hợp giữa lớp TàiKhoản và lớp GiaoTác) #kháchHàng: KháchHàng (cài đặt mối kết hợp giữa lớp TàiKhoản và lớp KhácHàng) Lớp GiaoTác #giaoDịchID: String #ngàyGiaoDịch: Date #thờiGianGiaoDịch: Time #loạiGiaoDịch: String #sốTiền: float #sốDư: float Lớp GiaoTác và lớp TàiKhoản cĩ một mối kết hợp. Khi tính chế thuộc tính cho lớp TàiKhoản, chúng ta đã thêm vào thuộc tính #giaoTác dùng để cài đặt mối kết hợp này. Vậy khi tính chế thuộc tính cho lớp GiaoTác chúng ta cũng cĩ thể thêm vào một thuộc tính cũng để cài đặt cho mối kết hợp này nếu chúng ta cĩ nhu cầu biết thơng tin về tài khoản từ một giao tác. Tuy nhiên, với bài tốn của chúng ta đây khơng cĩ nhu cầu đĩ, vậy nên chúng ta khơng thêm vào lớp GiaoTác thuộc tính tham chiếu tới lớp TàiKhoản. Lớp MáyATM #địaChỉ: String #trạngThái: String #sốTiềnHiệnTại:float NgânHàng KháchHàng #tênKháchHàng:String MáyATM #họKháchHàng:String #địaChỉ:String #mãPIN::String #trạngThái:String #sốThẻ:String #sốTiềnHiệnTại:float #tàiKhoản:TàiKhoản 1 của 1 GiaoDịch TàiKhoản #giaoDịchID:String #sốTàiKhoản:String #ngàyGiaoDịch:Date #loạiTàiKhoản:String cĩ #thờiGianGiaoDịch:Time #sốDư:float #loạiGiaoDịch:String #giaoTác:GiaoTác 1 0 n #kháchHàng:KháchHàng #sốTiền:float #sốDư:float GiaoDịchRút GiaoDịchGởi Sơ đồ lớp của hệ thống ATM sau khi đã tính chế thuộc tính @ Đại Học KHTN-TP HCM ; ASIA-ITC 123
  37. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Tinh chế hành vi (method) Mục tiêu chính của hoạt động này là mơ tả thuật tốn cho các hành vi đã được xác định ở giai đoạn phân tích. Việc mơ tả thuật tốn cũng cĩ thể được thực hiện trên nhiều cách, hoặc bằng văn bản (mã giã) hoặc bằng sơ đồ. Việc sử dụng sơ đồ (trong UML cĩ thể dùng sơ đồ hoạt động, tuần tự, ) cho phép chúng ta dễ dàng hơn trong việc chuyển đổi chúng sang một ngơn ngữ lập trình một cách thủ cơng hoặc tự động (thơng qua một CASE Tool). Trong giai đoạn này chúng cũng nên giảm tối đa mức độ phức tạp các kết nối thơng điệp giữa các lớp số lượng thơng điệp được gởi và nhận bởi một đối tượng. Mục tiêu nhằm gia tăng tính đồn kết (cohension) trong số các đối tượng và các thành phần phần mềm để cải tiến tính liên kết (coupling), bởi vì chúng ta phải giữ một số lượng tối thiểu các thơng tin cần thiết chuyển đổi giữa các thành phần. Áp dụng các tiên đề và hệ luận thiết kế chúng ta cĩ các hướng dẫn sau: - Một tập lớn các lớp đơn giản sẽ tốt hơn một tập nhỏ các lớp phức tạp - Tạo một lớp tổng quát cho các lớp mà chúng ta tìm thấy cĩ một số nội dung giống nhau. Mục tiêu là tăng tối ta việc tái sử dụng - Luơn tập trung vào mục tiêu của lớp khi định nghĩa nhằm tránh việc thiết kế lạc đề hoặc mở rộng vượt khỏi phạm vi ý nghĩa của lớp: điều này thường xảy ra khi chúng ta tạo ra các thay đổi trên lớp đang tồn tại khi bài tốn cĩ sự thay đổi và càng ngày tạo ra các lớp với nội dung phức tạp khơng cịn đúng với mục tiêu ban đầu của lớp. Một lớp cĩ thể cĩ những loại hành vi sau: - Constructor: methode tạo thể hiện (đối tượng) của lớp - Destructor: methode huỷ thể hiện của lớp - Conversion: method chuyển đổi một đơn vị đo lường này sang một đơn vị đo lường khác - Copy: method sao chép nội dung của một thể hiện sang một thể hiện khác - Attribute set: method gán giá trị cho một hoặc nhiều thuộc tính - Attribute get: method trả về giá trị của một hoặc nhiều thuộc tính - I/O method: method cung cấp tới hoặc nhần dữ liệu từ một thiết bị - Domain specific: method xác định tới các ứng dụng của đối tượng Hiển thị hành vi Theo UML một hành vi của lớp được trình bày theo cú pháp: : Trong đĩ, được qui định giống như của thuộc tính : mỗi tham số cách nhau bởi dấu phẩy và cĩ cú pháp như sau: : = . là một đặc tả độc lập ngơn ngữ về cài đặt giá trị trả về của một hành vi. Nếu mục này bị bỏ qua thi hành vi khơng trả về giá trị Ví du: +get_Tên(): String +get_SốTàiKhoản(vtàiKhoản : TàiKhoản): String Thiết kế hành vi cho hệ thống ATM @ Đại Học KHTN-TP HCM ; ASIA-ITC 124
  38. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Tại thời điểm này, chúng ta đã xác định các đối tượng hình thành tầng nghiệp vụ của hệ thống, cũng như là các dịch vụ mà các đối tượng này cung cấp. Cơng việc cịn lại là thiết kế hành vi, giao diện người dùng và xử lý truy cập cơ sở dữ liệu. Với hệ thống ATM, chúng ta đã xác định các tốn tử ở giai đoạn phân tích bao gồm: Lớp KháchHàng KháchHàng::+kiểmTraMậtKhẩu(sốThẻ:String, vPIN:String): vkháchHàng: KháchHàng Thiết kế thuật giải cho hành vi dùng sơ đồ hoạt động #lay_KhachHang (soThe:String, vPIN:String):vkhachHang:KhachHang) vkhachHang = lay_KhachHang (soThe, vPIN) null hoac PIN khong hop le Hien_Thi_tbao("PIN khong hop le, vui long nhap lai") PIN hop le Cung cap quyen truy cap toi tai khoan Hành vi kiểmTraMậtKhẩu() trước hết sẽ thi hành tạo một đối tượng khách hàng và thực hiện lấy thơng tin về khách hàng dựa trên dựa trên một số thẻ và mã PIN. Tại đây, chúng ta lại nhận thấy rằng cần phải cĩ một hành vi khác để thực hiện điều này đĩ là lấy_KháchHàng() và cĩ phạm vi nội bộ dạng protected (#). Hành vi này sẽ lấy tham số đầu vào là số thẻ và mã PIN, kết quả trả về là một đối tượng khách hàng tìm thấy hoặc là “null” nếu ngược lại. Nếu giá trị trả về là “null”, sẽ gởi một thơng điệp tới hệ thống để thực hiện thơng báo “PIN khơng hợp lệ, vui lịng nhập lại”, ngược lại, sẽ gán quyền truy cập cho người dùng. Thiết kế thuật giải dùng sơ đồ tuần tự @ Đại Học KHTN-TP HCM ; ASIA-ITC 125
  39. Phân tích thiết kế hệ thống hướng đối tượng bằng UML : MáyATM : KháchHàng KiểmTraMậtKhẩu(vSốThẻ, vPIN) vKháchHàng = lấy_KháchHàng(sốThẻ, vPIN) Hiển thị thơng báo PIN khơng hợp lệ, vui lịng nhập lại Cung cấp quyền truy cập cho người dùng vKháchHàng Với đồ trên chúng ta chỉ quan tâm đến các lớp (nghiệp vụ) sẽ cung cấp các dịch vụ gì để thực hiện kiểmTraMậtKhẩu(). Chúng ta chưa quan tâm đến các đối tượng ở các tầng khác như là: truy cập cơ sở dữ liệu hoặc giao diện hiển thị. Ví dụ như hành vi lấy_KháchHàng(sốThẻ, vPIN) sẽ phải truy cập cơ sở dữ liệu để thực hiện, cũng như đối tượng: MáyATM chỉ là giả lập giao diện giữa khách hàng và hệ thống, chúng ta chưa xác định đối tượng giao diện cụ thể nào (form, trang web, ) sẽ thực hiện. Phần này sẽ được đề cập chi tiết trong những chương sau. Lớp TàiKhoản TàiKhoản::+gửiTiền(sồTiền: foat) soDu = soDu + soTien capNhatTaiKhoan(soT TaiKhoan::#capNhatTaiKhoan(soTaiKhoan, soDu) aiKhoan, soDu) Tao giao tac gui TaiKhoan::#taoGiaoTac("gui", soTien, soDu) Khi thực hiện một việc gửi tiền, số tiền được gửi được chuyển đến một đối tượng tài khoản và được dùng như là một đối số cho hành vi gửiTiền(). Tài khoản này điều chỉnh số dư hiện hành của nĩ bằng cách cộng thêm với số tiền gửi. Sau đĩ, tài khoản này sẽ lưu thơng tin lần gửi bằng cách tạo ra một đối tượng giao tác. @ Đại Học KHTN-TP HCM ; ASIA-ITC 126
  40. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Một lần nữa chúng ta lại khảm phá ra những hành vi khác: cậpNhậtTàiKhoản(), hành vì này là cục bộ (#) cho phép cập nhật dữ liệu tài khoản. tạoGiaoTác(), cũng là hành vi cục bộ cho phép tạo một giao tác tương ứng với tài khoản này. TàiKhoản::+rútTiền(sốTiền:float): mãTrảVề:String soTien > soDu maTraVe = "So tien rut vuot qua so du" soTien <= soDu soDu = soDu - soTien #capNhatTaiKhoan(so TaiKhoan, soDu) Cap nhat lai so du tai khoan #taoGiaoTac("Rut", Tao mot giao tac rut tien cho tai khoan soTien, soDu) Một số tiền mà khách hàng muốn rút sẽ được chuyển đến một đối tượng tài khoản như là một tham số đầu vào. Tài khoản này sẽ kiểm tra số dư hiện hành của nĩ so với số tiền này. Nếu vẫn lớn hơn hoặc bằng số tiền rút thì tài khoản sẽ cập nhật lại số dư và tạo một giao tác rút tiền, ngược lại thơng báo lỗi với mãTrảVề “Số tiền rút vượt quá số dư”. Một lần nữa chúng ta thấy hành vi rútTiền lại sử dụng cậpNhậtTàiKhoản và tạoGiaoTác đã đề cập đến trong khi thiết kế hành vi gửiTiền. Lớp MáyATM MáyATM::+khởiĐộngMáy(sốTiềnKhởiTạo:float) soTienHienTai = soTienKhoiTao #capNhatSoTien() Thuc hien ket noi voi ngan hang NganHang::+ketNoi() Sau khi bật máy ATM, một số tiền khởi tạo được nhập từ nhân viên vận hành sẽ được chuyển đến đối tượng máyATM như là một tham số đầu vào. Đối tượng máyATM sẽ cập nhật lại số tiền ban đầu cho máy và sau đĩ thực hiện việc kết nối tới ngân hàng nhằm thực hiện việc liên kết truy cập cơ sở dữ liệu. Quá trình này chúng ta lại cĩ nhu cầu phát sinh thêm hành vi cục bộ #cậpNhậtSốTiền và hành vi tồn cục NgânHàng::+kếtNối(). @ Đại Học KHTN-TP HCM ; ASIA-ITC 127
  41. Phân tích thiết kế hệ thống hướng đối tượng bằng UML MáyATM::+đĩngMáy() Dong ket noi voi NganHang::+dongKetNoi() Ngan Hang Thuc hien tat may #tatMay() Đối tượng máyATM thực hiện đĩng máy bằng cách gọi thực hiện việc đĩng kết nối với ngân hàng và gọi thực hiện tắt máy. Quá trình này phát sinh thêm hai hành vi: +đĩngKếtNối()do đối tượng NgânHàng đảm nhận và #tắtMáy() là hành vi cục bộ của đối tượng MáyATM. Như vậy, chúng ta đã thiết kế xong các hành vi đã được xác định ở giai đoạn phân tích quá trình thiết kế này lại phát sinh các hành vi: #lấy_KháchHàng(), #cậpNhậtTàiKhoản(), #tạoGiaoTác(), +kếtNối(),+đĩngKếtNối(), #cậpNhậtSốTiền(), #tắtMáy(). Chúng ta lặp lại quá trình thiết kế cho những hành vi này. Chú ý rằng các hành vi liên quan đến việc truy cập dữ liệu hoặc xử lý giao diện sẽ được thiết kế ở những giai đoạn tiếp theo trong những chương sau. Các hành vi đĩ là: #lấy_KháchHàng(), #cậpNhậtTàiKhoản(), . Sau đây chúng ta tiếp tục thiết kế thuật giải cho các hành vi tạoGiaoTác(), +kếtNối(), +đĩngKếtNối(), #cậpNhậtSốTiền(): TàiKhoản::#tạoGiaoTác(loạiGiaoTác:String, sốTiền:float, soDu:float) giaoTac.soDu = soDu giaoTac = new (GiaoDich) giaoTac.ngayGiaoDich = date (today) giaoTac.loaiGiaoDich = loaiGiaoTac giaoTac.thoiGianGiaoDich = time (now) giaoTac.soTien = soTien Thuc hien cap nhat giao tac @ Đại Học KHTN-TP HCM ; ASIA-ITC 128
  42. Phân tích thiết kế hệ thống hướng đối tượng bằng UML : TàiKhoản : GiaoDịch tạoGiaoTác(loạiGiaoTác, sốTiền, sốDư) tạoMới() gánThơngTinGiaoDịch() Cập nhật vào cơ sở dữ liệu giao dịch mới Một đối tượng tài khoản tạo một giao tác liên quan đến nĩ bằng cách truyền các tham số: loại giao tác (gửi, rút), số tiền, và số dư sau khi thực hiện giao tác. Đối tượng tài khoản sẽ tạo mới một đối tượng giao tác ứng với thuộc tính giaoTác của nĩ và gán các thơng tin về giao tác đĩ, sau đĩ, lưu lại giao tác này vào cơ sở dữ liệu. Quá trình này lại phát sinh mới hai hành vi: hành vi +gánThơngTinGiaoDịch() của đối tượng giao dịch cĩ phạm vi tồn cục; hành vi cập nhật vào cơ sở dữ liệu mà chúng ta sẽ thiết kế chi tiết trong các chương sau. Tạm thời ở đây là vấn đề nội bộ của đối tượng tài khoản. GiaoDịch:: +gánThơngTinGiaoDịch(loạiGD:String, sốTiền:float, sốDư:float, ngàyGD:Date, giờGD:Time) Các hành vi +kếtNối(), +đĩngKếtNối(), +cậpNhậtSốTiền() thì đơn giản do đĩ chúng ta chỉ mơ tả khai báo nĩ: NgânHàng::+kếtNối() NgânHàng::+đĩngKếtNối() MáyATM::#cậpNhậtSốTiền(sốTiền:float) @ Đại Học KHTN-TP HCM ; ASIA-ITC 129
  43. Phân tích thiết kế hệ thống hướng đối tượng bằng UML NgânHàng +kếtNối() +đĩngKếtNối() KháchHàng #tênKháchHàng:String MáyATM #họKháchHàng:String #địaChỉ:String #mãPIN::String #trạngThái:String #sốThẻ:String #sốTiềnHiệnTại:float #tàiKhoản:TàiKhoản +khởiĐộngMáy() +kiểmTraMậtKhẩu() +đĩngMáy() #lấy_KháchHàng() #cậpNhậtSốTiền() 1 #tắtMáy() của 1 GiaoDịch TàiKhoản #giaoDịchID:String #sốTàiKhoản:String #ngàyGiaoDịch:Date #loạiTàiKhoản:String cĩ #thờiGianGiaoDịch:Time #sốDư:float #loạiGiaoDịch:String #giaoTác:GiaoTác 1 0 n #kháchHàng:KháchHàng #sốTiền:float #sốDư:float +gửiTiền() +rútTiền() +gánThơngTinGiaoDịch() #cậpNhậtTàiKhoản() #tạoGiaoTác() GiaoDịchRút GiaoDịchGởi Sơ đồ lớp của hệ thống máy ATM với kết quả tinh chế đầu tiên về thuộc tính và hành vi Tổng kết Bước đầu tiên trong tiến trình thiết kế hướng đối tượng là việc áp dụng các tiên đề và hệ luận để thiết kế các lớp, thuộc tính, hành vi, mối kết hợp, cấu trúc, phạm vi; quá trình này là một quá trình lặp và tinh chế. Trong giai đoạn phân tích, chỉ cần tên thuộc tính là đủ. Tuy nhiên, trong giai đoạn thiết kế, các thơng tin chi tiết sẽ phải được thêm vào mơ hình (đặc biệt là các định nghĩa của thuộc tính và hành vi). Thiếu đi một nghi thức thiết kế tốt cĩ thể phát sinh các kẽ hở về tính bao bọc (encapsulation). Vấn đề này xảy ra khi khi chi tiết về cài đặt bên trong của một lớp được phơi bày ra ở giao diện. Càng nhiều thơng tin chi tiết bên trong của lớp bị phơi bày, sự uyển chuyển trong các thay đổi hệ thống sau này càng giảm. Bởi vì nĩ làm giảm đi tính độc lập của đối tượng trong hệ thống. Do đĩ, chúng ta sử dụng khai báo phạm vi cục bộ (private) hoặc bảo vệ (protected) để xác định việc cài đặt đối tượng; sử dụng khai báo phạm vi tồn cục (public) để xác định chức năng của đối tượng. Thiết kế hướng đối tượng là một quá trình lặp. Do đĩ, chúng ta đừng ngại việc thay đổi tới một lớp, mỗi sự thay đổi hãy tin rằng sẽ là một sự cải tiến mơ hình hiện tại. Một điều ghi nhớ rằng các vần đề cần được giải quyết càng sớm càng tốt để khỏi phải trả giá lớn trong các giai đoạn sau. @ Đại Học KHTN-TP HCM ; ASIA-ITC 130
  44. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Câu hỏi và bài tập 1. Các nghi thức public và private là gì? Ý nghĩa của việc sử dụng những nghi thức này trong thiết kế? 2. Khi thiết kế mối kết hợp, chúng ta cần thêm một thuộc tính tham chiếu tới một lớp khi chúng ta cần xác định điều gì? 3. Tại sao chúng ta lại dựa vào sơ đồ hoạt động hoặc sơ đồ tuần tự để xác định hành vi của một lớp? @ Đại Học KHTN-TP HCM ; ASIA-ITC 131
  45. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Chương 9 THIẾT KẾ USE CASE Mục tiêu Mục tiêu của chương này cung cấp các kiến thức về: - Cung cấp cơ bản về kiến trúc ba tầng (tree-layer) - Xác định các lớp đối tượng ở tầng nghiệp vụ - Xác định các đối tượng ở tầng truy cập dữ liệu và thiết kế method - Xác định các đối tượng ở tầng giao diện và thiết kế method - Mơ tả hiện thực hố nội dung thiết kế một use case Nội dung Mơ hình use case chúng ta đạt được ở giai đoạn phân tích mơ tả tính năng hệ thống từ phía người sử dụng. Các chức năng này được xem như là sự biểu diễn các yêu cầu chức năng mà hệ thống cần đáp ứng. Trong giai đoạn thiết kế, các chức năng này phải được mơ tả ở gốc độ để cài đặt. Như vậy đối với một người thiết kế viên, chúng ta phải đặt câu hỏi là làm sao để biểu diễn sơ đồ use case này đủ chi tiết và trên một ngơn ngữ để cĩ thể cài đặt được. Một cách tiếp cận là tách biệt diễn đạt chức năng thành hai phần: phần mơ tả chức năng nhìn từ bên ngồi (từ phía người dùng: hệ thống cĩ những chức năng gì cung cấp cho người sử dụng – sơ đồ use case) và phần mơ tả chức chức nhìn từ bên trong (từ phía người phát triển: làm sao để hiện thực hố các chức năng để cài đặt nĩ – mơ tả hiện thực hố use case). Việc hiện thực hố được đảm nhận bởi một các use case cộng tác và do đĩ thiết kế nội dung bên trong một use case chính tập trung vào thiết kế use case cộng tác. Nội dung thiết kế use case cộng tác bao gồm: xác định thêm các đối tượng hệ thống phần mềm cùng cộng tác trong việc thực hiện use case và sự tương tác giữa chúng. Trong tiếp cận kiến trúc ba tầng (tree- layer), các đối tượng hệ thống phần mềm là các đối tượng ở tầng giao diện và tầng truy cập dữ liệu cũng như các đối tượng điều khiển phần mềm. Sau đĩ, xác định sự tương tác giữa các đối tượng trong use case nhằm phát hiện các method cho các đối tượng của hai tầng này cũng như hồn thiện việc tinh chế method cho các lớp. Kết quả của giai đoạn này là một sơ đồ lớp đầy đủ để chuẩn bị cho việc cài đặt hệ thống phần mềm trong giai đoạn sau. Kiến trúc 3 tầng (three - layer) Hầu hết các hệ thống được phát triển sử dụng các cơng cụ CASE ngày nay hoặc trong các mơi trường phát triển ứng dụng client – server cĩ xu hướng xây dựng một kiến trúc hai tầng (two – layer): giao diện (interface) và dữ liệu (data). Trong một hệ thống hai tầng, các màn hình giao diện người dùng liên kết để truy cập dữ liệu thơng qua các đoạn chương trình được cài trực tiếp trên các giao diện. Ví dụ, một chương trình viết trên Visual Basic cĩ một form giao diện, một thủ tục xử lý biến cố trong button “Update” của form này cĩ tên bUpdate_Click() cĩ thể thực hiện luơn việc truy cập và cập nhật CSDL trực tiếp, như vậy thủ tục này cài đặt luơn các ngữ nghĩa về tác nghiệp (business). Việc thiết kế theo mơ hình này tạo ra một sự phụ thuộc rất lớn giữa giao diện và CSDL và do đĩ, rất khĩ để cải tiến, bảo trì và tái sử dụng. CSDL Workstation Hình 5. Kiến trúc hai lớp: giao diện và dữ liệu @ Đại Học KHTN-TP HCM ; ASIA-ITC 132
  46. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Một cách tiếp cận kiến trúc khác tốt hơn chính là tạo ra sự độc lập giữa giao diện và người sử dụng bằng cách cơ lập các chức năng của giao diện với các chức năng tác nghiệp (business), và cơ lập các chức năng tác nghiệp với các chi tiết về truy cập CSDL, đĩ là cách tiếp cận ba tầng (three-layer). Từ cách tiếp cận này cho phép chúng ta tạo ra được các đối tượng đại diện các đối tượng hữu hình trong thực tế nhưng hồn tồn độc lập với cách thức mà các đối tượng này trình bày tới người dùng hoặc là với cách mà dữ liệu của nĩ được lưu trữ vật lý trong CSDL. Do đĩ, ba tầng trong cách tiếp cận này là: tầng giao diện người dùng (user interface layer), tầng tác nghiệp (business layer), và tầng truy cập dữ liệu (data layer). User interface layer Business layer Data layer CSDL Hình 6. Sơ đồ biểu diễn tiếp cận ba tầng Một tiếp cận khác đầy đủ hơn của một kiến trúc hệ thống cĩ thể được trình bày như sơ đồ sau: User interface layer Business layer Data layer Middleware System software Hình 7. Một sơ đồ khác của cách tiếp cận ba tầng (nhiều tầng) Trong đĩ, Tầng Middleware: chứa các thành phần xây dựng giao diện (ví dụ: thành phần dạng ActiveX), thành phần giao diện tới các hệ quản trị CSDL (ví dụ: ODBC, JDBC driver), các dịch vụ hệ điều hành độc lập với platform, các thành phần nhúng OLE (ví dụ: các cơng cụ soạn thảo sơ đồ nhúng, các bảng tính nhúng, ). @ Đại Học KHTN-TP HCM ; ASIA-ITC 133
  47. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Tầng System software: chứa các thành phần về hệ điều hành, CSDL, giao diện tới các phần cứng (ví dụ: các driver phần cứng cụ thể), v.v Xác địch lớp ở tầng dịch vụ tác nghiệp (business layer) Tầng này chứa đựng tất cả đối tượng mơ tả tác thành phần nghiệp vụ hệ thống (bao gồm cả dữ liệu và hành vi). Nĩ diễn đạt các đối tượng tồn tại trong thực tế vào trong hệ thống cần quản lý. Ví dụ, đơn đặt hàng, khách hàng, hố đơn, nhà cung cấp, hầu hết các phương pháp luận phân tích thiết kế đều đưa ra phương pháp xác định đối tượng này trong giai đoạn phân tích (tham khảo chương 6). Tuy nhiên, khi xác định các đối tượng ở lớp này chúng ta phải luơn nhớ hai điều sau: - Các đối tượng ở tầng tác nghiệp khơng nên quan tâm đến cách thức nĩ được hiển thị và bởi ai. Các đối tượng này được thiết kế để độc lập với bất kỳ một giao diện cụ thể, và vì vậy cách thức chi tiết để hiển thị một đối tượng nên tồn tại trong tầng giao diện thay vì trong tầng tác nghiệp. - Các đối tượng ở tầng tác nghiệp cũng khơng nên quan tâm đến nguồn gốc của nĩ hình thành. Cĩ nghĩa là các đối tượng này sẽ độc lập về dữ liệu của nĩ được lấy từ truy cập CSDL hay là từ truy xuất tập tin. I.1.1. Xác định các lớp tầng tác nghiệp Các lớp ở tầng tác nghiệp đã được xác định trong giai đoạn phân tích (xem chương 6). Trong phần này chúng tả mơ tả lại theo từng use case để cho phép chúng ta cĩ một cách nhìn về những gì mà các đối tượng ở tầng tác nghiệp kế hợp với nhau trong hoạt động đáp ứng yêu cầu sử dụng được mơ tả thơng qua use case. Chú ý rằng một lớp trong tầng này đều cĩ thể tham gia xử lý trong nhiều use case khác nhau. Các kết quả thiết kế lớp trong chương 8 đã cho chúng ta một sơ đồ thiết kế về tầng nghiệp vụ này. @ Đại Học KHTN-TP HCM ; ASIA-ITC 134
  48. Phân tích thiết kế hệ thống hướng đối tượng bằng UML NgânHàng +kếtNối() +đĩngKếtNối() KháchHàng #tênKháchHàng:String MáyATM #họKháchHàng:String #địaChỉ:String #mãPIN::String #trạngThái:String #sốThẻ:String #sốTiềnHiệnTại:float #tàiKhoản:TàiKhoản +khởiĐộngMáy() +kiểmTraMậtKhẩu() +đĩngMáy() #lấy_KháchHàng() #cậpNhậtSốTiền() 1 #tắtMáy() của 1 GiaoDịch TàiKhoản #giaoDịchID:String #sốTàiKhoản:String #ngàyGiaoDịch:Date #loạiTàiKhoản:String cĩ #thờiGianGiaoDịch:Time #sốDư:float #loạiGiaoDịch:String #giaoTác:GiaoTác 1 0 n #kháchHàng:KháchHàng #sốTiền:float #sốDư:float +gửiTiền() +rútTiền() +gánThơngTinGiaoDịch() #cậpNhậtTàiKhoản() #tạoGiaoTác() GiaoDịchRút GiaoDịchGởi Sơ đồ lớp của hệ thống ATM tầng nghiệp vụ Xác định lớp ở tầng truy cập dữ liệu (data layer) Tầng này chứa các đối tượng nhằm mục đích cung cấp các dịch vụ về dữ liệu cho tầng tác nghiệp. Nĩi chung, tất cả các nhu cầu truy cập CSDL hoặc tập tin để thao tác trên dữ liệu được lưu trữ của hệ thống đều phải thơng qua tầng này. Do đĩ, các đối tượng tầng này phải truy cập vật lý CSDL ở các vị trí (CSDL quan hệ, tập tin, internet, ) và xử lý nĩ. Hai nhiệm vụ chính của tầng này là: - Chuyển dịch các yêu cầu: chuyển dịch tất cả các yêu cầu liên quan đến dữ liệu từ tầng tác nghiệp đến một phương thức truy cập dữ liệu thích hợp (dạng SQL, truy xuất file, ) - Chuyển dịch kết quả: chuyển dịch tất cả dữ liệu truy cập được tới các đối tượng tác nghiệp thích hợp. Xác định các đối tượng lưu trữ và persistence Một chương trình sẽ tạo ra một số lượng dữ liệu trong quá trình thực thi. Mỗi dữ liệu sẽ cĩ một thời gian sống (lifetime) khác nhau. Dựa vào thời gian sống này chúng ta cĩ thể phân thành những loại dữ liệu sau: - Là kết quả tạm thời để đánh giá một biểu thức - Các biến trong quá trình thực thi một thủ tục (các tham số và biến trong phạm vi cục bộ) @ Đại Học KHTN-TP HCM ; ASIA-ITC 135
  49. Phân tích thiết kế hệ thống hướng đối tượng bằng UML - Các biến tồn cục và các biết cấp phát một cách tự động - Dữ liệu tồn tại giữa các lần thực thi một chương trình - Dữ liệu tồn tại giữa các phiên bản của một chương trình - Dữ liệu tồn tại vượt ngồi phạm vi sống của một chương trình Ba loại dữ liệu đầu tiên đều gọi là dữ liệu tạm thời (transient data). Là dữ liệu cĩ thời gian sống phụ thuộc vào thời gian sống của tiến trình sử dụng nĩ. Khi tiến trình kết thúc thì dữ liệu này bị giải phĩng. Ngược lại, ba loại dữ liệu cuối gọi là dữ liệu persistent (persistent data). Các dữ liệu này tồn tại lâu hơn tiến trình sử dụng nĩ và cĩ thể độc lập với tiến trình này. Các ngơn ngữ lập trình cung cấp sự hỗ trợ hồn hảo cho các loại dữ liệu tạm thời. Các loại dữ liệu persistent sẽ được quản lý bởi hệ quản trị cơ sở dữ liệu hoặc hệ thống lưu trữ tập tin. Đối với các đối tượng cũng được áp dụng một cách tương tự. Các đối tượng cũng cĩ một thời gian sống. Chúng được tạo ra một cách tường minh và cĩ thể tồn tại trong một khoảng thời gian ngắn (thời gian của một ứng dụng, của một phiên, ). Tuy nhiên, cũng cĩ đối tượng tồn tài lâu hơn thời gian của một ứng dụng, để làm điều này thì đối tượng phải được lưu trữ ra tập tin hoặc cơ sở dữ liệu. Việc lưu trữ này sẽ cung cấp cho đối tượng thời gian sống lâu hơn quá trình của tiến trình. Đặc tính này người ta gọi là persistent. Trong hệ thống ATM, các lớp persistent gồm: KháchHàng, TàiKhoản, GiaoTác, GiaoTácGửi, GiaoTácRút. Các lớp như MáyATM, NgânHàng được xác định khơng phải là lớp persistent bởi vì chúng ta khơng cĩ nhu cầu lưu trữ thơng tin của các đối tượng các lớp này. Chuyển đổi đối tượng sang mơ hình quan hệ Trong cơ sở dữ liệu quan hệ, một lược đồ được hình thành bởi các bảng (table) gồm các cột và dịng. Trong mơ hình đối tượng, tương ứng tới một bảng là một lớp (hoặc nhiều lớp). Các thành phần tương ứng như sau: - Một cột ứng với một thuộc tính (persistent) lớp - Một dịng của bảng ứng với một đối tượng (thể hiện của một lớp) - Một thủ tục lưu trữ nội (stored procedure) cĩ thể tương ứng với một method. Như vậy, việc chuyển đổi sơ đồ lớp sang lược đồ quan hệ gồm cĩ những cơng việc sau: - Chuyển đổi lớp – bảng - Chuyển đối mối liên kết o Chuyển đổi liên kết kết hợp o Chuyển đổi liên kết kế thừa Chuyển đổi lớp – bảng Trong đa số các trường hợp thì việc chuyển đổi này là một – một. Một lớp sẽ chuyển thành một bảng cụ thể như sau: - Một lớp Ỉ một bảng - Một thuộc tính (persistent) Ỉ một cột: chỉ cĩ các thuộc tính cĩ nhu cầu lưu trử và được địi hỏi bởi ứng dụng sẽ được chuyển thành cột của bảng. - Một đối tượng (thể hiện) Ỉ một dịng @ Đại Học KHTN-TP HCM ; ASIA-ITC 136
  50. Phân tích thiết kế hệ thống hướng đối tượng bằng UML KháchHàng Tên_KH Họ_KH MãPIN Số_Thẻ tênKháchHàng họKháchHàng mãPIN sốThẻ Chuyển đổi mối liên kết Chuyển đổi liên kết kết hợp(association) Trường hợp 1 KháchHàng Bảng KháchHàng tênKháchHàng Tên_KH Họ_KH MãPIN Số_Thẻ họKháchHàng mãPIN sốThẻ 1 1 Bảng TàiKhoản TàiKhoản Số_TK Loại_TK Số_Dư_TK Số_Thẻ sốTàiKhoản loạiTàiKhoản sốDư Trong chuyển đổi mối kết hợp dạng 1 – 1, chúng ta cĩ thể lấy cột khố chính trong một bảng chuyển qua bảng khác làm khố ngoại. Trong mối kết hợp 1 – 1 trên (giữa lớp KháchHàng và TàiKhoản), chúng ta cĩ thể lấy khố của bảng KháchHàng (Số_Thẻ) đưa vào bảng TàiKhoản là khố ngoại. Hoặc ngược lại, chúng ta cĩ thể lấy khố của bảng TàiKhoản (Số_TK) đưa vào bảng KháchHàng làm khố ngoại. Hoặc thực hiện cả hai trường hợp. Trường hợp 2 GiaoDịch TàiKhoản giaoDịchID ngàyGiaoDịch sốTàiKhoản cĩ thờiGianGiaoDịch loạiTàiKhoản loạiGiaoDịch sốDư 1 0 n sốTiền sốDư Bảng TàiKhoản Số_TK Loại_TK Số_Dư_TK Số_Thẻ Bảng GiaoDịch GD_ID Ngày_GD Giờ_GD Loại_GD Số_Tiền Số_Dư Số_TK @ Đại Học KHTN-TP HCM ; ASIA-ITC 137
  51. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Trường hợp 3 Trong chuyển đổi mối kết hợp dạng 1 – n, chúng ta lấy cột khố chính của bảng ứng với lớp phía 1 trong mối kết hợp đưa vào bảng ứng với lớp phía n làm khố ngoại. Trong ví dụ trên, bảng GiaoDịch sẽ lấy thuộc tính Số_TK trong bảng TàiKhoản làm khố ngoại. NhânViên CơngViệc mãNhânViên Tham gia cơngViệcID tênNhânViên mơTảCơngViệc sốĐiệnThoại 0 n 0 n ngàyBắtĐầu Bảng NhânViên Mã_NV Tên_NV Số_ĐT Bảng NhânViên_CơngViệc Mã_NV Cơng_Việc_ID Bảng CơngViệc Cơng_việc_ID Mơ_tả_CV Ngày_BĐ Trong chuyển đối mối kết hợp n – n, chúng ta tạo ra một bảng cho mối kết hợp đĩ bằng cách lấy các khố chính của các bảng đưa vào bảng mới này như là các khố ngoại. Trong ví dụ trên, mối kết hợp Tham gia giữa lớp NhânViên và lớp CơngViệc sẽ được mơ tả bởi một bảng NhânViên_CơngViệc bao gồm các cột Mã_NV và Cơng_Việc_ID lần lượt là khố chính của bảng NhânViên và bảng CơngViệc. Chuyển đổi liên kết kế thừa Trong lược đồ quan hệ khơng cĩ khái niệm kế thừa mà chúng ta thường dùng liên kết khố chính – khố ngoại để diễn đạt điều này. Sau đây là các trường hợp mà chúng ta cĩ thể quyết định chọn một: NhânViên mãNhânViên tênNhânViên sốĐiệnThoại NhânViênCơngNhật NhânViênBiênChế lươngNgày lươngTháng bậcLương Trường hợp 1 @ Đại Học KHTN-TP HCM ; ASIA-ITC 138
  52. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Bảng NhânViên Mã_NV Tên_NV Điện_Thoại Lương_Ngày Lương_Tháng Bậc_Lương Loại_NV Chỉ sử dụng một bảng lưu trữ tất cả các loại nhân viên. Do đĩ, các thuộc tính của bảng được hình thành từ các thuộc tính của lớp NhânViên, NhânViênCơngNhật và Nhân ViênBiênChế. Ngồi ra chúng ta cũng đưa vào thêm một thuộc tính nhằm phân loại dịng này thuộc đối tượng của lớp nào. Trường hợp 2 Bảng NhânViên Mã_NV Tên_NV Điện_Thoại Bảng NhânViênCơngNhật Mã_NV Tên_NV Điện_Thoại Lương_Tháng Bậc_Lương Bảng NhânViênBiênChế Mã_NV Tên_NV Điện_Thoại Lương_Ngày Sử dụng ba bảng tương ứng cho ba lớp. Tuy nhiên, nhằm mơ tả sự thừa kế trong các bảng NhânViênCơngNhật và NhânViênBiênChế chúng ta thêm vào tất cả các thuộc tính của bảng nhân viên. Các thể hiện tương ứng của các nhân viên cơng nhật hay biên chế sẽ chỉ lưu trong bảng tương ứng. Trường hợp 3 Bảng NhânViên Mã_NV Tên_NV Điện_Thoại Bảng NhânViênCơngNhật Mã_NV Lương_Tháng Bậc_Lương Bảng NhânViênBiênChế Mã_NV Lương_Ngày Giống như trường hợp 2. Ở hai bảng NhânViênCơngNhật và NhânViênBiênChế chỉ lưu khố ngoại tham chiếu đến bảng nhân viên để tham khảo thơng tin thừa kế. Trường hợp 4 @ Đại Học KHTN-TP HCM ; ASIA-ITC 139
  53. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Bảng NhânViênCơngNhật Mã_NV Tên_NV Điện_Thoại Lương_Tháng Bậc_Lương Bảng NhânViênBiênChế Mã_NV Tên_NV Điện_Thoại Lương_Ngày Chỉ dùng hai bảng NhânViênCơngNhật và NhânViênBiênChế. Tuy nhiên, tất cả các thuộc tính của lớp NhânViên sẽ được đưa vào hai bảng này nhằm mơ tả sự thừa kế. Nếu chúng ta muốn truy xuất thơng tin về lớp NhânViên thì chúng ta cĩ thể tạo một khung nhìn (view) hội của hai bảng này. Sơ đồ cài đặt các đối tượng persistent của hệ thống ATM dùng mơ hình quan hệ như sau: Bảng KháchHàng Tên_KH Họ_KH MãPIN Số_Thẻ Bảng TàiKhoản Số_TK Loại_TK Số_Dư_TK Số_Thẻ Bảng GiaoDịch GD_ID Ngày_GD Giờ_GD Loại_GD Số_Tiền Số_Dư Số_TK Trong lược đồ trên của máy ATM, chúng ta áp dụng trường hợp 1 cho cấu trúc các lớp GiaoDịch, GiaoDịchGửi và GiaoDịchRút. Xác định lớp ở tầng truy cập dữ liệu Mục tiêu chính của việc tạo ra một tầng truy cập dữ liệu là để tạo ra các lớp cĩ nhiệm vụ truy cập tới các vị trí mà dữ liệu thực sự được lưu trữ nhằm giúp cho tầng nghiệp vụ khơng quan tâm đến vị trí cũng như hình thức lưu trữ của dữ liệu này (dạng tập tin, cơ sở dữ liệu quan hệ, cơ sơ dữ liệu đối tượng, internet, DCOM, ). Các đối tượng ở tầng này phải cĩ trách nhiệm cung cấp một liên kết giữa nghiệp vụ (cách nhìn theo đối tượng) và dữ liệu lưu trữ. Tiến trình xác định các lớp ở tầng này gồm các bước sau: - Với mỗi lớp persistent ở tầng nghiệp vụ, tạo một lớp tương ứng ở tầng truy cập dữ liệu. Ví dụ, nếu chúng ta cĩ ba lớp ở tầng nghiệp vụ là Class1, Class2, Class3 thì chúng ta tạo ra ba lớp tương ứng ở tầng truy cập dữ liệu là: ClassDB1, ClassDB2, ClassDB3. - Xác định mối kết hợp: tương tự như xác định mối kết hợp với các lớp ở tầng nghiệp vụ. Tạo mối kết hợp giữa lớp tầng truy cập dữ liệu và lớp của nĩ tương ứng ở tầng @ Đại Học KHTN-TP HCM ; ASIA-ITC 140
  54. Phân tích thiết kế hệ thống hướng đối tượng bằng UML nghiệp vụ là mối kết hợp dạng thành phần (aggregation). Tạo thuộc tính tham chiếu cho các lớp của tầng nghiệp vụ tham chiếu đến lớp ở tầng truy cập dữ liệu dựa trên mối liên kết vừa xác định. - Đơn giản hố các lớp và mối kết hợp: mục tiêu chính là để loại các lớp và cấu trúc dư thừa hoặc khơng cần thiết. Thơng thường, chúng ta kết hợp nhiều lớp thành một và đơn giản hố cấu trúc lớp cha – lớp con. o Các lớp dư thừa: nếu chúng ta cĩ hai lớp trở lên cùng cung cấp các dịch vụ tương tự nhau, chúng ta giữ lại một và loại đi một. o Các method: xem lại các lớp chỉ cĩ một hoặc hai method cĩ thể kết hợp với các lớp khác? Thơng thường, chúng ta chỉ quan tâm đến các method cĩ nhu cầu truy cập đến dữ liệu lưu trữ. Các method đĩ là: đọc dữ liệu từ dữ liệu lưu trữ của đối tượng, xố dữ liệu của đối tượng khỏi dữ liệu lưu trữ và cập nhật các thay đổi của đối tượng xuống dữ liệu lưu trữ. - Lặp lại và tinh chế tiến trình này Xác định method các lớp tầng truy cập dữ liệu Trong thiết kế hướng đối tượng nhằm đảm bảo tính bao bọc trong các cài đặt chi tiết, chúng ta mong muốn các đối tượng persistent được quan sát giống như một đối tượng tạm thời (transient) trong hệ thống. Nghĩa là chúng ta phải tạo được một cách nhìn trong suốt cho các đối tượng trong hệ thống mà khơng phân biệt và xử lý khác nhau giữa đối tượng persistent và bất kỳ đối tượng nào khác. Tuy nhiên, đây cũng là một vấn đề của hệ thống bởi vì dữ liệu và trạng thái của các đối tượng persistent được quản lý tách biệt khỏi chương trình ứng dụng. Do đĩ, sự nhất quán giữa đối tượng trong ứng dụng và trạng thái của nĩ trong cơ sở dữ liệu phải luơn luơn được đặt ra trong thiết kế hệ thống hướng đối tượng. Để đảm bảo điều này thì cĩ nhiều khía cạnh của đối tượng một ứng dụng phải kiểm sốt: - Đọc và lưu các đối tượng persistent - Xố các đối tượng persistent - Quản lý giao tác trên các đối tượng persistent - Kiểm sốt cơ chế khố và truy cập đồng hành Ghi đối tượng persistent Cĩ hai trường hợp cần xem xét: thời điểm ban đầu khi đối tượng được tao ra và phải ghi vào cơ sở dữ liệu; các thời điểm tiếp theo khi chương trình cập nhật trạng thái của đối tượng và thay đổi này cũng được ghi vào cơ sở dữ liệu. @ Đại Học KHTN-TP HCM ; ASIA-ITC 141
  55. Phân tích thiết kế hệ thống hướng đối tượng bằng UML Một đối tượng : ĐơnHàng : ĐơnHàngDB DB : DBMS tạoĐơnHàng() Gán thơng tin cho đơn hàng ghiĐơnHàng() cậpNhậtĐơnHàng() Thực thi SQL cập nhật Sơ đồ tuần tự trên mơ tả một trong những giải pháp cập nhật đối tượng persistent. Khi một đối tượng đơn hàng được tạo ra trong ứng dụng, đối tượng này ngay lập tức được ghi vào cơ sở dữ liệu bởi lớp ĐơnHàngDB của tầng truy cập dữ liệu. Tương tự cho hoạt động cập nhật, khi một đối tượng trong ứng dụng thay đổi trạng thái của đối tượng đơn hàng. Ngay lập tức sự thay đổi này được cập nhật vào cơ sở dữ liệu bởi ĐơnHàngDB. Đối tượng điều : ĐơnHàng : ĐơnHàngDB DB : DBMS khiển Đơn hàng lấyThơngTinĐơnHàng() dh:ĐơnHàng cậpNhậtĐơnHàng(dh) Thực hiện SQL cập nhật Một giải pháp khác cho cập nhật đối tượng persistent. Chúng ta xây dựng một đối tượng điều khiển và khi nào thơng tin đối tượng persistent đuợc cập nhật sẽ được quản lý bởi đối tượng điều khiển. Method cậpNhậtĐơnHàng() sẽ được thiết kế thơng minh để nhận ra một đơn hàng là tạo mới hay cập nhật. Trong giải pháp này, việc cập nhật được quản lý một cách tường minh và hệ thống chấp nhận các khoảng thời điểm thiếu sự nhất quán giữa đối tượng và dữ liệu lưu trữ về đối tượng. Đọc đối tượng persistent @ Đại Học KHTN-TP HCM ; ASIA-ITC 142