Xem mẫu

  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. 7
  8. 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
  9. Để 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
  10. 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
  11. 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
  12. 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
  13. Ví dụ minh họa luật Demeter 13
  14. Ví dụ minh họa luật Demeter 14
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
nguon tai.lieu . vn