1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÁO cáo CUỐI kì tìm HIỂU về DESIGN PATTERN TRONG c++

25 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm Hiểu Về Design Pattern Trong C++
Tác giả Quách Đinh Trường Thi, Phạm Thanh Cao
Người hướng dẫn T.S Huỳnh Xuân Phụng
Trường học Trường Đại Học Sư Phạm Kỹ Thuật TP.HCM
Chuyên ngành Công Nghệ Thông Tin
Thể loại đồ án môn học
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 25
Dung lượng 0,97 MB

Nội dung

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA CÔNG NGHỆ THƠNG TIN BÁO CÁO CUỐI KÌ TÌM HIỂU VỀ DESIGN PATTERN TRONG C++ Giảng viên hướng dẫn: T.S Huỳnh Xuân Phụng Lớp: 212DEPA330879_04CLC Thành viên thực hiện: Quách Đinh Trường Thi – 19110294 Phạm Thanh Cao - 1911 TP Hồ Chí Minh, tháng 05 năm 2022 0 LỜI CẢM ƠN �㵡�㵡�㵡 Để hoàn thành tốt đề tài báo cáo này, chúng em xin gửi lời cảm ơn chân thành đến giảng viên, tiến sĩ Huỳnh Xuân Phụng, người trực tiếp hỗ trợ chúng em suốt trình làm đề tài Chúng em cảm ơn thầy đưa lời khuyên từ kinh nghiệm thực tiễn để định hướng cho chúng em với yêu cầu đề tài chọn, ln giải đáp thắc mắc đưa góp ý, chỉnh sửa kịp thời giúp chúng em khắc phục nhược điểm hoàn thành tốt thời hạn đề Chúng em xin gửi lời cảm ơn chân thành quý thầy cô khoa Đào tạo Chất Lượng Cao nói chung ngành Cơng Nghệ Thơng Tin nói riêng tận tình truyền đạt kiến thức cần thiết giúp chúng em có tảng để làm nên đề tài này, tạo điều kiện để chúng em tìm hiểu thực tốt đề tài Cùng với đó, chúng em xin gửi cảm ơn đến bạn khóa cung cấp nhiều thơng tin kiến thức hữu ích giúp chúng em hồn thiện đề tài Đề tài báo cáo chúng em thực khoảng thời gian ngắn, với kiến thức hạn chế nhiều hạn chế khác mặt kĩ thuật kinh nghiệm việc thực dự án phần mềm Do đó, trình làm nên đề tài có thiếu sót điều tránh khỏi nên chúng em mong nhận ý kiến đóng góp quý báu quý thầy cô để kiến thức chúng em hồn thiện chúng em làm tốt lần sau Chúng em xin chân thành cảm ơn Cuối lời, chúng em kính chúc quý thầy dồi sức khỏe thành công nghiệp trồng người Một lần nhóm chúng em xin chân thành cảm ơn TP Hồ Chí Minh, tháng năm 2022 Sinh viên thực 0 Trang BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ ĐỒ ÁN MÔN HỌC MẪU THIẾT KẾ PHẦN MỀM HỌC KÌ II, NĂM HỌC 2022 – 2023 - Tên đề tài: TÌM HIỂU VỀ DESIGN PATTERN TRONG C++ - Thời gian thực hiện: Từ: 26/03/2022 Đến: 5/6/2022 - Giáo viên hướng dẫn: TS Huỳnh Xuân Phụng - Yêu cầu đề tài: SOLID Design principle in C++ Pattern: ▪ Builder ▪ Adapter ▪ Composite ▪ Facade ▪ Command ▪ Memento ▪ Visitor ▪ Strategy Project minh họa - Lớp: 212DEPA330879_04CLC - Sinh viên thực hiện: ST T HỌ TÊN MSSV KÝ TÊN THAM GIA (%) 100% 100% Ghi chú: ● Tỷ lệ % = 100% NHẬN XÉT ĐIỂM SỐ TIÊU CHÍ NỘI DUNG TRÌNH BÀY BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ TỔNG BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ ĐIỂM NHẬN XÉT CỦA GIÁO VIÊN �㵕�㵕✴�㵕�㵕 TP Hồ Chí Minh, tháng năm 2022 Giáo viên chấm điểm Huỳnh Xuân Phụng 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Mục Lục LỜI CẢM ƠN ĐỒ ÁN MÔN HỌC MẪU THIẾT KẾ PHẦN MỀM NHẬN XÉT MỞ ĐẦU SOLID principle in C++ 10 S -Single responsibility principle ( Nguyên tắc trách nhiệm đơn lẻ ) 10 Open/closed principle ( Nguyên tắc đóng mở ) 10 L- Liskov substitution principle 11 I - Interface segregation principle ( Nguyên tắc phân tách giao diện ) 12 D - Dependency inversion principle ( Nguyên tắc đảo ngược phụ thuộc ) 13 Builder Method Pattern 14 Builder Method Pattern gì? 14 Sử dụng Builder Pattern nào? 14 Lợi ích Builder Pattern gì? 15 Adapter Pattern 15 Adapter Pattern gì? 15 Lợi ích Adapter Pattern gì? 16 Sử dụng Adapter Pattern nào? 16 Composite pattern 16 Composite Pattern gì? 16 Lợi ích Composite Pattern gì? 17 Sử dụng Composite Pattern nào? 17 Facade pattern 17 Facade Pattern gì? 18 Lợi ích Facade Pattern gì? 18 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Sử dụng Facade Pattern nào? 18 Command pattern 19 Command pattern gì? 19 Lợi ích Command Pattern gì? 20 Sử dụng Command Pattern nào? 20 Memento Pattern 20 Memento Pattern gì? 20 Lợi ích Memento Pattern gì? 21 Sử dụng Memento nào? 21 Visitor Pattern 21 Visitor Pattern gì? 21 Lợi ích Visitor Pattern gì? 21 Sử dụng Visitor Pattern nào? 21 Strategy Pattern 22 Strategy Pattern gì? 22 Lợi ích Strategy Pattern gì? 22 Sử dụng Strategy Pattern nào? 22 TỔNG KẾT 23 TÀI LIỆU THAM KHẢO 24 MỞ ĐẦU LỜI MỞ ĐẦU Ngày nay, công nghệ thông tin coi ngành quyền lực bậc với hàng loạt ứng dụng lĩnh vực đời sống - từ sản xuất, kinh doanh đến giáo dục, y tế, văn hóa Đặc biệt, thời kỳ Cách mạng 4.0 - mà Việt Nam ứng dụng cơng nghệ tự động hóa, trao đổi liệu Trong công nghệ sản xuất, công nghệ thông tin khẳng định tầm quan trọng - vừa tảng, vừa động lực để bắt kịp đà phát triển giới 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Vậy để hệ thống có tính tái sử dụng cao, tăng tính đóng gói, khơng lặp lại phạm vi logic thu hẹp áp dụng Design Pattern phát triển phần mềm lựa chọn thích hợp Với mong muốn tìm hiểu sâu việc phát triển phần mềm nên em chọn đề tài “Desgin Pattern Java” Trong q trình thực đồ án, cịn hạn chế thời gian, kinh nghiệm thực tế dịch bệnh COVID, nhóm chúng em mong nhận góp ý chân thành từ thầy bạn Đề tài giới thiệu lý thuyết Design Pattern, phân tích đánh giá kỹ thuật xây dựng ứng dụng thực nghiệm KẾ HOẠCH THỰC HIỆN 1.1 Kế hoạch thực Tuần Công Việc Thực Hiện Ngày Bđ Ngày Kt K Q Tìm hiểu SOLID 28/03/20 22 03/04/20 22 √ Tìm hiểu Builder Pattern 04/04/20 22 10/04/20 22 √ Tìm hiểu Adapter pattern 11/04/20 22 17/04/20 22 √ Tìm hiểu Composite Pattern 18/04/20 22 20/04/20 22 √ Tìm hiểu Facade 21/04/20 22 24/04/20 22 √ Tìm hiểu Command 25/04/20 22 28/04/20 22 √ Tìm hiểu Memento 29/04/20 22 01/05/20 22 √ 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Tìm hiểu Visitor 02/05/20 22 05/05/20 22 √ Tìm hiểu Strategy 06/05/20 22 10/05/20 22 √ Xây dựng project minh họa 16/05/20 22 21/05/20 22 1 Hoàn tất project báo cáo 22/5/202 22/5/202 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ 1.2 Phân công nhiệm vụ T T Tên sinh viên Mô tả cơng việc Đóng góp - Lập kế hoạch thực hiện, phân chia cơng việc thành viên nhóm, lên ý tưởng Project - Phụ trách tìm hiểu Builder, Adapter, Composite, Command 100 % - Phụ trách tổng hợp nội dung, code làm báo cáo - Ph trỏch tỡm hiu SOLID, Faỗade, Memento, Visitor, Stratergy - Phụ trách xây dựng Project - Phụ trách báo cáo phần thực 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ 100 % BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BỐ CỤC BÀI BÁO CÁO Đồ án tổ chức làm phần sau: - Mở đầu: Trình bày rõ lý chọn đề tài, mục tiêu nghiên cứu đồ án kế hoạch thực bố cục đồ án - Chương 1: Kiến thức Chương trình bày khái niệm bản, đặc điểm, phân loại, ưu nhược điểm Design Pattern - Chương 2: Các kỹ thuật Design Pattern Chương trình bày chi tiết kỹ thuật cách xây dựng mẫu thiết kế phần mềm - Chương 3: Project minh họa Chương trình bày chủ yếu phân tích thiết kế hệ thống hướng đối tượng áp dụng Design Pattern vào toán - Tổng kết: Phần đưa kết đồ án đạt được, thiếu sót chưa thực hướng phát triển đề tài tương lai - Tài liệu tham khảo: Phần đưa đường dẫn website sách tham khảo mà nhóm xem áp dụng vào báo cáo 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ SOLID principle in C++ S -Single responsibility principle ( Nguyên tắc trách nhiệm đơn lẻ ) Một class nên thực cơng việc Nói cho dễ hiểu class nên thực cơng việc, thay thực nhiều việc class cho class thực cơng việc Ví dụ : Với việc chia nhỏ ta thấy ta dễ dàng gọi đến lớp tương ứng với cơng việc, dễ maintain code sửa lớp nhiều, đối tượng tách biệt hoàn toàn nhiệm vụ Open/closed principle ( Nguyên tắc đóng mở ) Theo nguyên tắc ta muốn thêm chức cho chương trình, nên viết class mở rộng class cũ cách kế thừa sở hữu class cũ không nên sửa đổi class cũ Việc dẫn đến tình trạng phát sinh nhiều class, không cần phải test lại class cũ nữa, mà tập trung vào test class mới, nơi chứa chức Ví dụ : Khi trang web muốn tăng số chế nhuận bút thường thêm thuộc tính cho class Blogger 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Theo cách làm hoàn toàn Tuy nhiên, bạn thiết kế chương trình thực có nhiều điểm khơng hợp lí lắm, lại có thêm kiểu nhuận bút sao, lại phải vào sửa lại hàm để đáp ứng dược nhu cầu hay sao? Code lúc ảnh hưởng tới code cũ, có khả làm hỏng ln code cũ, … Rõ ràng nên có phương pháp an tồn thân thiện Có thể thấy rằng, cách thiết kế làm cho lớp Blogger trở nên: ĐÓNG với thay đổi bên trong, MỞ cho kế thừa để mở rộng sau L- Liskov substitution principle Nội dung nguyên tắc là: Trong chương trình, object class thay class cha mà khơng làm thay đổi tính đắn chương trình Ví dụ ta muốn viết chương trình để mơ tả loài chim bay chim cánh cụt khơng bay Vì viết đến hàm chim cánh cụt gọi hàm bay chim cánh cụt, ta quăng NoFlyException 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Tuy nhiên, quay laị vòng lặp for hàm main, danh sách chim mà có chim cánh cụt sao? Chương trình quăng Exception chương trình vi phạm Liskov substitution principle Để giải vấn đề ta tách class chim cánh cụt interface riêng I - Interface segregation principle ( Nguyên tắc phân tách giao diện ) Nội dung: Nếu Interface lớn nên tách thành interface nhỏ hơn, với nhiều mục đích cụ thể Nguyên lý dễ hiểu Hãy tưởng tượng có interface lớn, khoảng 100 methods Việc implements cực khổ, ngồi cịn dư thừa class không cần dùng hết 100 method Khi tách interface thành nhiều interface nhỏ, gồm method liên quan tới nhau, việc implement quản lý dễ Ví dụ : Chúng ta có interface Animal sau : Chúng ta có class Dog Snake implement interface Animal Nhưng thật vơ lý, Dog fly(), Snake khơng thể run() được? Thay vào đó, nên tách thành interface này: 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ D - Dependency inversion principle ( Nguyên tắc đảo ngược phụ thuộc ) DIP nguyên tắc cuối nguyên tắc khó hiểu SOLID Nội dung nguyên tắc module cấp cao không nên phụ thuộc vào modules cấp thấp Cả nên phụ thuộc vào abstraction Interface (abstraction) không nên phụ thuộc vào chi tiết, mà ngược lại (Các class giao tiếp với thơng qua interface, khơng phải thơng qua implementation.) Ví dụ: Khi ta thiết kế chương trình gửi thơng báo từ email đến user Nhưng khách hàng muốn gửi SMS Email đến cho user, bạn phải làm sao? 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Tạo lớp SMSSender chỉnh sửa class Notificaiton Như bạn vi phạm lúc hai nguyên tắc, Dependency Inversion đảo ngược phụ thuộc Open close principle Software đóng cho việc thay đổi mở cho việc mở rộng Để thỏa mãn hai nguyên tắc trên, bạn phải Refactoring code theo chiều hướng giảm phụ thuộc cứng cách tạo interface ISender dùng chung hai class EmailSender SMSSender Giờ class Notification phụ thuộc mềm vào interface ISender, khách hàng yêu cầu thêm phương thức để chuyển tin nhắn ta thêm vào dễ dàng cách sử dụng interface ISender Builder Method Pattern Builder Method Pattern gì? Builder pattern loại design pattern thuộc loại Creational Pattern, mơ hình cung cấp cách tốt để tạo đối tượng Builder Pattern mẫu thiết kế đối tượng tạo để xây dựng đôi tượng phức tạp cách sử dụng đối tượng đơn giản sử dụng tiếp cận bước, việc xây dựng đối tượng đôc lập với đối tương khác Sử dụng Builder Pattern nào? 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Builder Pattern sử dụng khi: Khi muốn thay đổi thiết kế cho việc lồng hàm khởi tạo (Telescoping Constructor Pattern) Vấn đề phát sinh lập trình viên làm việc với lớp mà có chứa nhiều thuộc tính cần phải tạo nhiều hàm khởi tạo với số lượng thuộc tính tăng dần Khi cần tạo đối tượng phức tạp, đối tượng mà thuật tốn để tạo tạo lập thuộc tính độc lập thuộc tính khác Lợi ích Builder Pattern gì? Lợi ích Builder Pattern: Hỗ trợ, loại bớt ᴠ iệᴄ phải ᴠ iết nhiều ᴄ onѕtruᴄ tor.Code dễ đọᴄ, dễ bảo trì ѕố lượng thuộᴄ tính (properу) bắt buộᴄ để tạo objeᴄt từ hoặᴄ properу Giảm bớt ѕố lượng ᴄ onѕtruᴄ tor, không ᴄ ần truуền giá trị null ᴄ ho ᴄáᴄ tham ѕố khơng ѕử dụng Ít bị lỗi ᴠ iệᴄ gán ѕai tham ѕố mà ᴄ ó nhiều tham ѕố ᴄ onѕtruᴄtor: Bởi ᴠì người dùng biết đượᴄ ᴄ hính хáᴄ giá trị gọi phương thứᴄ tương ứng Đối tượng đượᴄ хâу dựng an tồn hơn: Bởi ᴠ ì đượᴄ tạo hoàn ᴄ hỉnh trướᴄ ѕử dụng Cung ᴄ ấp ᴄ ho bạn kiểm ѕốt tốt q trình хâу dựng: Chúng ta ᴄ ó thể thêm хử lý kiểm tra ràng buộᴄ trướᴄ đối tượng đượᴄ trả ᴠề người dùng Có thể tạo đối tượng immutable Adapter Pattern Adapter Pattern gì? Adapter pattern mẫu thiết kế phần mềm, Adapter Pattern nằm nhóm Cấu trúc — Structural Pattern — liên quan đến cấu trúc cho toàn hệ thống, tập trung vào mối quan hệ 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ thực thể, component, làm cho chúng tương tác dễ dàng với Adapter Pattern đóng vai trị trung gian, tương thích cho hệ thống sẵn có đối ứng với component mà không cần phải sửa đổi code, cho phép interface khơng liên quan đến làm việc Lợi ích Adapter Pattern gì? ● Sử dụng cho dự án lớp riêng mà khơng đụng tới code cũ, hay cịn gọi code gốc Tăng tính minh bạch khả tái sử dụng lớp, đóng gói việc triển khai, khả tái sử dụng cao ● Tính sẵn sàng ln có Tính linh hoạt khả mở rộng tốt ● Thông qua việc sử dụng tệp cấu hình, Adapter pattern dễ dàng thay thêm lớp Adapter mà không cần sửa đổi mã gốc, tuân theo nguyên tắc mở đóng lập trình Sử dụng Adapter Pattern nào? Trường hợp mà sử dụng nhiều có lẽ sử dụng nâng cấp hệ thống khơng muốn đụng vào mơ hình hệ trước Tình sử dụng sử dụng third party, developer định nghĩa lại interface dự án yêu cầu Xem thêm: third party gì? Khi sử dụng third party Composite pattern Composite Pattern gì? Composite mẫu thiết kế thuộc nhóm Structural Pattern Composite Pattern tổng hợp thành phần có quan hệ với để tạo thành phần lớn Nó cho phép thực tương tác với tất đối tượng mẫu tương tự 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Composite Pattern bao gồm thành phần:  Component protocol: Đảm bảo tất thành phần phải xử lí theo hướng  Leaf: Là thành phần thành phần  Composite: Là container chứa đối tượng leaf composite khác Tất nút composite leaf xuất phát từ component protocol Chúng ta tổ chức vài lớp leaf khác đối tượng composite Lợi ích Composite Pattern gì? ● Cung cấp cách sử dụng đối tượng riêng lẻ nhóm đối tượng với Sử dụng Composite Pattern nào?  Composite Pattern nên áp dụng nhóm đối tượng phải hoạt động đối tượng (theo cách)  Composite Pattern sử dụng để tạo cấu trúc giống cấu trúc Facade pattern 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Facade Pattern gì? Facade mẫu thiết kế thuộc nhóm cấu trúc (Structural Pattern) Facade đối tượng đối tượng cung cấp interface đơn giản để che giấu xử lý phức tạp bên Lợi ích Facade Pattern gì? ● Ta tách mã nguồn khỏi phức tạp hệ thống ● Hệ thống tích hợp thơng qua Facade đơn giản cần tương tác với Facade thay hàng loạt đối tượng khác ● Tăng khả độc lập khả chuyển, giảm phụ thuộc ● Có thể đóng gói nhiều hàm thiết kế khơng tốt hàm có thiết kế tốt Sử dụng Facade Pattern nào? Dưới liệt kê số trường hợp mà gặp phải cân nhắc sử dụng Facade pattern: ● Muốn gom nhóm chức lại để Client dễ sử dụng Khi hệ thống có nhiều lớp làm người sử dụng khó để hiểu quy trình xử lý chương trình Và có nhiều hệ thống mà hệ thống lại có giao diện riêng lẻ nên khó cho việc sử dụng phối hợp Khi sử dụng Facade Pattern để tạo giao diện đơn giản cho người sử dụng hệ thống phức tạp ● Giảm phụ thuộc Khi bạn muốn phõn lp cỏc h thng Dựng Faỗade Pattern định nghĩa cổng giao tiếp chung cho hệ thống con, giúp giảm phụ thuộc hệ thống hệ thống giao tiếp với thông qua cổng giao diện chung ● Tăng khả độc lập khả chuyển ● Khi người sử dụng phụ thuộc nhiều vào lp ci t Vic ỏp dng Faỗade Pattern s tỏch biệt hệ thống người dùng hệ thống khác, tăng khả độc lập khả chuyển hệ thống con, dễ chuyển đổi nâng cấp tương lai ● Đóng gói nhiều chức năng, che giấu thuật toán phức tạp 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ ● Cần interface không rắc rối mà dễ sử dụng Command pattern Command pattern gì? Command Pattern 23 design pattern Gang of Four tiếng Command pattern thuộc nhóm pattern hành vi: Đóng gói tất thơng tin cần thiết vào đối tượng để thực hành động hay kích hoạt kiện thực sau Các thơng tin bao gồm tên phương thức, biến giá trị cần thiết hay đơn giản cho phép chuyển yêu cầu thành đối tượng độc lập, sử dụng để tham số hóa đối tượng với yêu cầu khác log, queue (undo/redo), transtraction Dưới thành phần cần có command pattern Trong đó:  Command : interface abstract class, chứa phương thức trừu tượng thực thi (execute) hành động (operation) Request đóng gói dạng Command  ConcreteCommand : implementation Command Định nghĩa gắn kết đối tượng Receiver hành động Thực thi execute() việc gọi operation hoãn Receiver Mỗi ConcreteCommand phục vụ cho case request riêng  Client : tiếp nhận request từ phía người dùng, đóng gói request thành ConcreteCommand thích hợp thiết lập receiver  Invoker : tiếp nhận ConcreteCommand từ Client gọi execute() ConcreteCommand để thực thi request 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++  Receiver : thành phần thực xử lý business logic cho case request Trong phương thức execute() ConcreteCommand gọi method thích hợp Receiver Lợi ích Command Pattern gì?  Dễ dàng thêm Command hệ thống mà không cần thay đổi lớp có Đảm bảo Open/Closed Principle  Tách đối tượng gọi operation từ đối tượng thực thực operation Giảm kết nối Invoker Receiver  Cho phép tham số hóa yêu cầu khác hành động để thực  Cho phép lưu yêu cầu hàng đợi Đóng gói yêu cầu đối tượng Dễ dàng chuyển liệu dạng đối tượng thành phần hệ thống Sử dụng Command Pattern nào?  Khi cần tham số hóa đối tượng theo hành động thực  Khi cần tạo thực thi yêu cầu vào thời điểm khác  Khi cần hỗ trợ tính undo, log , callback transaction Memento Pattern Memento Pattern gì? Memento Design Pattern thuộc loại Behavior Nó cho phép lưu trữ khôi phục trạng thái đối tượng mà không tiết lộ chi tiết bên Memento Pattern gồm thành phần sau: Originator: Object có trạng thái lưu trữ khôi phục Mementor: trạng thái (State) Object lưu trữ CareTaker: đóng vai trị lưu trữ cấp phát Memento 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Lợi ích Memento Pattern gì? Bảo bảo nguyên tắc đóng gói: sử dụng trực tiếp trạng thái đối tượng làm lộ thơng tin chi tiết bên đối tượng vi phạm nguyên tắc đóng gói Đơn giản code Originator cách để Memento lưu giữ trạng thái Originator Caretaker quản lý lịch sử thay đổi Originator Sử dụng Memento nào? Memento Pattern sử dụng muốn lưu sau khơi phục trạng thái Object Ví dụ chơi game, muốn lưu lại tất trạng thái chơi trước để sau quit game mở lại tiếp tục chơi, ta áp dụng Memento Pattern để giải toán Visitor Pattern Visitor Pattern gì? Visitor Pattern Pattern thuộc nhóm hành vi (Behavior Pattern) Visitor cho phép định nghĩa thao tác (operations) tập hợp đối tượng (objects) không đồng (về kiểu) mà không làm thay đổi định nghĩa lớp (classes) đối tượng Để đạt điều này, mẫu thiết kế visitor ta định nghĩa thao tác lớp tách biệt gọi lớp visitors, lớp cho phép tách rời thao tác với đối tượng mà tác động đến Với thao tác thêm vào, lớp visitor tương ứng tạo Lợi ích Visitor Pattern gì? Cho phép nhiều hành vi áp dụng cho tập hợp đối tượng thời điểm run-time, tách rời hành vi khỏi cấu trúc đối tượng Đảm bảo nguyên tắc Open/ Close: đối tượng gốc không bị thay đổi, dễ dàng thêm hành vi cho đối tượng thông qua visitor Sử dụng Visitor Pattern nào? Khi có cấu trúc đối tượng phức tạp với nhiều class interface Người dùng cần thực số hành vi cụ thể riêng đối tượng, tùy thuộc vào concrete class chúng 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ Khi phải thực thao tác nhóm loại đối tượng tương tự Chúng ta di chuyển logic hành vi từ đối tượng sang lớp khác Khi cấu trúc liệu đối tượng thay đổi hành vi chúng thay đổi thường xuyên Khi muốn tránh sử dụng toán tử instanceof Strategy Pattern Strategy Pattern gì? Strategy pattern (mẫu chiến lược): Hiểu cách đơn giản mẫu thiết kế giúp bạn trừu tượng hóa hành vi (behavior, method, function) đối tượng cách đưa cài đặt vào lớp khác Lợi ích Strategy Pattern gì? Nó cung cấp thay cho class Nó định nghĩa hành vi lớp riêng, loại bỏ cần thiết cho câu lệnh có điều kiện Nó giúp dễ dàng mở rộng kết hợp hành vi mà không thay đổi ứng dụng Sử dụng Strategy Pattern nào? Khi nhiều lớp khác hành vi Khi bạn cần biến thể khác thuật toán 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ TỔNG KẾT Design Pattern vấn đề quan trọng tổ chức phát triển phần mềm Trong trình thực đồ án thời gian nghiên cứu kinh nghiệm thân hạn chế nên số phần đồ án nghiên cứu chưa sâu Sau 03 tháng thực nghiên cứu đề tài, hướng dẫn tận tình Tiến sỹ Huỳnh Xuân Phụng, đồ án em đạt kết sau: Kết đạt được: ▪ Tìm hiểu nghiên cứu sở lý thuyết Design Pattern ▪ Nắm số kỹ thuật hay sử dụng cách sử dụng ▪ Biết áp dụng Design Pattern vào toán đơn giản Hạn chế: Trong thời gian qua, chúng em cố gắng để tìm hiểu thực đề tài Tuy nhiên với kinh nghiệm thời gian hạn chế nên khơng thể tránh khỏi thiếu sót đồ án Cụ thể: ▪ Chưa nghiên cứu sâu vào kỹ thuật Design Patterns ▪ Đồ án tập trung vào toán nhỏ nên chưa toát nên tầm quan trọng Design Patterns ▪ Trình bày thiếu logic, cách diễn đạt cịn Hướng phát triển đề tài tương lai: Với mong muốn trở thành lập trình viên phần mềm tương lai nên thời gian tới em tiếp tục tìm hiểu nghiên cứu hồn thiện đồ án mức cao Và sau nghiên cứu áp dụng Design Patterns vào toán Quản lý mầm non để thấy tầm quan trọng Rồi từ rút kinh nghiệm thân cải thiện kỹ cần thiết 0 BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++ BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++BAO.cao.CUOI.ki.tim.HIEU.ve.DESIGN.PATTERN.TRONG.c++

Ngày đăng: 24/12/2023, 10:40

w