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

Báo Cáo Môn Học - Thiết Kế Phần Mềm Hướng Đối Tượng - Đề Tài - Mẫu Thiết Kế - TEMPLATE METHOD 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 (485.19 KB, 11 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TPHCM
KHOA CÔNG NGHỆ THƠNG TIN
----------

Báo cáo mơn học:

THIẾT KẾ PHẦN MỀM HƯỚNG ĐỐI TƯỢNG

Đề tài:

TEMPLATE METHOD PATTERN


Báo cáo môn học Thiết kế phần mềm hướng đối tượng

MỤC LỤC

PHÂN CÔNG CÔNG VIỆC..............................................................................................3
1. Đặt vấn đề...................................................................................................................4
2. Định nghĩa................................................................................................................... 6
3. Cấu trúc....................................................................................................................... 6
4. Vai trò.......................................................................................................................... 7
5. Hệ quả......................................................................................................................... 7
6. Vận dụng..................................................................................................................... 7
7. Các mẫu liên quan.......................................................................................................7
8. Ứng dụng thực tế.........................................................................................................7
9. Tài liệu tham khảo.......................................................................................................8

2



Báo cáo môn học Thiết kế phần mềm hướng đối tượng

PHÂN CÔNG CÔNG VIỆC

STT
1
2
3
4
5

Tên thành viên
Nguyễn Trần Cát Tiên
12110190
Lê Đức Phi
12110140
Ngơ Thanh Lịch
12110096
Nguyễn Văn Tuấn
12110226
Bùi Thị Thúy Quỳnh
12110157

Cơng việc
Tìm hiểu và trình bày: “Dẫn nhập - Định nghĩa”.
Tìm hiểu và trình bày: “Cấu trúc – Ý nghĩa”.
Tìm hiểu và trình bày: “Hệ quả - Vận dụng”.
Tìm hiểu và trình bày: “Các mẫu liên quan - Ví dụ”.
Chạy Demo.


3


Báo cáo môn học Thiết kế phần mềm hướng đối tượng

1. Đặt vấn đề.
Vấn đề 1: Để thực hiện một câu truy vấn trong các hệ quản trị ta cần làm gì?

Tuy các hệ quản trị khác nhau nhưng nếu muốn thực hiện câu truy vấn đến cơ sở
dữ liệu thì hệ quản trị nào cũng phải qua các bước:

- Kết nối đến cơ sở dữ liệu.
- Thực hiện câu truy vấn.
- Ngắt kết nối tới cơ sở dữ liệu.
 Các bước này được thực hiện theo một khuôn mẫu có trước. Cách thức kết nối
cơ sở dữ liệu, thực hiện truy vấn, ngắt kết nối thì được cài đặt tùy theo từng hệ quản trị
khác nhau.
Vấn đề 2: Thực hiện các yêu cầu sau:

- Sắp xếp mảng số nguyên n phần tử theo thứ tự tăng dần.
- Sắp xếp mảng số nguyên n phần tử theo thứ tự giảm dần.
Ta cài đặt các class sort giải quyết các yêu cầu.

class SortUp {

class SortDown {

4



Báo cáo môn học Thiết kế phần mềm hướng đối tượng

public:

public :

void sort(int A[],int n){

void sort(int A[],int n) {

for(int i=0;i
for(int i=0;i
for(int j=i;j
for(int j=i;j
if(A[i]>A[j])

if(A[i]
Swap(A[i],A[j]);

Swap(A[i],A[j]);

}

}


private:

private:

void Swap(int &a,int &b) {

void Swap(int &a,int &b) {

int t=a;

int t=a;

a=b;

a=b;

b=t;

b=t;

}

}

};

};

Ta nhận thấy rằng hai hàm sortUp và sortDown có cấu trúc tương tự nhau và chỉ
khác nhau ở điều kiện so sánh.

Ý tưởng như sau:
Tổ chức điều kiện so sánh thành hàm isSwap, tạo lớp AbstractSort cơ sở có cấu
trúc chung cho sortUp và sortDown, sau đó cho sortUp và sortDown kế thừa lớp
sort và định nghĩa lại hàm isSwap(int,int).
class AbstractSort {
public:
void sort(int A[],int n) {
for(int i=0;i
5


Báo cáo môn học Thiết kế phần mềm hướng đối tượng

for(int j=i;jif(isSwap(A[i],A[j])
Swap(A[i],A[j]);
}
private:
virtual bool isSwap(int , int )=0;
void Swap(int &a,int &b) {
int t=a;
a=b;
b=t;
}
};
class SortUp: public AbtractSort {
bool isSwap(int a,int b) {
return(a>b);
}

};
class SortDown: public AbtractSort {
bool isSwap(int a,int b){
return(a
6


Báo cáo môn học Thiết kế phần mềm hướng đối tượng

}
};
 Trong tình huống trên ta đã tạo bộ khung cho thuật toán sort và để bước so sánh
cho lớp con cài đặt, lớp cơ sở có nhiệm vụ khai báo khuôn dạng cho hàm so
sánh này.
Thực tế trong lập trình có rất nhiều trường hợp tương tự như trường hợp trên, chúng ta có
một bộ khung chung và giao một số bước nhất định cho lớp con định nghĩa lại theo yêu
cầu cụ thể nào đó. Các chuyên gia thiết kế đã nghiên cứu và tổng quát hóa vấn đề trên
thành mẫu Template Method
2. Định nghĩa.

- Mẫu Template Method là một mẫu thiết kế thuộc nhóm Behavioral Pattern.
- Mẫu Template Method tạo ra bộ khung của một thuật toán, ủy thác việc cài đặt
một vài bước trong thuật toán đó cho các lớp con. Các lớp con định nghĩa lại
các bước này để phù hợp với yêu cầu cụ thể mà khơng cần thay đổi cấu trúc của
thuật tốn.
3. Cấu trúc

7



Báo cáo môn học Thiết kế phần mềm hướng đối tượng

- AbstractClass:
 Định nghĩa các abstract primitive operation (gồm các gái trị trả về, tên
phương thức), các thao tác này được định nghĩa lại ở các lớp con cụ thể để
thực hiện các bước của một thuật toán.
 Cài đặt một template method định nghĩa bộ khung của thuật toán. Template
method này gọi các primitive operation như các phương thức được định
nghĩa trong AbstractClass (hoặc một số đối tượng khác).

- ConcreteClass: thực hiện primitive operation nhưng cài đặt lại nội dung phù
hợp với mỗi class riêng và cũng thực hiện các bước đã chỉ ra trong template
method.
4. Vai trò.
Mẫu Template Method cho phép các thuật toán bảo lưu một số bước cho lớp con.
Cấu trúc của thuật tốn khơng thay đổi, nhưng các bộ phận nhỏ được xác định hoạt
động của nó được xử lý ở nơi khác.
5. Hệ quả.

8


Báo cáo môn học Thiết kế phần mềm hướng đối tượng

- Ưu điểm:
 Có khả năng tái sử dụng code, tránh sự trùng lặp code trong các class.
 Có cấu trúc điều khiển ngược (Inverted Control Structure).
Lợi dụng tính đa hình của lớp cha để gọi các lớp con, các lớp con sẽ




thừa kế những thuộc tính đã có của lớp cha mà không phải cài đặt lại.

- Nhược điểm:
 Khả năng giao tiếp kém.
 Khó khăn trong việc thiết lập các chức năng.
 Khó khăn để hiểu được chương trình.


Khó khăn trong việc duy trì.

6. Vận dụng.
Template method nên được sử dụng trong các trường hợp sau:

- Cài đặt các phần cố định của một thuật toán và để lại các phương thức có thể
thay đổi theo yêu cầu do các lớp con cài đặt.

- Tránh sự trùng lặp mã nguồn: các đoạn mã chung trong các lớp
con có thể được tách ra và đưa vào trong phần cài đặt của lớp cơ
sở.
- Điều khiển mở rộng các lớp con. Ta có thể định nghĩa một
Template Method, nó gọi các thao tác ‘‘hook’’ tại các điểm đặc
biệt, bằng cách đó cho phép các mở rộng chỉ tại điểm đó.
7. Các mẫu liên quan.
- Factory Method thường được gọi bởi Template Method.
- Template sử dụng thừa kế để thay đổi một phần của thuật toán.
Strategy sử dụng delegation để chỉnh sửa tồn bộ thuật tốn.
9



Báo cáo môn học Thiết kế phần mềm hướng đối tượng

8. Ứng dụng thực tế.
class TemplateMethod

HouseTemplate
+
+
+
+
+
+
+

buildDoor(): void
buildFoundation(): void
buildHouse(): void
buildPillars(): void
buildWall(): void
buildWindows(): void
HouseTemplateMethod()

WoodenHouse
+
+
+

GlassHouse


buildDoor(): void
buildPillars(): void
buildWall(): void

+
+
+

buildDoor(): void
buildPillars(): void
buildWall(): void

Muốn xây được một ngơi nhà thì ta đều trải qua các bước:
- Xây nền
- Xây cột
- Xây tường
- Lắp cửa sổ và cửa chính
- Xây mái nhà

10


Báo cáo môn học Thiết kế phần mềm hướng đối tượng

Nhưng nếu muốn xây nhà gỗ thì tường, cột, cửa chính thì phải xây theo
kiểu của nhà gỗ cịn nhà kính thì phải xây theo kiểu của nhà kính chứ
khơng thể xây giống nhau được
 Trong ví dụ trên ta đã tạo bộ khung cho thuật toán xây nhà và để bước
xây tường, xây cửa, xây cột cho lớp con cài đặt, lớp cơ sở có nhiệm vụ
khai báo khn dạng cho phương thức HouseTemplateMethod.

9. Tài liệu tham khảo.
[1] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Addison-Wesley Pub Co; Design Patterns

Elements of Reusable

Object-Oriented Software; 1st edition (January 15, 1995).
[2] Địa chỉ web: />[3] Địa chỉ web: />
11



×