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 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 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
Trang 1Mẫu thiết kế
Template Method
Trường Đại Học Sư Phạm Kỹ Thuật TP HCM
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
Trang 2Nội dung
1
Định nghĩa 2
Cấu trúc, ý nghĩa và vai trò 3
Hệ quả 4
Vận dụng 5
Các mẫu liên quan 6
Ví dụ 7
Tài liệu tham khảo 8
Dẫn nhập
Trang 31 Dẫn nhập
Ví dụ 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ì?
Trang 41 Dẫn nhập (tt)
Thực hiện :
Trang 51 Dẫn nhập (tt)
Ví dụ 2:
Cho các yêu cầu sau:
thứ tự tăng dần.
thứ tự giảm dần.
Cài đặt các class sort giải quyết các yêu cầu:
Trang 61 Dẫn nhập (tt)
class SortUp {
public:
void sort(int A[],int n){
for(int i=0;i<n;i++)
for(int j=i;j<n;j++) if(A[i]>A[j]) Swap(A[i],A[j]);
}
private:
void Swap(int &a,int &b) {
int t=a;
a=b;
b=t;
}
};
class SortDown { public :
void sort(int A[],int n) { for(int i=0;i<n;i++)
for(int j=i;j<n;j++) if(A[i]<A[j])
Swap(A[i],A[j]);
} private:
void Swap(int &a,int &b) {
int t=a;
a=b;
b=t;
} };
Trang 71 Dẫn nhập (tt)
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).
Trang 81 Dẫn nhập (tt)
class AbstractSort {
public:
void sort(int A[],int n) {
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)
if(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<b);
} };
Trang 92 Đị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 toán
Trang 103 Cấu trúc- Ý nghĩa- Vai trò
Phương thức khuôn:
phần khung để cài đặt
cấu trúc chung của
thuật toán.
Phần thay đổi
theo ngữ cảnh,
việc cài đặt được
ủy nhiệm cho các
lớp kế thừa.
Trong cài đặt cấu trúc khung của thuật toán
sẽ gọi đến các phương thức được cài
đặt.
Chú ý là phải không cài đặt lại phương thức khuôn “TemplateMethod” trong lớp
kế thừa.
Trang 113 Cấu trúc- Ý nghĩa- Vai trò (tt)
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 toá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
Trang 124 Hệ quả
• Ư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
Trang 134 Hệ quả (tt)
• 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ì
Trang 145 Vận dụng
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 đó
Trang 156 Các mẫu liên quan
Trang 166 Các mẫu liên quan(tt)
Các Factory Method thường được gọi bởi Template Method
Trang 176 Các mẫu liên quan(tt)
Strategy: Template sử dụng thừa kế để thay đổi một phần của thuật toán Strategy sử dụng ủy nhiệm để thay đổi Hoàn toàn thuật toán
Trang 187 Ví dụ
class TemplateMethod
HouseTemplate
# buildDoor(): void
# buildFoundation(): void
# buildHouse(): void
# buildPillars(): void
# buildWall(): void
# buildWindows(): void + HouseTemplateMethod()
WoodenHouse
# buildDoor(): void
# buildPillars(): void
# buildWall(): void
GlassHouse
# buildDoor(): void
# buildPillars(): void
# buildWall(): void
Trang 198 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:
http://www.dofactory.com/net/template-method-design-patte
rn
[3] Địa chỉ web:
http://www.oodesign.com/template-method-pattern.html
Trang 20Thank You!