HFOOAD Chapter 1

Download Report

Transcript HFOOAD Chapter 1

HFOOAD Chapter 5 Interlude
OO Catastrophe!
2
Cấu trúc code này có vai trò
kép: định nghĩa hành vi áp
dụng cho nhiều kiểu, và là đối
tượng quan tâm cho các lớp
sử dụng các kiểu đó (thay vì
phải quan tâm đến từng kiểu
kia)
3
Two possible answers
Interface
‣ Defines behavior
‣
Contract
‣ Cannot be instantiated
‣ A class can implement multiple interfaces
‣
In languages that support interfaces
Abstract class
‣ Defines behavior
‣ Can have implementation code
‣ Cannot be instantiated
‣ A class can inherit from a single abstract class
‣
Unless the language supports multiple inheritance
4
Làm thế nào biết được
khi nào nên dùng
interface và khi nào nên
dùng abstract class?
Nếu (gần như) tất cả các lớp có
hành vi đó đều cài nó bằng phần
code giống nhau,
thì ta có thể dùng abstract class
để cài hành vi đó.
Avoid repeating code
with abstract classes
Program to interfaces
5
Coding to the interface,
not the implementation.
6
7
Nó ngăn chặn được nhiều vấn
đề về bảo trì hơn bất kì nguyên
tắc OO nào khác trong lịch sử,
bằng cách địa phương hóa các
thay đổi phải thực hiện khi hành
vi của một đối tượng thay đổi.
8
ENCAPSULATION
Tôi tưởng đóng gói chẳng
qua là che dấu chi tiết cài
đặt?
9
Solution 1
10
Solution 2
11
12
13
Nên cố đảm bảo rằng mỗi lớp chỉ
có đúng một lí do cho việc làm
này.
Nó là cái chết của nhiều phần
mềm thiết kế tồi.
14
15
16
Manage change
Manage change
Manage change
…
17
Final Catastrophe challenge
18
Our solution
19
Our solution
20
21