Tải bản đầy đủ (.docx) (24 trang)

Báo cáo môn: Phương pháp lập trình hướng đối tượng đề tài DESIGN PATTERN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (641.8 KB, 24 trang )

ĐẠ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


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

MỤC LỤC

NHÓM 3V1T

TRANG 2 / 23


Đại học Khoa học Tự nhiên TPHCM


Khoa: Công nghệ Thông tin

BẢNG PHÂN CƠNG
STT
42

CƠNG VIỆC




PHẦN TRĂM
ĐĨNG GĨP

Giới thiệu về builder
pattern
Vẽ
diagram
cho
builder pattern
Viết report

44
46
47

NHÓM 3V1T

TRANG 3 / 23



Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

PROTOTYPE PATTERN
1

Giới thiệu Prototype Pattern
1.1. Đặt vấn đề (Problem)

Bạn muốn sao chép một đối tượng. Cách đầu tiên mà bạn nghĩ tới chính là tạo một đối tượng
mới thuộc lớp đó, và sao chép từng thuộc tính từ đối tượng cần được sao chép sang đối tượng
mới.
Nhưng nếu đối tượng đó có những thuộc tính riêng tư khơng thể được truy cập từ bên ngồi thì
sao? Cịn một vài vấn đề nữa. Vì bạn phải xác định được rõ lớp của đối tượng, chương trình
của 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 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ạn sao 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ần mộ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 tồn bộ thuộc tính từ đối
tượng cũ sao đối tượng mới. Bạn hồn tồn có thể sao chép những thuộc tính riêng tư vì phần
lớn ngơn ngữ 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ùng thuộ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ách khá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à q trình
ngun phâ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.
NHÓM 3V1T

TRANG 4 / 23


Đại học Khoa học Tự nhiên TPHCM

2

Khoa: Công nghệ Thông tin

Cấu trúc (Structure) và UML Diagram
1.4. Cấu trúc (Structure)

1. Prototype interface (giao diện chính) khai báo phương thức sao chép. Thơng thường,
đó là phương thức sao chép duy nhất.
2. Concrete Prototype class (lớp đối tượng bản mẫu) thực hiện phương thức sao chép.
Ngoài phương thức sao chép ra, lớp này cũng có thể thực hiện một số phương thức
khác nâng cao hơn.
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ào thuộc giao diện sao chép ở trên.

NHÓM 3V1T

TRANG 5 / 23



Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

Prototype 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ẫu thườ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ạo bả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). Tuy nhiê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.

NHÓM 3V1T

TRANG 6 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

1.5. UML Diagram

3

Triển khai lập trình
1.6. 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++)

NHĨM 3V1T

TRANG 7 / 23


Đại học Khoa học Tự nhiên TPHCM

NHĨM 3V1T

Khoa: Cơng nghệ Thông tin

TRANG 8 / 23


Đại học Khoa học Tự nhiên TPHCM

NHĨM 3V1T

Khoa: Cơng nghệ Thông tin

TRANG 9 / 23


Đại học Khoa học Tự nhiên TPHCM


Khoa: Công nghệ Thông tin

1.7. 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ừ đối tượ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ải gọ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ó.

NHĨM 3V1T

TRANG 10 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

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ột
phươ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à sử dụng tên lớp của chính nó cùng với new tố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 ngun mẫ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 ngun mẫ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.

NHÓM 3V1T

TRANG 11 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

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 đến
phương thức gốc của sổ đăng ký nguyên mẫu.

4

Tổng kết
1.8. 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ông qua 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ấu hình theo nhiều cách khác nhau, làm ngun 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 ngun
mẫu thích hợp và sao chép nó.

c) Ngồi ra sử dụng mẫu Prototype khi :
NHÓM 3V1T

TRANG 12 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin



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.
1.9. Ư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ước khở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 hà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ạn sao 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 hồn tồn khơng cần phân cấp lớp Người sáng tạo.

NHÓM 3V1T

TRANG 13 / 23


Đại học Khoa học Tự nhiên TPHCM

NHĨM 3V1T

Khoa: Cơng nghệ Thông tin

TRANG 14 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin


b) 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 ngun 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 hồn.

NHĨM 3V1T

TRANG 15 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

BUILDER PATTERN
5


Giới thiệu Builder Pattern

6

Triển khai lập trình
1.10.

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
1.11.

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.
NHÓM 3V1T

TRANG 16 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

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ần của lớp Plane.

NHÓM 3V1T

TRANG 17 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin


b) Khai báo các bước xây dựng từng bộ phận trong lớp Builder- là lớp Interface.
Trong 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ụ:

c) Tạo concrete builder class cho từng sản phẩm và tiến hành cài đặt cho
mỗi thành phần của chúng.
NHÓM 3V1T

TRANG 18 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

Trong bước này, ta sử dụng kế thừa để trả về các đối tượng khác nhau có nhiều thuộc tính
chung. Vì các đối tườn này khơng được khai báo trong class Builder.
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

NHÓM 3V1T

TRANG 19 / 23


Đại học Khoa học Tự nhiên TPHCM

NHĨM 3V1T


Khoa: Cơng nghệ Thông tin

TRANG 20 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

d) 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

NHÓM 3V1T

TRANG 21 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

e) 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 tốn tử new. Vì cần sử
dụng các hàm ảo trong class 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.

NHÓM 3V1T

TRANG 22 / 23


Đại học Khoa học Tự nhiên TPHCM

7

Khoa: Công nghệ Thông tin

Ưu - Nhược điểm (Pros - Cons) của Builder Pattern
1.12.

Ưu điểm



Bạn có thể xây dựng các đối tượng theo từng bước, trì hỗn các bước xây dựng hoặc



chạy đệ quy các bước.
Bạn có thể tái sử dụng lại cùng một tập các bước xây dựng khi xây dựng các hình thức




khác nhau của đối tượng.
Single Responsibility Principle (đơn nhiệm) là mối class làm một nhiêm vụ khác nhau.
Trong builder design pattern, class builder chịu trách nhiệm nhận các thuộc tính một
cách thụ động trong khi class director thực hiện thu tập các thuộc tính ấy và xây dựng
đối tượng. Bạn có thể tách biệt code xây dựng phức tạp khỏi logic trong kinh doanh của
sản phẩm.
1.13.



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

NHÓM 3V1T

TRANG 23 / 23


Đại học Khoa học Tự nhiên TPHCM

Khoa: Công nghệ Thông tin

NGUỒN THAM KHẢO
Pericherla Suryateja startertutorials [Online] // patterns. - November 24, 2013. />refactoring.guru [Online] // PROTOTYPE. - u/design-patterns/prototype.
Saket Kumar; Pushpender007 geeksforgeeks.org [Online] // Prototype Design Pattern. September 22, 2021. - />
NHÓM 3V1T

TRANG 24 / 23




×