Bạn muốn chép đối tượng Cách mà bạn nghĩ tới tạo đối tượng thuộc lớp đó, chép thuộc tính từ đối tượng cần chép sang đối tượng Nhưng đối tượng có thuộc tính riêng tư khơng thể truy cập từ bên ngồi sao? Cịn vài vấn đề Vì bạn phải xác định rõ lớp đối tượng, chương trình bạn phụ thuộc hồn tồn vào lớp 1.2 Giải pháp cho vấn đề (Solution) Prototype Pattern giao việc chép cho đối tượng cần chép Pattern (khuôn mẫu) tạo giao diện cho đối tượng có phương thức chép Giao diện cho phép bạn chép đối tượng mà không phụ thuộc vào lớp đối tượng Vì giao diện cần phương thức chép Phương thức khởi tạo đối tượng thuộc lớp xác định đem tồn thuộc tính từ đối tượng cũ đối tượng Bạn hồn tồn chép thuộc tính riêng tư phần lớn ngơn ngữ lập trình cho phép đối tượng truy cập vào thuộc tính đó, miễn hai đối tượng thuộc lớp Một đối tượng có khả hỗ trợ chép gọi mẫu Phương thức hoạt động: bạn tạo vài đối tượng để làm mẫu, khai báo theo nhiều cách khác Khi bạn cần chép mẫu trên
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN
NHÓM 3V1T
OOP SEMINAR
ǀ Đề tài ǀ DESIGN PATTERN
ǀ Giáo viên hướng dẫn ǀ
Ts Nguyễn Minh Huy
ThS Nguyễn Duy Quang
ThS Hồ Tuấn Thanh
Môn: Phương pháp lập trình hướng đối tượng
Thành phố Hồ Chí Minh - 2021
Trang 2MỤC LỤC
MỤC LỤC _2 BẢNG PHÂN CÔNG 3 PROTOTYPE PATTERN _4
1 Giới thiệu Prototype Pattern 4 1.1 Đặt vấn đề (Problem) _4 1.2 Giải pháp cho vấn đề (Solution) _4 1.3 Ví dụ thực tiễn (Real-word Analogy) _4
2 Cấu trúc (Structure) và UML Diagram _5 2.1 Cấu trúc (Structure) 5 2.2 UML Diagram _7
3 Triển khai lập trình 7 3.1 Mã giả (Pseudocode) _7 3.2 Cách triển khai (Implement) _10
4 Tổng kết _12 4.1 Tính ứng dụng của Prototype Pattern _12 4.2 Ưu – nhược điểm (Pros - Cons) của Prototype Pattern 13
BUILDER PATTERN _15
1 Giới thiệu Builder Pattern _15
2 Triển khai lập trình _15 2.1 Cách thức triển khai (implement) 15 2.2 Cài đặt builder pattern _15
3 Ưu - Nhược điểm (Pros - Cons) của Builder Pattern _21 3.1 Ưu điểm 21 3.2 Nhược điểm: 21
NGUỒN THAM KHẢO _22
Thành phố Hồ Chí Minh - 2021
Trang 3 Viết report44
46
47
Thành phố Hồ Chí Minh - 2021
Trang 41.2 Giải pháp cho vấn đề (Solution)
Prototype Pattern giao việc sao chép cho chính đối tượng cần được sao chép Pattern (khuôn mẫu)này tạo ra một giao diện cho mọi đối tượng có phương thức sao chép Giao diện này cho phép bạnsao chép một đối tượng mà không phụ thuộc vào lớp của đối tượng đó Vì thế một giao diện chỉ cầnmột phương thức sao chép duy nhất
Phương thức trên khởi tạo một đối tượng thuộc lớp xác định và đem toàn bộ thuộc tính từ đối tượng
cũ sao đối tượng mới Bạn hoàn toàn có thể sao chép những thuộc tính riêng tư vì phần lớn ngônngữ lập trình cho phép đối tượng truy cập vào những thuộc tính đó, miễn là cả hai đối tượng cùngthuộc một lớp
Một đối tượng có khả năng hỗ trợ sao chép được gọi là bản mẫu
Phương thức hoạt động: bạn tạo ra một vài đối tượng để làm bản mẫu, khai báo theo nhiều cáchkhác nhau Khi bạn cần sao chép một trong những bản mẫu trên, chỉ cần sao chép bản mẫu đó
1.3 Ví dụ thực tiễn (Real-word Analogy)
Vì những bản mẫu trong công nghiệp không thể tự sao chép, một ví dụ gần nhất là quá trình nguyênphân tế bào Tế bào gốc có thể được xem là bản mẫu, trải qua nguyên phân, tạo ra tế bào mới
Thành phố Hồ Chí Minh - 2021
Trang 52 Cấu trúc (Structure) và UML Diagram
3 Client (chương trình cho người sử dụng) có khả năng tạo ra bản sao của bất kì đối tượng nàothuộc giao diện sao chép ở trên
Thành phố Hồ Chí Minh - 2021
Trang 6Prototype Registry (khối khởi tạo bản mẫu) cung cấp phương thức tiếp cận dễ dàng những bản mẫuthường được sử dụng Nó lưu trữ một nhóm những bản mẫu sẵn sàng được sao chép Khối khởi tạobản mẫu đơn giản nhất sử dụng name -> prototype (tên -> bản mẫu) hash map (mảng băm) Tuynhiên, nếu bạn cần một tiêu chuẩn để tìm kiếm tốt hơn, bạn có thể thiết kế một phiên bản hiệu quảhơn.
Thành phố Hồ Chí Minh - 2021
Trang 72.2 UML Diagram
3 Triển khai lập trình
3.1 Mã giả (Pseudocode)
Trong ví dụ này, mẫu Nguyên mẫu cho phép tạo các bản sao chính xác của các đối tượng hình học
mà không cần ghép mã với các lớp của chúng
Sao chép một tập hợp các đối tượng thuộc một hệ thống phân cấp lớp
Tất cả các lớp hình dạng tuân theo cùng một giao diện, cung cấp một phương pháp sao chép Một lớp con có thể gọi phương thức sao chép của lớp cha trước khi sao chép các giá trị trường của chính
nó vào đối tượng kết quả
Trong source code dưới đây thì Ironman đại diện cho một nguyên mẫu: ( Ngôn ngữ : C++)
Thành phố Hồ Chí Minh - 2021
Trang 103.2 Cách triển khai (Implement)
a) Tạo giao diện của Nguyên mẫu và khai báo phương thức Clone trong đó Hoặc chỉ cần thêm
giải pháp vào tất cả các lớp của hệ thống phân cấp lớp hiện có, nếu bạn có một cái
b) Phải xác định phương thức khởi tạo thay thế, chấp nhận một đối tượng của lớp đó làm đối
số Hàm tạo phải sao chép các giá trị của tất cả các trường được xác định trong lớp từ đốitượng được truyền vào đối tượng mới được tạo Nếu bạn đang thay đổi một lớp con, bạn phảigọi hàm tạo cha để cho phép lớp cha xử lý việc sao chép các trường riêng tư của nó
Nếu ngôn ngữ lập trình của bạn không hỗ trợ nạp chồng phương thức, bạn có thể xác định mộtphương thức đặc biệt để sao chép dữ liệu đối tượng Hàm tạo là một nơi thuận tiện hơn để làm điều
này vì nó cung cấp đối tượng kết quả ngay sau khi bạn gọi new toán tử.
c) Phương thức nhân bản thường chỉ bao gồm một dòng: chạy một new toán tử với phiên bản
nguyên mẫu của hàm tạo Lưu ý rằng mọi lớp phải ghi đè rõ ràng phương thức nhân bản và
Thành phố Hồ Chí Minh - 2021
Trang 11sử dụng tên lớp của chính nó cùng với new toán tử Nếu không, phương thức nhân bản có
thể tạo ra một đối tượng của lớp cha
d) Theo tùy chọn, tạo một sổ đăng ký nguyên mẫu tập trung để lưu trữ danh mục các nguyên
mẫu được sử dụng thường xuyên
Bạn có thể triển khai sổ đăng ký dưới dạng một lớp nhà máy mới hoặc đặt nó vào lớp nguyên mẫu
cơ sở với một phương thức tĩnh để tìm nạp nguyên mẫu Phương pháp này nên tìm kiếm một nguyênmẫu dựa trên các tiêu chí tìm kiếm mà mã khách hàng chuyển đến phương thức Tiêu chí có thể làmột thẻ chuỗi đơn giản hoặc một tập hợp các tham số tìm kiếm phức tạp Sau khi tìm thấy nguyênmẫu thích hợp, cơ quan đăng ký sẽ sao chép nó và trả lại bản sao cho máy khách
Cuối cùng, thay thế các lệnh gọi trực tiếp đến các hàm tạo của lớp con bằng các lệnh gọi đếnphương thức gốc của sổ đăng ký nguyên mẫu
Thành phố Hồ Chí Minh - 2021
Trang 124 Tổng kết
4.1 Tính ứng dụng của Prototype Pattern
a) Sử dụng mẫu Prototype khi mã của bạn độc lập và không phụ thuộc vào các lớp đối tượng
cụ thể mà bạn cần sao chép, tức là:
Khi mã của bạn hoạt động với các đối tượng được chuyển cho bạn từ mã của bên thứ 3 thôngqua một số gia diện / phương thức thì điều đó xả ra rất nhiều Các lớp cụ thể của những đối tượng này là không xác định và bạn không thể phụ thuộc vào chúng dù bạn muốn hay không
Mẫu Prototype cung cấp cho mã máy khách một giao diện chung để làm việc với tất cả các đối tượng hỗ trợ nhân bản Giao diện này làm cho mã máy khách độc lập với các lớp cụ thể của các đối tượng mà nó sao chép
b) Sử dụng mẫu khi bạn muốn giảm số lượng lớp con khi nó chỉ khác nhau về cách chúng khởi tạo các đối tượng tương ứng của chúng (Tránh sự trùng lặp không cần thiết) Bất kì
ai cũng có thể tạo ra các lớp con này để có thể tạo các đối tượng với một cấu hình cụ thể.
Mẫu Prototype cho phép bạn sử dụng một tập hợp các đối tượng được tạo sẵn, được định cấuhình theo nhiều cách khác nhau, làm nguyên mẫu
Thay vì khởi tạo một lớp con phù hợp với một số cấu hình, bạn chỉ cần tìm một nguyên mẫu thích hợp và sao chép nó
c) Ngoài ra sử dụng mẫu Prototype khi :
Khi lớp được khởi tạo được chỉ định trong thời gian chạy hoặc
Để tránh xây dựng một hệ thống phân cấp của các lớp nhà máy hoặc
Sẽ thuận tiện hơn khi sao chép một đối tượng hơn là tạo một đối tượng mới
4.2 Ưu – nhược điểm (Pros - Cons) của Prototype Pattern
a) Ưu điểm:
Có thể sản xuất các đối tượng phức tạp một cách thuận tiện hơn – Nguyên mẫu cho
phép bạn sao chép đối tượng mẫu một cách nhanh chóng mà không cần thông qua bất kì bướckhởi tạo nào
Thêm và xóa sản phẩm trong thời gian chạy - Nguyên mẫu cho phép bạn kết hợp một lớp
sản phẩm cụ thể mới vào hệ thống chỉ bằng cách đăng ký một phiên bản nguyên mẫu với khách
Thành phố Hồ Chí Minh - 2021
Trang 13hàng Điều đó linh hoạt hơn một chút so với các mẫu sáng tạo khác, bởi vì khách hàng có thể cài đặt và gỡ bỏ các nguyên mẫu tại thời điểm chạy.
Chỉ định các đối tượng mới theo các giá trị khác nhau - Các hệ thống năng động cao cho
phép bạn xác định hành vi mới thông qua thành phần đối tượng bằng cách chỉ định các giá trị cho các biến của đối tượng chứ không phải bằng cách xác định các lớp mới
Chỉ định các đối tượng mới theo cấu trúc khác nhau - Nhiều ứng dụng xây dựng các đối
tượng từ các bộ phận và phần con Để thuận tiện, các ứng dụng như vậy thường cho phép bạn khởi tạo các cấu trúc phức tạp, do người dùng xác định để sử dụng lặp đi lặp lại một mạch con
cụ thể
Giảm bớt phân lớp - Phương thức Nhà máy thường tạo ra một hệ thống phân cấp của các
lớp Người tạo song song với hệ thống phân cấp của lớp sản phẩm Mẫu Prototype cho phép bạnsao chép một nguyên mẫu thay vì yêu cầu một phương pháp gốc để tạo một đối tượng mới Do
đó, bạn hoàn toàn không cần phân cấp lớp Người sáng tạo
Thành phố Hồ Chí Minh - 2021
Trang 14b) Nhược điểm:
Quá mức cho một dự án sử dụng rất ít đối tượng và / hoặc không có trọng tâm cơ bản về việc
mở rộng chuỗi nguyên mẫu
Nó cũng ẩn các lớp sản phẩm cụ thể khỏi khách hàng
Mỗi lớp con của Nguyên mẫu phải triển khai hoạt động clone () có thể khó, khi các lớp đang được xem xét đã tồn tại Ngoài ra, việc triển khai clone () có thể khó khăn khi bên trong của chúng bao gồm các đối tượng không hỗ trợ sao chép hoặc có các tham chiếu tuần hoàn
Thành phố Hồ Chí Minh - 2021
Trang 15BUILDER PATTERN
1 Giới thiệu Builder Pattern
2 Triển khai lập trình
4.3 Cách thức triển khai (implement)
Mặc định, cách thức triển khai thông thường của Builder pattern gồm có 4 thành phần cơ bản:
Builder: là thành phần định nghĩa một lớp trừu tượng (abstract class) để tạo ra một hoặc
nhiều phần của đối tượng Product
ConcreateBuilder: là thành phần triển khai, cụ thể hóa các lớp trừu tượng cho để tạo ra các
thành phần và tập hợp các thành phần đó với nhau Thành phần này sẽ xác định và nắm giữ các thông số của đối tượng mà nó tạo ra Đồng thời nó cũng cung cấp phương thức để trả cácđối tượng mà nó đã tạo ra trước đó
Product: thành phần này trong bài viết sẽ đại diện cho đối tượng phức tạp phải tạo ra.
Director: thành phần này sẽ khởi tạo đối tượng Builder và thực hiện sắp xếp trình tự xây
dựng các thành phần
4.4 Cài đặt builder pattern
a) Xác Định rõ ràng các thành phần cũng như các bước chung cần thiết để xây dựng một sản phẩm
Ví dụ: Khi xây dựng một chiếc máy bay cần có các bộ phận chính là: Thân, động cơ và bánh xe.Một báy bay có thể có nhiều động cơ và nhiều bánh xe
Xây dựng các lớp Body, Engine, Wheel mỗi lớp có những thuộc tính khác nhau là những thành phầncủa lớp Plane
Thành phố Hồ Chí Minh - 2021
Trang 16b) Khai báo các bước xây dựng từng bộ phận trong lớp Builder- là lớp Interface
Thành phố Hồ Chí Minh - 2021
Trang 17Trong lớp này sẽ chứa các hàm ảo có nhiệm vụ dẫn hướng để các hàm xây dựng do người dùng chỉ định Trong C++, sử dụng phương thức vitural để cài đặt.
Ví dụ: Thành phần Engine của Class Plane có nhiều loại là JET và Propeller :
Ví dụ: Tạo Class AirBusBuiler và Class BoeingBuilder là các Concrete Builder Class
Thành phố Hồ Chí Minh - 2021
Trang 19d) Tạo Class Director sử dụng các hàm ảo trong Class Builder để xây dựng nên sản phẩm
Ví dụ: Class Director nhận các tham số từ con trỏ builder để cấu trúc nên một máy bay
Thành phố Hồ Chí Minh - 2021
Trang 20e) Cài đặt trong hàm main
Đầu tiên trong hàm main phải tạo đối tượng sản phẩm cuối cùng sau đó là tạo đối tượng director đểthực hiện các hàm dựng và cuối cùng là tạo các Concrete Builder là các sản phẩm được yêu cầu.trong C++ tạo Concrete Builder bằng con trỏ và dùng toán tử new Vì cần sử dụng các hàm ảo trongclass Builder
Sau đó truyền một đối tượng Concrete Buidler vào Director Ở đây các Concerte Builder sẽ được truyền trực tiếp các phương phác cấu trúc của Director Sản phầm là kết quả thu được từ Director
Thành phố Hồ Chí Minh - 2021
Trang 215 Ưu - Nhược điểm (Pros - Cons) của Builder Pattern
5.2 Nhược điểm:
Độ phức tạp tổng thể của mã code tăng lên vì phải tạo nhiều class mới
Thành phố Hồ Chí Minh - 2021
Trang 22NGUỒN THAM KHẢO
Pericherla Suryateja startertutorials [Online] // patterns - November 24, 2013 -
https://www.startertutorials.com/patterns/prototype-pattern.html
refactoring.guru [Online] // PROTOTYPE - https://refactoring.guru/design-patterns/prototype
Saket Kumar; Pushpender007 geeksforgeeks.org [Online] // Prototype Design Pattern -
September 22, 2021 - https://www.geeksforgeeks.org/prototype-design-pattern/
Thành phố Hồ Chí Minh - 2021