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 dấu hành vi, thuật giải trong đối tượng cung cấp cho người học các kiến thức: Mẫu Chain of Responsibility, mẫu Template Method, mẫu Strategy,... Mời các bạn cùng tham khảo.
Chương Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng (Behavioral Patterns) 8.1 Tổng quát 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 Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 8.1 Tổng quát nhóm mẫu “Behavioral Patterns” Trong ₫oạn code giải vấn ₫ề ứng dụng, cần phải chọn lựa nhiều thuật giải/hành vi khác ta thường dùng phát biểu if/switch sau : switch (acode) { case ALG1 : //₫oạn code miêu tả thuật giải/hành vi case ALG2 : //₫oạn code miêu tả thuật giải/hành vi … case ALGn : //₫oạn code miêu tả thuật giải/hành vi n } Đoạn code có nhiều khuyết ₫iểm : phu thuộc hồn tồn vào số lượng thuật giải/hành vi, vào chi tiết cụ thể thuật giải/hành vi, phải hiệu chỉnh số lượng/chi tiết thuật giải/hành vi bị thay ₫ổi Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 8.1 Tổng quát nhóm mẫu “Behavioral Patterns” Để khắc phục nhược ₫iểm cách lập trình cổ ₫iển slide trước, cách tốt dùng mẫu thuộc nhóm “Behavioral Patterns” Nhiệm vụ mẫu thuộc nhóm “” che dấu ₫oạn code miêu tả thuật giải/hành vi vào ₫ối tượng, code client giữ tham khảo ₫ến ₫ối tượng gởi thông ₫iệp nhờ ₫ối tượng thực thuật giải/hành vi cụ thể cần thiết Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 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 phần tử gởi request (Client) với phần tử nhận xử lý request (Server) cách cho phép ₫ối tượng có hội xử lý request ₫ó Các ₫ối tượng nhận xử lý request ₫ược liên kết lại thành dây chuyền, Client tham khảo ₫ến ₫ầu dây chuyền ₫ể gởi request có yêu cầu Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 8.2 Mẫu Chain of Responsibility Thí dụ việc dùng mẫu Chain of Responsibility : Trong ứng dụng có trợ giúp theo ngữ cảnh user xem thơng tin trợ giúp phần tử giao diện ₫ó trực tiếp từ phần tử ₫ó cách ấn phải chuột vào Lưu ý ₫ối tượng giao diện thường ₫ược tổ chức theo dạng thứ bậc : chương trình có nhiều cửa sổ giao diện, cửa sổ giao diện chứa nhiều ₫ối tượng giao diện, ₫ối tượng giao diện group chứa nhiều ₫ối tượng giao diện con… Tóm lại số lượng ₫ối tượng giao diện ₫ơn (không chứa ₫ối tượng khác nữa) chương trình thường lớn, chi phí thực tất trợ giúp cho tất ₫ối tượng ₫ơn lớn, ₫ó thường ₫ược thực từ từ thông qua nhiều version ₫ạt ₫ược hoàn chỉnh Tuy nhiên, góc nhìn user, version ₫ầu tiên, chương trình phải ₫áp ứng tốt yêu cầu trợ giúp theo ngữ cảnh ₫ối tượng giao diện Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 8.2 Mẫu Chain of Responsibility Cách tốt ₫ể giải vần ₫ề dùng mẫu Chain of Responsibility với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 8.2 Mẫu Chain of Responsibility Lược ₫ồ ₫ối tượng liên quan ₫ến button ₫ó có dạng sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 8.2 Mẫu Chain of Responsibility Theo lược ₫ồ ₫ối tượng Button user ấn phải chuột vào button ₫ể xem trợ giúp button ₫ó : Hoặc hàm xử lý HandleHelp() button ₫ó chạy (nếu có thực) ₫ể hiển thị nội dung trợ giúp xác button ₫ó Hoặc hàm xử lý HandleHelp() ₫ối tượng chứa button chạy (GroupBox - có thực) ₫ể hiển thị nội dung trợ giúp phần tử GroupBox ₫ó, nội dung thường chứa thông tin trợ giúp button Tương tự, GroupBox không thực hàm xử lý HandleHelp() hàm HandleHelp() Form chạy, Form không thực hàm xử lý HandleHelp() cuối hàm xử lý HandleHelp() chương trình chạy Trong trường hợp user xem ₫ược nội dung trợ giúp tồn phần mềm, ₫ó có thơng tin sử dụng button mà họ cần Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 8.2 Mẫu Chain of Responsibility Ta xây dựng mẫu Chain of Responsibility theo loại object pattern với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide https://fb.com/tailieudientucntt 8.2 Mẫu Chain of Responsibility Các phần tử tham gia : IService (IHelpHandler) : ₫ịnh nghĩa interface tác vụ xử lý request AbstractService (Widget) : ₫ặc tả thành phần dùng chung cho tất ₫ối tượng xử lý request, thí dụ thuộc tính tham khảo ₫ến ₫ối tượng ₫i sau dây chuyền xử lý, thực tác vụ request() với nhiệm vụ gọi tác vụ ₫ối tượng mà tham khảo trực tiếp ConcreteService1… (Button…) : thực tác vụ request() theo yêu cầu riêng theo ý tưởng chung sau : xử lý ₫ược request, xử lý, khơng gởi tiếp request cho ₫ối tượng ₫i sau giải Client : chứa tham khảo ₫ến ₫ối tượng ₫ầu tiên dây chuyền ₫ể lần cần thực request, gởi thơng ₫iệp tới ₫ối tượng Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 10 https://fb.com/tailieudientucntt 8.5 Mẫu State Ta xây dựng mẫu State theo loại object pattern với lược ₫ồ class sau : state Context IState Request() Handle() state->Handle(); ConcreteStateA Handle() Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com ConcreteStateB Handle() ConcreteStateC Handle() Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 29 https://fb.com/tailieudientucntt 8.5 Mẫu State Các phần tử tham gia : Context (TCPConnection) : ₫ịnh nghĩa interface cần dùng cho client Duy trì tham khảo ₫ến ₫ối tượng class ConcreteState mà ₫ịnh nghĩa trạng thái hành IState (ITCPState) : ₫ịnh nghĩa interface nhằm bao ₫óng hành vi kết hợp với trạng thái cụ thể Duy trì tham khảo ₫ến ₫ối tượng class ConcreteState mà ₫ịnh nghĩa trạng thái hành ConcreteState (TCPEstablished, TCPListen, TCPClose) : ₫ịnh nghĩa che dấu hành vi cụ thể kết hợp với trạng thái Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 30 https://fb.com/tailieudientucntt 8.6 Mẫu Command Mục tiêu : Đóng gói ₫oạn code phục vụ yêu cầu xác ₫ịnh Client ₫ối tượng, nhờ ₫ó thơng số hóa ₫oạn code nhận thực thao tác request xếp, ghi logfile, undo,… Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 31 https://fb.com/tailieudientucntt 8.6 Mẫu Command Thí dụ việc dùng mẫu Command : Chương trình có giao diện ₫ồ họa trực quan thường dùng nhiều cửa sổ giao diện, cửa sổ thường có menubar chứa nhiều menu dạng pop-up, menu pop-up chứa nhiều mục chức năng, mục chức menu pop-up con… Cuối mục chức ₫ược dùng ₫ể kích hoạt chức tương ứng Yêu cầu phổ biến menubar cửa sổ chức ₫ược hiệu chỉnh ₫ộng theo thời gian (thêm/bớt/thay ₫ổi thành phần menu), chí muốn thay ₫ổi hành vi ₫áp ứng với mục chức có menubar Cách tốt ₫ể giải vấn ₫ề dùng mẫu Command với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 32 https://fb.com/tailieudientucntt 8.6 Mẫu Command Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 33 https://fb.com/tailieudientucntt 8.6 Mẫu Command Mỗi ₫oạn code thực chức ₫ó ₫ược ₫ặt tác vụ execute() class tương ứng, class ₫ều hỗ trợ interface thống ICommand Mỗi ₫ối tượng giao diện (Button, mục chức menu popup,…) chứa tham khảo ₫ến ₫ối tượng ICommand, hàm xử lý kiện Click chuột ln ₫ược viết sau : cmd.execute(); Lệnh kích hoạt tác vụ execute() ₫ối tượng ₫ược tham khảo hành chạy, ₫ối tượng ₫ược tham khảo là tùy theo hành vi cụ thể cần thực Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 34 https://fb.com/tailieudientucntt 8.6 Mẫu Command Ta xây dựng mẫu Command theo loại object pattern với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 35 https://fb.com/tailieudientucntt 8.6 Mẫu Command Các phần tử tham gia : ICommand : interface thống cho ₫ối tượng xử lý request, chứa tác vụ execute() ₫ể thực hành vi ₫ược yêu cầu từ client Command1… (PasteCommand, OpenCommand…) : class ₫ặc tả giải thuật thực hành vi cụ thể, thường có thuộc tính tham khảo ₫ến ₫ối tượng Receiver chứa liệu tác vụ chức có liên quan Invoker (MenuItem): ₫ối tượng gửi request ₫ến ₫ối tượng ICommand ₫ể nhờ thực hành vi tương ứng Client (Application) : module khởi tạo ₫ối tượng Command cụ thể gởi cho tham khảo ₫ến ₫ối tượng Receiver Receiver (Document, Application) : chứa liệu tác vụ chức có liên quan ₫ến hành vi mà ₫ối tượng Command cần thực Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 36 https://fb.com/tailieudientucntt 8.7 Mẫu Observer Mục tiêu : Định nghĩa phụ thuộc 1-n ₫ối tượng cho ₫ối tượng trung tâm bị thay ₫ổi nội dung (trạng thái) n ₫ối tượng phụ thuộc ₫ược cảnh báo hầu hiệu chỉnh tự ₫ộng theo ₫ồi tượng trung tâm, nhờ ₫ó ₫ảm bảo ₫ược tính quán chúng Thường ₫ối tượng trung tâm ₫ối tượng chứa liệu bên ứng dụng, n ₫ối tượng phụ thuộc ₫ối tượng giao diện ứng dụng Nội dung ₫ối tượng giao diện ₫ược chứa quản lý ₫ối tượng bên ứng dụng Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 37 https://fb.com/tailieudientucntt 8.7 Mẫu Observer Thí dụ việc dùng mẫu Observer : Trong ứng dụng quản lý bảng tính (MSExcel), bảng tính bảng liệu database tương ứng (ta gọi workbook hay file *.xls) Ta hiển thị nội dung bảng liệu nhiều ₫ối tượng giao diện khác nhau, thí dụ spreadsheet (bảng nội dung chi tiết chiều), barchart (biểu ₫ồ vạch), piechart (biểu ₫ồ bánh), Mỗi bảng liệu bên phần mềm thay ₫ổi nội dung ₫ó (có thể phần mềm khác), phải gởi cảnh báo (notify) ₫ến ₫ối tượng giao diện có dùng nội dung ₫ể ₫ối tượng kịp thời hiển thị lại nội dung Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 38 https://fb.com/tailieudientucntt 8.7 Mẫu Observer Thí dụ việc dùng mẫu Observer : Tương tự, ₫ối tượng giao diện cho phép người dùng cập nhật nội dung (spreadsheet), user cập nhật nội dung, khơng ₫ược cập nhật cục mà phải gởi yêu cầu cập nhật nội dung ₫ối tượng trung tâm, có ₫ối tượng có quyền ₫ịnh cập nhật hay khơng, cập nhật nội dung nội dung bị thay ₫ổi phải gởi cảnh báo cho ₫ối tượng phụ thuộc biết Cách tốt ₫ể giải vấn ₫ế dùng mẫu thiết kế Observer với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 39 https://fb.com/tailieudientucntt 8.7 Mẫu Observer Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 40 https://fb.com/tailieudientucntt 8.7 Mẫu Observer Ta xây dựng mẫu Observer theo loại object pattern với lược ₫ồ class sau : Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 41 https://fb.com/tailieudientucntt 8.7 Mẫu Observer Các phần tử tham gia : IObservable : interface ₫ối tượng trung tâm (₫óng vai trò mối quan hệ 1-n), chứa tác vụ attach, detach ₫ối tượng phụ thuộc vào danh sách quản lý; tác vụ notify() gởi cảnh báo cho ₫ối tượng phụ thuộc có thay ₫ổi nội dung; tác vụ updateData() nhận yêu cầu thay ₫ổi nội dung xử lý yêu cầu Observable (WorksheetData) : class ₫ặc tả ₫ối tượng trung tâm, thực interface IObservable IObserver : interface thống ₫ối tượng phụ thuộc vào ₫ối tượng trung tâm Observer1… (PieChart…) : class ₫ặc tả ₫ối tượng phụ thuộc cụ thể Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 42 https://fb.com/tailieudientucntt 8.8 Kết chương Chương ₫ã giới thiệu thông tin nhóm mẫu phục vụ che dấu hành vi, thuật giải ₫ối tượng (Behavioral Patterns) thông tin chi tiết cụ thể mẫu Chain of Responsibility, Template Method, Strategy, State, Command, Observer Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu hành vi, thuật giải ₫ối tượng Slide 43 https://fb.com/tailieudientucntt ... https://fb.com/tailieudientucntt 8. 4 Mẫu Strategy Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che... thông tin kết xử lý… Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu... cụ thể cần thiết Khoa Khoa học & Kỹ thuật Máy tính Trường ĐH Bách Khoa Tp.HCM © 2010 CuuDuongThanCong.com Mơn : Phân tích & thiết kế phần mềm hướng ₫ối tượng Chương : Các mẫu thiết kế che dấu