Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 8: Các mẫu thiết kế che giấu hành vi, thuật giải trong đối tượng (Behavioral Patterns)

Chương 8  
Các mẫu thiết kế che dấu hành vi, thuật giải  
trong ₫ối tượng (Behavioral Patterns)  
8.1 Tổng quát về nhóm mẫu “Behavioral Patterns”  
8.2 Mẫu Chain of Responsibility  
8.3 Mẫu Template Method  
8.4 Mẫu Strategy  
8.5 Mẫu State  
8.6 Mẫu Command  
8.7 Mẫu Observer  
8.8 Kết chương  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 1  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.1 Tổng quát về nhóm mẫu “Behavioral Patterns”  
Trong ₫oạn code giải quyết vấn ₫ề của ứng dụng, khi cần phải  
chọn lựa 1 trong nhiều thuật giải/hành vi khác nhau thì ta thường  
dùng phát biểu if/switch như sau :  
switch (acode) {  
case ALG1 : //₫oạn code miêu tả thuật giải/hành vi 1  
case ALG2 : //₫oạn code miêu tả thuật giải/hành vi 2  
…
case ALGn : //₫oạn code miêu tả thuật giải/hành vi n  
}
Đoạn code trên có nhiều khuyết ₫iểm như : phu thuộc hoàn toàn  
vào số lượng thuậthể của từng thuật  
giải/hành vi, phải hiệu chỉnh khi số lượng/chi tiết của thuật  
giải/hành vi bị thay ₫ổi.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 2  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.1 Tổng quát về nhóm mẫu “Behavioral Patterns”  
Để khắc phục các nhược ₫iểm của cách lập trình cổ ₫iển trong  
slide trước, cách tốt nhất là dùng 1 trong các mẫu thuộc nhóm  
“Behavioral Patterns”.  
Nhiệm vụ của các mẫu thuộc nhóm “” là che dấu các ₫oạn code  
miêu tả thuật giải/hành vi vào trong các ₫ối tượng, code của client  
chỉ giữ tham khảo ₫ến ₫ối tượng và gởi thông ₫iệp nhờ ₫ối tượng  
thực hiện thuật giả.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 3  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.2 Mẫu Chain of Responsibility  
Mục tiêu :  
. Mẫu dây chuyền trách nhiệm (Chain of Responsibility) giúp  
tránh ₫ược việc gắn kết cứng giữa phần tử gởi request (Client)  
với phần tử nhận và xử lý request (Server) bằng cách cho phép  
hơn 1 ₫ối tượng có cơ hội xử lý request ₫ó. Các ₫ối tượng nhận  
và xử lý request sẽ ₫ược liên kết lại thành 1 dây chuyền, Client  
sẽ tham khảo ₫ến ₫ầu dây chuyền này ₫ể gởi request khi có  
yêu cầu.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 4  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.2 Mẫu Chain of Responsibility  
Thí dụ về việc dùng mẫu Chain of Responsibility :  
. Trong ứng dụng có trợ giúp theo ngữ cảnh thì user có thể xem  
thông tin trợ giúp của 1 phần tử giao diện nào ₫ó trực tiếp từ phần tử  
₫ó bằng cách ấn phải chuột vào nó. Lưu ý là các ₫ối tượng giao  
diện thường ₫ược tổ chức theo dạng cây thứ bậc : 1 chương trình có  
nhiều cửa sổ giao diện, mỗi cửa sổ giao diện chứa nhiều ₫ối tượng  
giao diện, mỗi ₫ối tượng giao diện có thể là group chứa nhiều ₫ối  
tượng giao diện con… Tóm lại số lượng các ₫ối tượng giao diện ₫ơn  
(không chứa ₫ối tượng khác nữa) của chương trình thường rất lớn,  
chi phí hiện thực tất cả sự trợ giúp cho tất cả các ₫ối tượng ₫ơn này  
sẽ rất lớn, do ₫ó thường sẽ ₫ược hiện thực từ từ thông qua nhiều  
yêu cầu trợ giúp theo ngữ cảnh trên mọi ₫ối tượng giao diện.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 5  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.2 Mẫu Chain of Responsibility  
Cách tốt nhất ₫ể giải  
quyết vần ₫ề trên là  
dùng mẫu Chain of  
Responsibility với lược  
₫ồ class như sau :  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Khoa Khoa học & Kỹ thuật Máy tính  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 6  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.2 Mẫu Chain of Responsibility  
Lược ₫ồ ₫ối tượng liên quan ₫ến 1 button nào ₫ó có dạng như sau :  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 7  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.2 Mẫu Chain of Responsibility  
Theo lược ₫ồ ₫ối tượng của Button như trên thì khi user ấn phải chuột  
vào button ₫ể xem trợ giúp về button ₫ó thì :  
. Hoặc là hàm xử lý HandleHelp() của chính button ₫ó chạy (nếu có  
hiện thực) ₫ể hiển thị nội dung trợ giúp chính xác về button ₫ó.  
. Hoặc là hàm xử lý HandleHelp() của ₫ối tượng chứa button sẽ chạy  
(GroupBox - nếu có hiện thực) ₫ể hiển thị nội dung trợ giúp về phần  
tử GroupBox ₫ó, nhông tin trợ giúp của  
button.  
. Tương tự, nếu GroupBox không hiện thực hàm xử lý HandleHelp()  
hiện thực hàm xử lý HandleHelp() thì cuối cùng hàm xử lý  
HandleHelp() của g trường hợp này user  
sẽ xem ₫ược nội dung trợ giúp của toàn phần mềm, trong ₫ó có  
thông tin sử dụng button mà họ cần.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 8  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.2 Mẫu Chain of Responsibility  
Ta có thể xây dựng  
mẫu Chain of  
Responsibility theo loại  
object pattern với lược  
₫ồ class như sau :  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Khoa Khoa học & Kỹ thuật Máy tính  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 9  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.2 Mẫu Chain of Responsibility  
Các phần tử tham gia :  
. IService (IHelpHandler) : ₫ịnh nghĩa interface của tác vụ xử lý  
request.  
. AbstractService (Widget) : ₫ặc tả các thành phần dùng chung cho tất  
cả ₫ối tượng xử lý request, thí dụ thuộc tính tham khảo ₫ến ₫ối tượng  
₫i sau mình trong dây chuyền xử lý, hiện thực tác vụ request() với  
nhiệm vụ cơ bản nhượng mà mình tham  
khảo trực tiếp.  
. ConcreteService1… (Button…) : hiện thực tác vụ request() theo yêu  
cầu riêng của mình theo ý tưởng chung như sau : nếu có thể xử lý  
₫ược request, nó sẽ xử lý, nếu không thì gởi tiếp request cho ₫ối  
tượng ₫i sau giải qu
. Client : chứa tham khảo ₫ến ₫ối tượng ₫ầu tiên trong dây chuyền ₫ể  
mỗi lần cần thực hiện request, nó sẽ gởi thông ₫iệp tới ₫ối tượng này.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 10  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Mục tiêu :  
. Định nghĩa giải thuật tổng quát ₫ể giải quyết vấn ₫ề nào ₫ó  
trong một tác vụ, trong giải thuật tổng quát này có gọi 1 số tác  
vụ chức năng cơ bản nào ₫ó ₫ể thực hiện công việc theo yêu  
cầu của giải thuật tổng quát, tuy nhiên các tác vụ cơ bản ₫ược  
gọi sẽ ₫ược hiện thực sau trong các class con, chứ class hiện  
hành cũng chưa biết chúng sẽ làm gì cụ thể.  
. Như chúng ta ₫ã trình bày nhiều lần trong tài liệu này, một trong  
các mục tiêu chính của việc viết chương trình là phải viết ₫ược  
₫oạn code giải quyết ₫úng chức năng và có tính tổng quát hóa  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 11  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Thí dụ về việc dùng mẫu Template Method :  
. Giả sử ta muốn viết chương trình quản lý hệ thống file  
(FileManagerApp) cho phép user thực thực hiện 1 số tác vụ xử lý  
hệ thống file như xóa file ₫ệ qui từ 1 thư mục xác ₫ịnh; ₫ếm số  
lượng file con, cháu, chắt…của 1 thư mục; tìm và diệt virus tất cả  
các file từ thư mục xác ₫ịnh…  
. Phân tích các chức năng của chương trình xử lý hệ thống file ta  
phát hiện 1 số ý tưởng sau :  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 12  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Thí dụ về việc dùng mẫu Template Method :  
. Mỗi chức năng cần 1 form giao diện với user, nhưng may mắn là  
các form giao diện phục vụ các chức năng ₫ều khá giống nhau về  
số lượng và tính chất các phần tử giao diện. Cụ thể mỗi form cần  
chứa các ₫ối tượng giao diện như : Button ₫ể giúp user duyệt chọn  
thư mục xuất phát, TextBox ₫ể hiển thị ₫ường dẫn thư mục xuất  
phát, TextBox ₫ể giúp user ₫ặc tả pattern về các phần tử cần xử lý  
(*, *.exe,…), Button ₫ể user kích hoạt việc thực hiện chức năng,  
ListBox ₫ể hiển thị thông tin về kết quả xử lý…  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 13  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Thí dụ về việc dùng mẫu Template Method :  
mục chỉ ₫ịnh bởi user, ₫ể lần lượt gặp từng file rồi thực hiện hoạt  
₫ộng xử lý xác ₫ịnh trên file ₫ó.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 14  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Cách tốt nhất ₫ể  
xây dựng chương  
trình trên là dùng  
mẫu Template  
Method với lược ₫ồ  
class như sau :  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 15  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Class FileCommandDlg ₫ặc tả form giao diện tổng quát cho mọi chức  
năng, nó có 4 tác vụ miêu tả các giải thuật tổng quát ₫ược dùng chung  
cho mọi class con, ta gọi các tác vụ này là “template method” :  
. FileCommandDlg() chứa giải thuật tạo form, tạo các ₫ối tượng con  
trong form và thêm chúng vào form ở vị trí và kích thước mong  
muốn. Lệnh cuối cùng của giải thuật tạo form tổng quát này sẽ gọi  
hàm initForm() ₫ể ăn bản ₫ược hiển thị  
kèm theo từng phần tử giao diện sao cho phù hợp với chức năng  
₫ặc thù.  
. Lưu ý là trong các môi trường lập trình trực quan như Visual Studio  
.Net, người lập trình sẽ dùng tiện ích thiết kế trực quan form giao  
diện cho dễ dàng, nhanh chóng, chính xác. Máy sẽ tự ₫ộng sinh  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 16  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
. btnBrowse_Click() là hàm xử lý sự kiện Click chuột trên button  
Browse của user, nó có nhiệm vụ chung là hiển thị cửa sổ duyệt  
chọn thư mục xuất phát.  
. btnStart_Click() là hàm xử lý sự kiện Click chuột trên button Start  
của user, nó có nhiệm vụ chung là thực hiện chức năng trên thư  
mục xuất phát. Giải thuật của tác vụ này gồm 3 bước công việc :  
prolog() browseT
. browseTree() chứa giải thuật duyệt từng file 1 cách ₫ệ qui, xuất  
phát từ thư mục xuất phát do user chỉ ₫ịnh, mỗi lần gặp 1 file thì sẽ  
gọi tác vụ action() thực hiện hành vi nào ₫ó lên file.  
₫ó. Ta gọi các tác vụ này là “primitive function”.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 17  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Ta có thể xây dựng mẫu  
Template Method theo  
loại class pattern với  
lược ₫ồ class như sau  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 18  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Các phần tử tham gia :  
. ITemplate (Form) : ₫ịnh nghĩa interface thống nhất của các class  
chức năng cần dùng, interface này thường chứa nhiều tác vụ chức  
năng có tính chất chung như sau : ₫ể thực hiện chức năng ta sẽ  
dùng giải thuật tổng quát. Như vậy các tác vụ chức năng trong  
interface thường là các “template method”.  
. AbstractClass (FileCommandDlg) : ₫ặc tả class cha dùng chung,  
class này chứa các tác vụ “template method”, mỗi tác vụ “template  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 19  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
8.3 Mẫu Template Method  
Các phần tử tham gia (tt) :  
. ConcreteClass1… (RecursiveFilesDelDlg…) : các class con, mỗi  
class chịu trách nhiệm override các hàm “primitive function” theo  
yêu cầu xử lý ₫ặc thù của mình. Các class con này không cần và  
không ₫ược phép override các tác vụ “template method” ₫ã ₫ược  
₫ặc tả 1 lần ở class cha.  
. Client (FileManagerApp) : miêu tả ₫oạn code của client sử dụng  
các chức năng khác nhau.  
Môn : Phân tích & thiết kế phần mềm hướng ₫ối tượng  
Chương 7 : Các mẫu thiết kế che dấu hành vi, thuật giải trong ₫ối tượng  
Slide 20  
Khoa Khoa học & Kỹ thuật Máy tính  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Tải về để xem bản đầy đủ
pdf 43 trang yennguyen 15040 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Các mẫu thiết kế hướng đối tượng - Chương 8: Các mẫu thiết kế che giấu hành vi, thuật giải trong đối tượng (Behavioral Patterns)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_cac_mau_thiet_ke_huong_doi_tuong_chuong_8_cac_mau.pdf