Systems Analysis and Design - Chapter 8: Class and Method Design - Lê Thị Tú Kiên

pdf 51 trang Gia Huy 17/05/2022 1700
Bạn đang xem 20 trang mẫu của tài liệu "Systems Analysis and Design - Chapter 8: Class and Method Design - Lê Thị Tú Kiên", để 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:

  • pdfsystems_analysis_and_design_chapter_8_class_and_method_desig.pdf

Nội dung text: Systems Analysis and Design - Chapter 8: Class and Method Design - Lê Thị Tú Kiên

  1. Chương 8: Thiết kế lớp và phương thức 1
  2. Mục tiêu của chương: Làm quen với các tiêu chí của thiết kế hướng đối tượng: khớp nối, sự gắn kết và sự đồng cảm. Có thể chỉ định, tái cấu trúc và tối ưu hóa thiết kế đối tượng. Có thể xác định việc sử dụng lại các lớp, thư viện, khung và thành phần được xác định trước. Có thể chỉ định các ràng buộc và hợp đồng. Có thể tạo ra một đặc tả phương pháp. 2
  3. Các đặc điểm cơ bản của hướng đối tượng 3
  4. Các phần tử của phân tích hướng đối tượng: - Các lớp đối tượng - Các đối tượng - Các thuộc tính - Các trạng thái - Các phương thức - Các thông điệp 4
  5. Tính đóng gói và ẩn dấu thông tin - Đóng gói là cơ chế tổ hợp các thao tác và dữ liệu vào một đối tượng. - Ẩn dấu thông tin có nghĩa là chỉ những thông tin của một đối tượng được yêu cầu sử dụng mới xuất hiện ở bên ngoài đối tượng đó. Ẩn dấu thông tin có liên quan mật thiết với phạm vi hoạt động của phương thức và thuộc tính (visibility). - Sự liên lạc/tương tác giữa các đối tượng đều thông qua phương thức. - Việc sử dụng đối tượng để gửi một thông điệp làm kích họat một phương thức là chìa khóa cho khả năng sử dụng lại (key to reusability), vì nó che cho hoạt động bên trong của đối tượng khỏi bị những thay đổi bên ngoài của hệ thống tác động đến. Nó cũng giữ cho hệ thống không bị ảnh hưởng khi đối tượng bị thay đổi. 5
  6. Tính đa hình (Đa xạ) và ràng buộc động - Đa hình có nghĩa là hệ thống hướng đối tượng có thể cùng gửi một thông điệp được gửi đến một tập các đối tượng nhưng nó kích hoạt thực hiện các phương thức khác nhau trên các đối tượng khác nhau. - Ràng buộc động có nghĩa kiểu của đối tượng được phân biệt tại thời điểm thực hiện. Ví dụ, giả sử chúng ta có một danh sách (mảng) các nhân viên bao gồm cả nhân viên trả lương theo giờ công và nhân viên trả lương theo tháng. Trên mỗi đối tượng nhân viên thuộc cả hai loại này đều có phương thức tính lương (computerPay()) như hình ở slide liền sau. Khi một thông điệp gửi tính lương cho tất cả các đối tượng nhân viên thì với mỗi loại nhân viên sẽ thực hiện phương thức tính lương khác nhau. Như vậy phương thức cụ thể sẽ được xác định tại thời điểm nó thực hiện. - Cơ chế đa hình và ràng buộc động phụ thuộc vào ngôn ngữ lập trình cụ thể. Hầu hết các ngôn ngữ lập trình hỗ trợ ràng buộc động cho phương thức, một số ngôn ngữ hỗ trợ ràng buộc động cho thuộc tính. Do đó, đội dự án cần phải biết rõ ngôn ngữ nào sẽ được sử dụng để viết chương trình khi thiết kế hệ thống. 6
  7. Tính kế thừa - Kế thừa cho phép xác định các lớp sau bằng việc sử dụng lại các lớp đã xác định trước đó (lớp con kế thừa thuộc tính của siêu lớp) - Kế thừa đơn (Single inheritance): một lớp có chỉ một lớp cha - Kế thừa bội/ Đa kế thừa (Multiple inheritance): Một lớp có thể có nhiều lớp cha. - Khái niệm định nghĩa lại và xung đột kế thừa - Đa phần các xung đột kế thừa đều do phân lớp chưa tốt Các xung đột kế thừa: - Hai thuộc tính hay phương thức được kế thừa có cùng tên và ngữ nghĩa - Hai thuộc tính hay phương thức được kế thừa có tên khác nhau nhưng có cùng ngữ nghĩa (đồng nghĩa). - Hai thuộc tính hay phương thức có cùng tên nhưng ngữ nghĩa khác nhau (đồng âm). 8
  8. Để giảm bớt các xung đột kế thừa, Jim Rumbaugh và các đồng nghiệp đã đưa ra các một số quy tắc như sau: 1. Không định nghĩa lại các truy vấn. 2. Khi định nghĩa lại các phương thức kế thừa thì nên giữ nguyên ngữ nghĩa của nó giống như phương thức được kế thừa. 3. Ngữ nghĩa kế thừ của phương thức không bao giwof được thay đổi. 4. Tập các tham số (đối số) của phương thức kế thừa không nên thay đổi. 9
  9. Tiêu chuẩn thiết kế lớp và phương thức Khi đánh giá bản thiết kế hướng đối tượng, một tập các tiêu chí sẽ được sử dụng để đánh giá bản thiết kế đó. Các tiêu chí đó bao gồm sự song hành (coupling) giữa các môđun, sự gắn kết (cohesion) trong môđun, sự công sinh (connascence) giữa các các môđun . Mỗi mô đun là một lớp đối tượng hoặc một đối tượng hoặc một phương thức. 10
  10. Coupling (Song hành/Sự phụ thuộc lẫn nhau) - Chỉ sự phụ thuộc lẫn nhau hoặc quan hệ nội tại giữa các mô đun trong một hệ thống. Sự phụ thuộc lẫn nhau càng cao thì thay đổi ở mô đun này càng dễ kéo theo thay đổi ở mô đun khác - Có hai loại song hành giữa các mô đun: tương tác và kế thừa. - Song hành tương tác (Interaction coupling) đề cập đến các mối quan hệ giữa phương thức và đối tượng thông qua việc chuyển thông điệp. - Song hành kế thừa đề cập đến các lớp phụ thuộc lẫn nhau chặt chẽ như thế nào trong phân cấp kế thừa. 11
  11. Luật Demeter Để tối thiểu hóa sự song hành tương tác trong hệ thống thiết kế, chúng ta nên áp dụng các luật Demeter. Một đối tượng chỉ nên gửi thông điệp cho: - Chính nó - Đối tượng chứa trong các thuộc tính của chính nó hoặc của lớp cha - Đối tượng được truyền như một tham số cho phương thức - Đối tượng được tạo ra bằng phương thức - Đối tượng được lưu trữ trong một biến toàn cục 12
  12. Ví dụ minh họa luật Demeter 13
  13. Ví dụ minh họa luật Demeter 14
  14. Các kiểu tương tác song hành: Có 6 loại tương tác song hành như trên bảng, các loại tương tác được đánh giá tốt hay xấu theo thứ tự trừ trên xuống: - Không song hành trực tiếp: Các phương pháp không liên quan đến nhau, nghĩa là chúng không gọi nhau. - Dữ liệu (Data): Phương thức gọi truyền một biến sang phương thức được gọi. Nếu biến được truyền là một đối tượng thì toàn bộ đối tượng đó được sử dụng bởi phương thức được gọi để thực hiện chức năng của nó. - Tương tác một phần (Stamp): Phương thức gọi truyền một biến đối tượng đến cho phương thức được gọi, nhưng phương thức được gọi chỉ sử dụng một phần của đối tượng để thực hiện chức năng của nó. - Tương tác điều khiển (Control): Phương thức truyền biến điều khiển mà giá trị của nó sẽ điều khiển việc thực thi phương thức gọi. - Truy cập ra ngoài phạm vi (Common hoặc Global): Các phương thức truy cập đến một "vùng dữ liệu toàn cục" nằm bên ngoài các đối tượng. - Truy cập vào bên trong đối tượng (Content hoặc Pathological): Một phương thức của một đối tượng truy cập đến phần bên trong (phần ẩn) của đối tượng. Điều này vi phạm qui tắc đóng gói và ẩn dấu thông tin. Tuy nhiên, C ++ cho phép điều này diễn ra thông qua việc sử dụng “friends". 15
  15. Sự gắn kết (Conhension) - Mỗi môđun nên được thiết kế đơn nhất, nghĩa là: - Một lớp hay một đối tượng chỉ thể hiện một sự vật, hiện tượng - Một phương thức chỉ giải quyết một nhiệm vụ. Một phương thức biểu diễn đa nhiệm bao giờ cũng khó hiểu hơn biểu diễn đơn nhiệm. - Có 3 loại gắn kết môđun: - Sự gắn kết trong phương thức - Sự gắn kết trong lớp đối tượng - Sự gắn kết trong tổng quát hóa/chuyên biệt hóa 16
  16. Sự gắn kết (Conhension) – tiếp Sự gắn kết trong phương thức có nghĩa: - Thể hiện sự gắn kết bên trong của mỗi phương thức - Mỗi phươg thức chỉ nên làm một việc - Mỗi phương thức chỉ nên thực hiện một chức năng. 17
  17. 7 kiểu gắn kết trong phương thức (được sắp xếp từ tốt đến xấu): - Gắn kết chức năng (Functional): Một phương thức thực hiện một công việc. Ví dụ, tính điểm trung bình học kì cho sinh viên. Đây là kiểu gắn kết tốt nhất. - Gắn kết tuyến tính (Sequential): Một phương thức bao gồm hai chức năng với kết quả của chức năng thứ nhất sẽ là đầu vào của chức năng thứ hai. Ví dụ, định dạng và xác nhận điểm trung bình học kì của sinh viên. - Gắn kết kết nối (Communicational): Một phương thức kết hợp hai chức năng sử dụng chung một tập thuộc tính khi thực hiện. Ví dụ tính điểm trung bình học kì, điểm trung bình tích lũy. - Gắn kết thủ tục (Procedural): Một phương bao gồm nhiều chức năng có mức độ liên quan với nhau ít. Ví dụ, một phương thức có thể tính điểm trụng bình học tập, in bảng điểm sinh viên viên, in bảng điểm tích lũy học tập. - Gắn kết tạm thời (Temporal or Classical): Phương thức hỗ trợ nhiều chức năng liên quan tại một thời điểm. Ví dụ, khởi tạo tất cả các thuộc tính. - Gắn kết lôgic (Logical): Một phương thức chứa nhiều chức năng nhưng việc lựa chọn một chức năng cụ thể khi thực thi dựa trên một biến điều khiển truyền vào trong phương thức. Ví dụ, phương thức được gói có thể thực hiển mở một tài khoản kiểm tra, mở một tài khoản tiết kiệm hoặc tính toán khoản vay dựa trên thông điệp được gửi bởi phương thức gọi. - Gắn kết ngẫu hợp (Coincidental): Một phương thưc bao gồm nhiều chức năng không liên quan gì đến nhau. Ví dụ, một phương thức bao gồm tất cả các chức năng như cập nhật bản ghi khách hàng, tính các khoản nợ, in báo cáo ngoại lệ và 18
  18. phân tích cấu trúc giá của đối thủ cạnh tranh. Đây là kiểu gắn kết phương thức tệ nhất. 18
  19. Sự gắn kết (Conhension) – tiếp Sự gắn kết trong lớp đối tượng có nghĩa: - Thể hiện sự gắn kết giữa các thuộc tính và các phương thức trong cùng một lớp. - Một lớp nên chỉ biểu diễn cho một thứ. - Tất cả các thuộc tính và phương thức trong một lớp nên chỉ là thuộc tính và phương thức được yêu cầu (một đối tượng có nhiều thuộc tính và hoạt động khác nhau, nhưng chỉ quan tâm đến những thuộc tính/hoạt động thuộc phạm vi quan tâm) 19
  20. Các kiểu gắn kết trong lớp đối tượng: - Kiểu lý tưởng (Ideal): Trong lớp đổi tượng không có sự gắn kết pha trộn nào. - Pha trộn vai trò (Mixed-Role): Lớp đối tượng có một hoặc nhiều thuộc tính biểu diễn ngữ nghĩa cho các đối tượng thuộc lớp đối tượng khác trong cùng tầng kiến trúc. - Pha trộng miền (Mixed-Domain): Một lớp có một hoặc nhiều thuộc tính biểu diễn cho các đối tượng thuộc lớp khác ở tầng kiến trúc khác. - Pha trộn đối tượng (Mixed-Instance): Một lớp biểu diễn hai kiểu đối tượng khác nhau. Lớp đối tượng nên được tách ra thành hai lớp riêng biệt. 20
  21. Sự gắn kết tổng quát hóa/chuyên biệt hóa - Sự gắn kết tổng quát hóa/chuyên biệt hóa thể hiện mức độ gắn kết trong cây phân cấp thừa kế. - Các lớp trong cây phân cấp kế thừa có quan hệ với nhau như thế nào? - Các lớp có quan hệ thông qua ngữ nghĩa tổng quát hóa và chuyên biệt hóa không? - Chúng có liên quan thông qua một trong các loại quan hệ liên kết, kết hợp, hợp thành để hỗ trợ cho mục đích sử dụng lại không? 21
  22. Sự cộng sinh giữa các môđun (Connascence) - Hai môđun (lớp hay phương thức) là cộng sinh nếu ta thay đổi ở một môđun thì cũng cần thay đổi ở môđun kia - Cộng sinh và đóng gói: - Tối thiểu hóa cộng sinh tổng thể bằng cách giới hạn các cộng sinh không cần thiết trong suốt hệ thống - Tối thiểu hóa cộng sinh xuyên qua mọi biên của gói chẳng hạn biên phương thức và 22
  23. biên lớp - Tối đa hóa cộng sinh bên trong mọi biên đóng gói 22
  24. Các kiểu cộng sinh giữa các môđun. 23
  25. CÁC HOẠT ĐỘNG THIẾT KẾ ĐỐI TƯỢNG 24
  26. Hoạt động 1: Thêm các đặc tả cho lớp và phương thức - Xem xét lại các các mô hình đã xây dựng trong giai đoạn phân tích (mô hình chức năng, mô hình cấu trúc, mô hình hành vi). . Đảm báo rằng các lớp đối tượng trong tầng miền vấn đề (problem domain layer) đã đủ và là các lớp cần thiết. . Trong mỗi lớp không có thuộc tính hay phương thức nào bị thiếu . Không có thuộc tính hoặc phương thức được xác định thừa trong các lớp. - Kiểm phạm vi hoạt động/ hiển thị (ẩn hoặc nhìn thấy được) của các thuộc tính và phương thức trong mỗi lớp đối tượng (public, private, protect). 25
  27. Thiết đặt tham số/đối số cho phương thức: • Đăth tên cho phương thưc • Xác định các tham số / đối số của phương thức • Kiểu giá trị mà phương thức trả về cho phương thức gọi. 26
  28. - Xác định các ràng buộc: Điều kiện trước, Điều kiện sau, Bất biến. Các ràng buộc này sẽ được đề cập chi tiết ở phần sau. • Làm thế nào để xử lý vi phạm ràng buộc (chính là các exception (ngoại lệ) trong trong C++ và Java)? 27
  29. Hoạt động 2: Xác định các trường hợp có khả năng tái sử dụng • Pattern: mỗi pattern là một nhóm các lớp cộng tác cung cấp một giải pháp cho một vấn đề thường xảy ra. • Framework: bao gồm một tập các lớp thực thi có thể được sử dụng làm nên tảng để xây dựng một ứng dụng. • Các thư viện lớp: Một thư viện lớp có một tập các lớp được thực thi được thiết kế để tái sử dụng. 28
  30. • Components (Các thành phần): Một thành phần là một phần mềm đóng gói được tích hợp vào một hệ thống ứng dụng để cung cấp một chức năng cụ thể. 29
  31. Hoạt động 3: Cấu trúc lại bản thiết kế - Sau khi các lớp đối tượng và phương thức đã được xác định và các thư viện lớp, các framework, các thành phần đã được kết hợp vào bản thiết kế đang phát triển, chúng ta nên sử dụng kỹ thuật phân tách (factoring) để cấu trúc lại bản thiết kế. - Phân tách là quá trình tách ra thêm một phương thức/một lớp từ một phương thức/một lớp để đơn giản hóa thiết kế tổng thể. - Một quy trình khác cũng rất hữu ích trong tái kiến trúc bản thiết kế, đó là chuẩn hóa dữ liệu. Quá trình này sẽ giúp xác định lại các lớp bị thiếu trong quá trình mô hình hóa cấu trúc. Chuẩn hóa dữ liệu sẽ được trình bày cụ trong chương thiết kế tầng quản lý và truy cập dữ liệu. - Đảm bảo rằng tất cả các quan hệ thừa kế chỉ hỗ trợ ngữ nghĩa khái quát hóa/chuyên biệt hóa. 30
  32. Hoạt động 4: Tối ưu hóa bản thiết kế Các hoạt động tối ưu bản thiết kế bao gồm: • Xem xét lại đường dẫn truy cập giữa các đối tượng • Xem xét các thuộc tính của mỗi lớp • Xem xét lại fan-out (số thông điệp gửi đi từ phương thức) trực tiếp và gián tiếp • Xem xét thứ tự thực hiện các câu lệnh trong các phương pháp thường được sử dụng • Tránh tính toán lại bằng cách tạo các thuộc tính dẫn xuất (tính toán được từ các thuộc tình khác) và đặt các trình kích hoạt việc tính toán lại các thuộc tình dẫn xuất trên các thuộc tính có trong biểu thức tính giá trị cho các thuộc tính dẫn xuất. 31
  33. Hoạt động 4: Tối ưu hóa bản thiết kế • Xem xét lại đường dẫn truy cập giữa các đối tượng: - Một thông điệp đi từ một đối tượng này đến đối tượng khác có thể có đường đi (long path) rất dài (truyền qua nhiều đối tượng trung gian). - Nếu đường đi của một thông điệp dài và được gửi đi thường xuyên thì đường dẫn này cần được xem xét và tối ưu. Ví dụ, thêm một thuộc tính cho đối tượng gọi có kết nối trực tiếp tới đối tượng đích (nhận thông điệp). 32
  34. Hoạt động 4: Tối ưu hóa bản thiết kế • Xem xét lại thuộc tính của mỗi lớp: - Xác định rõ phương thức nào sử dụng thuộc tính nào, đối tượng bào sử dụng phương thức nào. - Nếu các phương thức có một thuộc tính là các phương thức đọc hay cập nhật, và chỉ có các đối tượng của một lớp gửi các thông điệp để đọc và cập nhật thuộc tính đó thì thuộc tính này nên được đặt ở lớp gọi thay vì đặt ở lớp được gọi. 33
  35. Hoạt động 4: Tối ưu hóa bản thiết kế • Xem xét lại thông điệp gửi trực tiếp và gián tiếp: - Fan-out là số lượng thông điệp bởi một phương thức - Fan-out trực tiếp là số lượng thông điệp được gửi đi bởi chính phương thức đó. - Fan-out gián tiếp là số lượng thông điệp được gửi bởi cac phương thức được gọi bởi các phương thức khác trong cây truyền thông điệp. 34
  36. Hoạt động 4: Tối ưu hóa bản thiết kế • Xem xét lại thông điệp gửi trực tiếp và gián tiếp: - Nếu fan-out của một phương thức cao so với các phương thức khác trong hệ thống, phương thức nên được tối ưu hóa bằng cách tạo chỉ mục cho các thuộc tính được sử dụng để gửi các thông điệp đến các đối tượng trong cây thông điệp. 35
  37. Các ràng buộc và đặc tả thông điệp 36
  38. Những loại ràng buộc điều kiện sau phải đúng trước khi phương thức thực hiện điều kiện trước phải đúng sau khi phương thức thực hiện Ràng buộc bất biến phải luôn đúng đối với mọi đối tượng của lớp 37
  39. những biến thiên trên biểu đồ lớp 38
  40. những biến thiên trên biểu đồ lớp 39
  41. Đặc tả thông điệp - Tài liệu mô tả thông điệp được truyền giữa các đối tượng - Đặc tả thông điệp được tạo cho mỗi phương thức được hiển thị công khai trong một lớp - Nó nên chứa đủ thông tin cho lập trình viên hiểu phương thức này phải làm việc gì. 40
  42. Các thành phần có trong bản đặc tả thông điệp: - Tên phương thức - Tên lớp đối tượng - số ID - Danh sách các đối tượng và phương thức gửi thông điệp tới cho phương thức này - Danh sách các ca sử dụng mà ở đó phương thức này được sử sụng để nhận ra sự thực hiện của ca sử dụng. - Mô tả thông điệp: cung cấp thông tin mô tả thông điệp làm gì - Các tham số nhận được: các kiểu dữ liệu của các tham số được truyền qua phương thức. - Kiểu dữ liệu trả lại về cho các các đối tượng và phương thức gửi thông điệp đến cho phương thức. - Điều kiện trước khi thực hiện phương thức - Điều kiện sau khi thực hiện phương thức. 41
  43. Ví dụ bản đặc tả thông điệp của phương thức GetReview(). 42
  44. Đặc tả phương thức là tài liệu bằng văn bản bao gồm các hướng dẫn rõ ràng về cách viết mã để thực hiện phương thức. 43
  45. Đặc tả phương thức ‒ Không có định dạng chung cho bản đực tả phương thức. Một đặc tả phương thức thường bao gồm bốn phần để truyền đạt các thông tin giúp các lập trình viên viết mã thích hợp, đó là phần thông tin chung, các sự kiện, thông điệp truyền và đặc tả thuật toán (như hình ở slide kế tiếp) ‒ Thông tin chung: chứa thông tin chung như tên của phương thức, tên của lớp mà thực hiện phương thức này, mã số ID của phương thức, mã số ID đặc tả thông điệp của phương thức, tên lập trình viên, ngày đến hạn và ngôn ngữ lập trình. ‒ Các sự kiện: dùng để kích hoạt phương thức. Mỗi sự kiện là một điều xảy ra hoặc diễn ra. ‒ Thông điệp truyền: đó là các thông điệp truyền đến phương thức và truyền đi từ phương thức, được xác định dựa trên các biểu đò tuần tự và biểu đồ cộng tác. ‒ Đặc tả thuật toán: trình bày trong các slide tiếp theo. 44
  46. Đặc tả thuật toán  Đặc tả thuật toán có thể được viết bằng ngôn ngữ tiếng Anh có cấu trúc Anh (Structured English), một số dạng mã giả hoặc một số dạng ngôn ngữ chính thức. 46
  47. - Ngôn ngữ tiếng Anh có cấu trúc chỉ đơn giản là một cách chính thức để viết các hướng dẫn mô tả các bước của quy trình. Trên slide mô tả một số cấu trúc câu tiếng Anh được dùng trong đặc tả thuật toán. - Câu lệnh If kiểm soát các hành động được thực hiện dưới các điều kiện khác nhau - Câu lệnh For (hoặc câu lệnh while) thực hiện một số hành động cho đến khi đạt được một số điều kiện. - Câu lệnh Case là sự cải tiến của câu lệnh If khi có nhiều rẽ nhánh. 47
  48.  Pseudocode là một ngôn ngữ chứa các cấu trúc lôgic, bao gồm các câu lệnh tuần tự, các câu lệnh có điều kiện và lặp lại.  Ngôn ngữ mã giả gần giống với ngôn ngữ mã lệnh.  Khi viết mã giả, chú ý đặc biệt đến chi tiết và dễ đọc. 48
  49. Tổng kết Chương 8 trình bày các nội dung sau: - Các đặc điểm của PTTK hướng đối tượng - Các tiêu chuẩn thiết kế - Các hoạt động thiết kế đối tượng - Các ràng buộc và đặc tả thông điệp - Đặc tả phương thức 49