Nguyên lý thiếtkế và
mẫuthiếtkế
Nguyên lý thiếtkế…
2
NguyễnViệtHà
Nội dung
Thiết kế module
Chất lượng thiết kế
Độ đo thiết kế tốt
Khái niệm về mẫu thiết kế
Nguyên lý thiếtkế…
3
NguyễnViệtHà
Tài liệu tham khảo
Bruce Eckel, Thinking in Patterns
Erich Gamma, Design Patterns –
Elements of Reusable Object-Oriented
Software
Nguyờn lý thitk
4
NguynVitH
Thit k module
Dựa trên quan điểm "chia để trị"
C(p1 + p2) > C(p1) + C(p2)
E(p1 + p2) > E(p1) + E(p2)
C: độ phức tạp
E: nỗ lực thực hiện
giảm độ phức tạp
cục bộ, dễ sửa đổi
có khả n
ng phát triển song song
dễ sửa đổi, dễ hiểu nên dễ tái sử dụng
Nguyên lý thiếtkế…
5
NguyễnViệtHà
Số lượng module
CÇn x¸c ®Þnh sè m«®un tèi −u
gi¸
phÇn
mÒm
sè module
sè module
tèi −u
chi phÝ ph¸t triÓn module
chi phÝ
tÝch hîp
Nguyờn lý thitk
6
NguynVitH
Chất lợng = Che giấu thông tin
Sử dụng module thông qua các giao diện
tham số và giá trị trả lại
Không cần biết cách thức cài đặt thực tế
thuật toán
cấu trúc d liệu
giao diện ngoại lai (các mô đun thứ cấp, thiết
bị vào/ra)
tài nguyên hệ thống
Nguyờn lý thitk
7
NguynVitH
Che giấu thụng tin: lý do
Giảm hiệu ứng phụ khi sửa đổi module
Giảm sự tác động của thiết kế tổng thể lên
thiết kế cục bộ
Nhấn mạnh việc trao đổi thông tin thông
qua giao diện
Loại bỏ việc sử dụng d liệu dùng chung
Hớng tới sự đóng gói chức nng - thuộc
tính của thiết kế tốt
Tạo ra các sản phẩm phần mềm tốt hơn
Nguyờn lý thitk
8
NguynVitH
Chất lợng thiết kế
Phụ thuộc bài toán, không có phơng
pháp tổng quát
Một số độ đo
Coupling: mức độ ghép nối gia các module
Cohesion: mức độ liên quan lẫn nhau của các
thành phần bên trong một module
Understandability: tính hiểu đợc
Adaptability: tính thích nghi đợc
Nguyờn lý thitk
9
NguynVitH
Coupling and Cohesion
Coupling (ghép nối)
độ đo sự liên kết (trao đổi d liệu) gia các mô
đun
ghép nối chặt chẽ thỡ khó hiểu, khó sửa đổi (thiết
kết tồi)
Cohesion (kết dính)
độ đo sự phụ thuộc lẫn nhau của các thành phần
trong một module
kết dính cao thỡ tính cục bộ cao (độc lập chức
nng); dễ hiểu, dễ sửa đổi
Nguyên lý thiếtkế…
10
NguyễnViệtHà
Coupling
møc ®é quan hÖ
cña c¸c module
module nªn
ghÐp nèi láng lÎo
cµng láng lÎo
cµng dÔ söa ®æi
thiÕt kÕ
normal coupling loose
and best
data coupling still very good
stamp coupling ok
control coupling ok
common coupling very bad
content coupling tight and worst
Nguyên lý thiếtkế…
11
NguyễnViệtHà
GhÐp nèi néi dung (content coupling)
• C¸c module dïng lÉn dữ liÖu cña nhau
- c¸c ng«n ng
ữ bËc thÊp kh«ng cã biÕn côc bé
- l¹m dông lÖnh Goto
• Lµ tr−êng hîp xÊu nhÊt
Nguyờn lý thitk
12
NguynVitH
Ghép nối chung (common coupling)
Các module trao đổi d liệu thông qua biến tổng thể
Lỗi của module này có thể ảnh hởng đến hoạt động
của module khác
Khó sử dụng lại các module
D liệu
A
B
C
mô đun gây lỗi
mô đun gặp lỗi
Nguyên lý thiếtkế…
13
NguyễnViệtHà
GhÐp nèi ®iÒu khiÓn (control coupling)
• C¸c module trao ®æi th«ng tin ®iÒu khiÓn
• Lµm cho thiÕt kÕ khã hiÓu, khã söa ®æi, dÔ nhÇm
printName
(name, sex)
printRecord
Nguyờn lý thitk
14
NguynVitH
Ghép nối nhãn (stamp coupling)
Các module trao đổi thừa thông tin
Module có thể thực hiện chức n
ng ngoài ý muốn
Làm giảm tính thích nghi
calcAge
(personel record)(age)
Nguyên lý thiếtkế…
15
NguyễnViệtHà
GhÐp nèi dữ liÖu (data coupling)
• TruyÒn dữ liÖu qua tham sè
• NhËn kÕt qu¶ qua tham sè vµ gi¸ trÞ tr¶ l¹i
(date)(day of week)
calcDayOfWeek
Nguyờn lý thitk
16
NguynVitH
Cohesion
mỗi module
chỉ nên thực
hiện một chức
nng
mọi thành
phần nên
tham gia thực
hiện chức
nng đó
functional high and best
sequential ok
communicational still ok
procedural not bad at all
temporal still not bad at all
logical still not bad at all
coincidental lowest and worst by far
Nguyờn lý thitk
17
NguynVitH
Các chủng loại kết dính
Kết dính gom góp (coincidental cohesion)
- các thành phần không liên quan đến nhau
Kết dính lô gic (logical cohesion)
- các thành phần làm chức n
ng lô gic tơng tự
- vd: hàm xử lý lỗi chung
Kết dính thời điểm (temporal cohesion)
- các thành phần hoạt động cùng thời điểm
- vd: hàm khởi tạo (đọc d
liệu, cấp phát bộ nhớ )
Nguyờn lý thitk
18
NguynVitH
Các chủng loại kết dính
Kết dính thủ tục (procedural cohesion)
- các thành phần tạo có một thứ tự xác định
- vd: tính lơng cơ bản, tính phụ cấp, tính bảo hiểm
Kết dính truyền thông (communicational cohesion)
- các thành phần truy cập cùng d
liệu
- vd: thống kê (tính max, min, mean, variation )
Nguyờn lý thitk
19
NguynVitH
Các chủng loại kết dính
Kết dính tuần tự (sequential cohesion)
- output của một thành phần là input của
thành phần tiếp theo
- vd: ảnh mầu -> đen trắng -> ảnh nén
Kết dính chức n
ng (functional cohesion)
- các thành phần cùng góp phần thực hiện
một chức n
ng
- vd: sắp xếp
Nguyên lý thiếtkế…
20
NguyễnViệtHà
Understandability
TÝnh hiÓu ®−îc
GhÐp nèi láng lÎo
KÕt dÝnh cao
Đ−îc lËp tµi liÖu
ThuËt to¸n, cÊu tróc dÔ hiÓu
Nguyên lý thiếtkế…
21
NguyễnViệtHà
ThiÕt kÕ h−íng ®èi t−îng
ThiÕt kÕ h−íng ®èi t−îng h−íng tíi chÊt
l−îng thiÕt kÕ tèt
®ãng gãi, che dÊu th«ng tin
lµ c¸c thùc thÓ ho¹t ®éng ®éc lËp
trao ®æi dữ liÖu qua th«ng ®iÖp
cã kh¶ năng kÕ thõa
côc bé, dÔ hiÓu, dÔ t¸i sö dông
Nguyên lý thiếtkế…
22
NguyễnViệtHà
Adaptability
TÝnh thÝch nghi ®−îc
HiÓu ®−îc
söa ®æi ®−îc, t¸i sö dông được
Tù chøa
kh«ng sö dông th− viÖn ngoµi
m©u thuÉn víi xu h−íng t¸i sö dông
Nguyên lý thiếtkế…
23
NguyễnViệtHà
Adaptability (2)
Các chức năng cần đượcthiếtkế sao cho dễ
dàng mở rộng mà không cầnsửacácmãđãcó
(Open closed principle)
Trừutượng hóa là chìa khóa để giải quyết vấn
đề này
các chứcnăng trừutượng hóa thường bấtbiến
các lớpdẫnxuấtcàiđặtcácgiải pháp cụ thể
sử dụng đa hình
Mẫuthiết kế: là thiếtkế chuẩn cho các bài toán
thường gặp
Nguyên lý thiếtkế…
24
NguyễnViệtHà
Mẫu thiết kế (Design Patterns)
Creational - Thay thế cho khởi tạo tường minh,
ngăn ngừa phụ thuộc môi trường (platform)
Structural - thao tác với các lớp không thay đổi
được, giảm độ ghép nối và cung cấp các giải
pháp thay thế kế thừa
Behavioral - Che dấu cài đặt, che dấu thuật
toán, cho phép thay đổi động cấu hình của đối
tượng
Nguyên lý thiếtkế…
25
NguyễnViệtHà
Abstract Factory
Một chương trình cần có khả năng chọn một
trong một vài họ các lớp đối tượng
Ví dụ, giao diện đồ họa nên chạy được trên một
vài môi trường
Mỗi môi trường (platform) cung cấp một tập các
lớp đồ họa riêng:
WinButton, WinScrollBar, WinWindow
MotifButton, MotifScrollBar, MotifWindow
pmButton, pmScrollBar, pmWindow