Thông tin tài liệu
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 thiểu khả năng truy nhập
tới lớp và các thành viên
Nguyên lý thiết kế 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 đối tượ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 đối tượng đó ra khỏi cài đặt của nó.
Nguyên lý thiết kế 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 đối tượ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 đối tượ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ết kế 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ết kế 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ết kế 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ết kế 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ết kế 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ết kế 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 đối tượng có thành phần là các đối tượ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 đối tượng thành phần
Composition có thể là chứa
Tham chiếu
Giá trị
C++ cho 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.
[...]... 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ên lý thiết kế hướng đối tượng 23 Ví dụ 1 - Composition Bob Tarr Nguyên lý thiết kế hướng đối tượng 24 Ví dụ 2 Inheritance/Composition Bob Tarr Nguyên lý thiết kế hướng đối tượng 25 Ví dụ 1 "Là một loại đặc biệt", không phải "là một vai trò",... thiết kế hướng đối tượ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 đối tượng hơn Các giao diện phải được định nghĩa cẩn thận để sử dụng nhiều đối tượng khác nhau trong vai trò các khối cấu thành Bob Tarr Nguyên lý thiết kế hướng đối tượ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ết kế hướng đối tượng 30 Interface Một interface của một đối tượng là một tập các phương thức của đối tượng đó mà các đối tượng khác biết rằng chúng có thể kích hoạt Một đối tượng có thể có nhiều interface Các đối tượ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 đối tượ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ết kế hướng đối tượng 35 Nguyên tắc M - óng (OCP) Phát biểu: ta nên cố gắng thiết kế 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 đối tượng thuộc các lớp khác nhau có thể thuộc cùng một kiểu, và một đối tượ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ết kế hướng đối tượ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 đối tượng mà mình đang dùng Có thể dễ dàng thay thế đối tượng này vào chỗ của đối tượng khác... Đúng Một đối tượ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ên lý thiết kế hướng đối tượng 26 Ví dụ 3 Bob Tarr Nguyên lý thiết kế hướng đối tượ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ên lý thiết kế hướng đối tượng 21 Ví dụ 1 Bob Tarr Nguyên lý thiết kế hướng đối tượ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ên lý thiết kế hướng đối tượ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 Đối tượng Set nằm trong lớp có thể là một đối tượ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 đối tượng Set bất kì Ví... các đối tượng thành phần qua giao diện của các đối tượng đó Tái sử dụng kiểu "hộp đen", do chi tiết cài đặt của các đối tượ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 đối tượng nhận tham chiếu tới các đối tượng khác Bob Tarr Nguyên lý thiết. .. hệ giữa các đối tượ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 đối tượ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ết kế Bob Tarr Nguyên lý thiết kế hướng đối tượ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
Ngày đăng: 18/02/2014, 23:20
Xem thêm: Tài liệu NGUYÊN LÝ THIẾT KẾ HƯỚNG ĐÔI TƯỢNG - LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG doc, Tài liệu NGUYÊN LÝ THIẾT KẾ HƯỚNG ĐÔI TƯỢNG - LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG doc, Ví dụ 2. Inheritance/Composition