1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Chương 8: Thiết kế lớp và phương thức

51 32 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 4,42 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Chương 8: Thiết kế lớp và phương thức giúp người học 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; chỉ định, tái cấu trúc và tối ưu hóa thiết kế đối tượng; 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; chỉ định các ràng buộc và hợp đồng; tạo ra một đặc tả phương pháp.

Trang 1

Chương 8: Thiết kế lớp và phương thức

Trang 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

Trang 3

Các đặc điểm cơ bản của hướng đối tượng

Trang 4

Các phần tử của phân tích hướng đối tượng:

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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

Trang 13

Ví dụ minh họa luật Demeter

Trang 14

Ví dụ minh họa luật Demeter

Trang 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"

Trang 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

Trang 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

Trang 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

Trang 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

Trang 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)

Trang 21

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

Trang 22

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?

Trang 23

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à

Trang 24

biên lớp

- Tối đa hóa cộng sinh bên trong mọi biên

đóng gói

Trang 25

Các kiểu cộng sinh giữa các môđun

Trang 26

CÁC HOẠT ĐỘNG THIẾT KẾ ĐỐI TƯỢNG

Trang 27

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)

Trang 28

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

Trang 29

- 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)?

Trang 30

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

Trang 31

• 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ể

Trang 32

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

Trang 33

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

Trang 34

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)

Trang 35

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

Trang 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:

- 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

Trang 37

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

Trang 38

Các ràng buộc và đặc tả thông điệp

Trang 39

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

Trang 40

những biến thiên trên biểu đồ lớp

Trang 41

những biến thiên trên biểu đồ lớp

Trang 42

Đặ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ì

Trang 43

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

Ngày đăng: 07/05/2021, 13:55

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w