Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 55 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
55
Dung lượng
419,5 KB
Nội dung
Nguyênlýthiếtkế
hướng đối tượng
Lập trìnhhướngđối tượng
Nguyên lýthiếtkếhướng
đối tượng 2
Bob Tarr
Nguyên tắc số 1
Giảm thiểu khả năng truy nhập
tới lớp và các thành viên
Nguyên lýthiếtkếhướng
đối tượng 3
Bob Tarr
"Trừu tượng hóa" nghĩa là gì?
Tony Hoare: “trừu tượng hóa xuất phát từ một cách nhìn nhận
những đặc điểm tương đồng giữa một số đối tượng, tình thế, hoặc
quy trình nhất định trong thế giới thực, và quyết định tập trung vào
những điểm tương đồng này và nhất thời lờ đi các điểm khác biệt.”
Grady Booch: “Một trừu tượng hóa kí hiệu các đặc điểm cốt lõi của
một đốitượng mà các đặc điểm này phân biệt nó với tất cả các loại
đối tượng khác, cho ta các ranh giới được xác định rõ ràng. Tất cả
được xét một cách tươngđối trong góc nhìn của người quan sát.”
Trừu tượng hóa là một trong những phương pháp nền tảng để đối
phó với sự phức tạp
Một trừu tượng hóa tập trung vào hình ảnh bên ngoài của một đối
tượng và tách hành vi của đốitượng đó ra khỏi cài đặt của nó.
Nguyên lýthiếtkếhướng
đối tượng 4
Bob Tarr
Đóng gói - encapsulation
Grady Booch: "Đóng gói là để chia tách giữa giao diện
cam kết của một trừu tượng hóa và cài đặt của nó.
Craig Larman: "Đóng gói là một cơ chế được dùng để
che dữ liệu, cấu trúc bên trong, và chi tiết cài đặt của
một đối tượng. Mọi tương tác với đốitượng được thực
hiện qua một giao diện công khai của các thao tác"
Các lớp đốitượng không nên để mở các chi tiết cài đặt
nội bộ của mình
Nguyên lýthiếtkếhướng
đối tượng 5
Bob Tarr
Che dấu thông tin ở Java
Sử dụng các thành viên private và các hàm đọc (get) và ghi (set)
mỗi khi có thể.
Ví dụ:
Thay thế
public double speed;
bằng
private double speed;
public double getSpeed() {
return speed;
}
public double setSpeed(double newSpeed) {
speed = …
}
Nguyên lýthiếtkếhướng
đối tượng 6
Bob Tarr
Che dấu thông tin ở Java
Ta có thể quy định các ràng buộc về giá trị
public void setSpeed(double newSpeed) {
if (newSpeed < 0) {
sendErrorMessage( );
newSpeed = Math.abs(newSpeed);
}
speed = newSpeed;
}
Nếu các client được truy cập trực tiếp đến thành viên dữ liệu thì
từng client phải chịu trách nhiệm kiểm tra ràng buộc
Nguyên lýthiếtkếhướng
đối tượng 7
Bob Tarr
Che dấu thông tin ở Java
Ta có thể thay đổi biểu diễn dữ liệu bên trong lớp đối
tượng mà không phải sửa giao diện
// Now using metric units (kph, not mph)
public void setSpeedInMPH(double newSpeed) {
speedInKPH = convert(newSpeed);
}
public void setSpeedInKPH(double newSpeed) {
speedInKPH = newSpeed;
}
Nguyên lýthiếtkếhướng
đối tượng 8
Bob Tarr
Che dấu thông tin ở Java
Ta có thể thực hiện các hiệu ứng phụ tùy ý
public void setSpeed(double newSpeed) {
speed = newSpeed;
notifyObservers();
}
Nếu các client của một lớp truy nhập trực tiếp
dữ liệu của mình, mỗi client sẽ phải chịu trách
nhiệm chạy hiệu ứng phụ
Nguyên lýthiếtkếhướng
đối tượng 9
Bob Tarr
Nguyên tắc số 2
Ưu tiên sử dụng Composition hơn
Inheritance
Nguyên lýthiếtkếhướng
đối tượng 10
Bob Tarr
Composition
Phương pháp tái sử dụng mà trong đó chức năng mới được xây
dựng bằng cách tạo một đốitượng có thành phần là các đốitượng
khác
Chức năng mới được tạo bằng cách sử dụng chức năng của một
trong các đốitượng thành phần
Composition có thể là chứa
Tham chiếu
Giá trị
C++ cho phép chứa giá trị đốitượng hoặc chứa tham chiếu đối
tượng
Java chỉ cho phép chứa tham chiếu đối tượng.
[...]... Trong ngữ cảnh bài toán, chuyên biệt hóa một vai trò, giao tác, hoặc thiết bị Sai Một Person không phải là một vai trò, giao tác, hay thiết bị Bob Tarr Nguyênlýthiếtkếhướngđốitượng 23 Ví dụ 1 - Composition Bob Tarr Nguyênlýthiếtkếhướngđốitượng 24 Ví dụ 2 Inheritance/Composition Bob Tarr Nguyên lýthiếtkế hướng đốitượng 25 Ví dụ 1 "Là một loại đặc biệt", không phải "là một vai trò",... thiếtkếhướngđốitượng 11 Ưu/nhược điểm của Composition Nhược điểm Kết quả là hệ thống có xu hướng chứa nhiều đốitượng hơn Các giao diện phải được định nghĩa cẩn thận để sử dụng nhiều đốitượng khác nhau trong vai trò các khối cấu thành Bob Tarr Nguyên lýthiếtkế hướng đốitượng 12 Thừa kế Phương pháp tái sử dụng mà trong đó chức năng mới được xây dựng bằng cách mở rộng cài đặt của một đối. .. một cài đặt Bob Tarr Nguyên lýthiếtkế hướng đốitượng 30 Interface Một interface của một đốitượng là một tập các phương thức của đốitượng đó mà các đốitượng khác biết rằng chúng có thể kích hoạt Một đốitượng có thể có nhiều interface Các đốitượng chỉ biết về nhau qua interface về bản chất, mỗi interface là một tập con của tập tất cả các phương thức mà một đốitượng có cài Một kiểu... Nguyên tắc M - óng: Các thực thể phần mềm nên mở đối với việc mở rộng, nhưng đóng đối với việc sửa đổi Bob Tarr Nguyên lýthiếtkế hướng đốitượng 35 Nguyên tắc M - óng (OCP) Phát biểu: ta nên cố gắng thiếtkế các m - un mà không bao giờ cần sửa Để mở rộng hành vi của hệ thống, ta bổ sung các đoạn trình mới, ta không sửa mã cũ Các m - un thỏa mãn OCP cần đạt được 2 tiêu chí: Mở đối với mở rộng:... thể Các đốitượng thuộc các lớp khác nhau có thể thuộc cùng một kiểu, và một đốitượng có thể có nhiều kiểu khác nhau Interface là chìa khóa cho khả năng ghép nối (plugability)! Bob Tarr Nguyên lýthiếtkế hướng đốitượng 31 Ưu/nhược điểm của interface Ưu điểm: Client không biết về lớp cụ thể của đốitượng mà mình đang dùng Có thể dễ dàng thay thế đốitượng này vào chỗ của đốitượng khác... Đúng Một đốitượng passenger sẽ luôn là passenger, agent cũng vậy Mở rộng chứ không định nghĩa lại hoặc xóa bỏ Đúng Passenger và Agent là các dạng đặc biệt của PersonRole Đúng Trong ngữ cảnh bài toán, chuyên biệt hóa một vai trò, giao tác, hoặc thiết bị Đúng Mỗi PersonRole là một vai trò Bob Tarr Nguyênlýthiếtkếhướngđốitượng 26 Ví dụ 3 Bob Tarr Nguyênlýthiếtkếhướngđốitượng 27 Ví... xóa bỏ, các trách nhiệm của lớp cha Lớp con không mở rộng khả năng của một lớp chỉ là lớp tiện ích Đối với một lớp trong ngữ cảnh thực của bài toán, lớp con chuyên biệt hóa một vai trò, giao tác, hoặc thiết bị Bob Tarr Nguyênlýthiếtkếhướngđốitượng 21 Ví dụ 1 Bob Tarr Nguyênlýthiếtkếhướngđốitượng 22 Ví dụ 1 "Là một loại đặc biệt" chứ không phải "là một vai trò" của lớp cha Không biến... s.toString(); } Bob Tarr Nguyênlýthiếtkếhướngđốitượng 19 Ví dụ Inheritance & Compostion Một vài điểm cần lưu ý về InstrumentedSet : Lớp này là một Set Có một constructor có tham số là một Set Đốitượng Set nằm trong lớp có thể là một đốitượng thuộc bất cứ lớp nào cài đặt interface Set (có thể không phải HashSet) Lớp này rất linh động và có thể bọc ra ngoài một đốitượng Set bất kì Ví... các đốitượng thành phần qua giao diện của các đốitượng đó Tái sử dụng kiểu "hộp đen", do chi tiết cài đặt của các đốitượng thành phần không lộ ra ngoài Tính đóng gói cao Ít phụ thuộc về cài đặt hơn Mỗi lớp chỉ chú trọng vào một tác vụ Quan hệ composition có thể được xác định một cách động trong thời gian chạy qua việc đốitượng nhận tham chiếu tới các đốitượng khác Bob Tarr Nguyênlý thiết. .. hệ giữa các đốitượng không cần phải được mã cứng cho một lớp cụ thể, từ đó tăng tính linh hoạt Giảm phụ thuộc lẫn nhau (coupling) giữa các thành phần hệ thống Tăng khả năng tái sử dụng Tăng cơ hội sử dụng composition do các đốitượng thành phần có thể thuộc bất cứ lớp nào cài đặt một interface cụ thể Nhược điểm Làm tăng nhẹ độ phức tạp của thiếtkế Bob Tarr Nguyênlýthiếtkếhướngđốitượng 32 Ví . Nguyên lý thiết kế
hướng đối tượng
Lập trình hướng đối tượng
Nguyên lý thiết kế hướng
đối tượng 2
Bob Tarr
Nguyên tắc số 1
Giảm. phép chứa giá trị đối tượng hoặc chứa tham chiếu đối
tượng
Java chỉ cho phép chứa tham chiếu đối tượng.
Nguyên lý thiết kế hướng
đối tượng 11
Bob Tarr
Ưu/nhược