Bài giảng Phương pháp lập trình hướng đối tượng - Chương 10: Mẫu thiết kế hướng đối tượng - Nguyễn Minh Huy

Mꢀu thiꢁt kꢁ  
hưꢂng đꢃi tưꢄng  
GV. Nguyꢀn Minh Huy  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
1
Nꢆi dung  
ꢀ Giꢂi thiꢇu mꢈu thiꢉt kꢉ.  
ꢀ Mꢆt sꢃ mꢈu thông dung.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
2
Nꢆi dung  
ꢀ Giꢂi thiꢅu mꢀu thiꢁt kꢁ.  
ꢀ Mꢆt sꢃ mꢈu thông dꢊng.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
3
Giꢂi thiꢇu mꢈu thiꢉt kꢉ  
ꢀ Thꢉ nào là chương trình hưꢂng đꢃi tưꢄng?  
ꢀ Có khai báo lꢂp và sꢋ dꢊng đꢃi tưꢄng?  
ꢁ Chưa đꢌ!!  
ꢀ Cꢍn tuân thꢌ ba tính chꢎt hưꢂng đꢃi tưꢄng!!  
ꢂ Tính đóng gói (encapsulation)  
ꢁ Quy tꢏc hꢆp đen.  
ꢂ Tính kꢉ thꢐa (inheritance)  
ꢁ Tái sꢋ dꢊng.  
ꢂ Tính đa hình.  
ꢁ Hàm ꢑo + liên kꢉt đꢆng.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
4
Giꢂi thiꢇu mꢈu thiꢉt kꢉ  
ꢀ Mꢊc đích cꢌa hưꢂng đꢃi tưꢄng?  
ꢀ Giꢑm gꢏn kꢉt mã nguꢒn (spaghetti code).  
ꢀ Giꢑm chi phí xây mꢂi.  
ꢀ Giꢑm phꢊ thuꢆc vào cài đꢓt cꢊ thꢔ.  
ꢁ ꢕng phó thay đꢖi, dꢀ bꢑo trì, nâng cꢎp.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
5
Giꢂi thiꢇu mꢈu thiꢉt kꢉ  
ꢀ Khái niꢇm mꢈu thiꢉt kꢉ:  
ꢀ Các tính chꢎt hưꢂng đꢃi tưꢄng mơ hꢒ, khó hiꢔu.  
ꢁ Cꢍn có nhꢗng bài giꢑi mꢈu.  
ꢀ Mꢈu thiꢉt kꢉ Gang of Four:  
ꢂ Ra đꢘi tꢙi OOPSLA 1994.  
ꢂ 23 bài giꢑi mꢈu cho nhꢗng vꢎn đꢚ thiꢉt kꢉ thưꢘng gꢓp.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
6
Nꢆi dung  
ꢀ Giꢂi thiꢇu mꢈu thiꢉt kꢉ.  
ꢀ Mꢆt sꢃ mꢀu thông dꢇng.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
7
Mꢆt sꢃ mꢈu thông dꢊng  
ꢀ Vꢎn đꢚ 1:  
Mꢆt nhà hàng nhꢛ thuê duy nhꢎt MꢈT nhân viên phꢊc vu bàn. Tꢙi mꢆt  
thꢘi điꢔm, nhân viên chꢜ có thꢔ phꢊc vꢊ tꢃi đa 5 bàn. Nhân viên đưꢄc  
tiꢚn thưꢝng 5% trên mꢞi hóa đơn tính tiꢚn.  
Hãy xây dꢟng lꢂp NhanVienPhucVu đꢑm bꢑo điꢚu kiꢇn phꢊc vꢊ và  
tính sꢃ tiꢚn thưꢝng mà nhân viên nhꢁn đưꢄc đꢉn thꢘi điꢔm hiꢇn tꢙi.  
class NhanVienPhucVu  
{
private:  
int soBan;  
float tongTien; // Tꢖng sꢃ tiꢚn tính đưꢄc.  
public:  
// Sꢃ bàn đang phꢊc vꢊ.  
void donKhach();  
void tinhTienKhach(float soTien);  
float tinhTienThuong();  
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
8
Mꢆt sꢃ mꢈu thông dꢊng  
ꢀ Mꢈu Singleton:  
ꢀ Giúp giꢂi hꢙn sꢃ lưꢄng đꢃi tưꢄng đưꢄc tꢙo.  
ꢂ Đꢃi tưꢄng dùng chung.  
ꢂ Connection Pool.  
ꢂ Application Object.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
9
Mꢆt sꢃ mꢈu thông dꢊng  
ꢀ Vꢎn đꢚ 2:  
Có 2 loꢙi mꢙch điꢇn:  
ꢅ Cuꢆn dây: mꢙch đơn, có tiꢉt diꢇn S và chiꢚu dài L.  
R = 0.5 * L / S.  
ꢅ Mꢙch nꢃi tiꢉp: mꢙch phꢠc, có mꢙch con mꢏc nꢃi tiꢉp bên trong.  
R = R
1
+ R
2
+ ꢡ + R
N
.  
Xây dꢟng chương trình tính điꢇn trꢝ cꢌa mꢆt mꢙch điꢇn.  
class CuonDay  
class MachNoiTiep  
{
{
private:  
private:  
???  
public:  
float m_tietDien;  
float m_chieuDai;  
public:  
float tinhDienTro();  
???  
CuonDay(float S, float L);  
float tinhDienTro();  
};  
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
10  
Mꢆt sꢃ mꢈu thông dꢊng  
ꢀ Mꢈu Composite:  
ꢀ Giúp tꢖ chꢠc các đꢃi tưꢄng phꢠc hꢄp.  
ꢂ Thư mꢊcꢅtꢁp tin.  
ꢂ Chi tiꢉt máy.  
ꢂ Mꢙch điꢇn.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
11  
Mꢆt sꢃ mꢈu thông dꢊng  
ꢀ Vꢎn đꢚ 3:  
Xét chương trình huꢎn luyꢇn thú nuôi:  
class Pet {  
void trainPet( Pet *p )  
public:  
{
virtual void eat() = 0;  
virtual void talk() = 0;  
pꢅ>eat();  
pꢅ>talk();  
pꢅ>eat();  
pꢅ>talk();  
}
};  
class Cat : pubic Pet {  
public:  
void eat();  
void talk();  
};  
class Dog : public Pet {  
public:  
void eat();  
void talk();  
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
12  
Mꢆt sꢃ mꢈu thông dꢊng  
ꢀ Vꢎn đꢚ 3 (tiꢉp theo):  
void main()  
class WildAnimal {  
{
public:  
Tiger t = new Tiger();  
virtual void hunt() = 0;  
Wolf w = new Wolf();  
virtual void eatMeat() = 0;  
virtual void shout() = 0;  
// làm sao huꢎn luyꢇn??  
// trainPet( t );  
};  
class Tiger : public WildAnimal {  
// trainPet( w);  
public:  
}
void hunt();  
void eatMeat();  
void shout();  
};  
Hãy tìm cách mꢝ rꢆng chương trình đꢔ  
có thꢔ huꢎn luyꢇn đưꢄc cꢑ cꢢp và sói.  
class Wolf : public WildAnimal {  
public:  
Yêu cꢍu: chꢜ tái sꢋ dꢊng, không chꢜnh  
sꢋa chương trình hiꢇn có.  
void hunt();  
void eatMeat();  
void shout();  
};  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
13  
Mꢆt sꢃ mꢈu thông dꢊng  
ꢀ Mꢈu Adapter:  
ꢀ Tái sꢋ dꢊng đꢃi tưꢄng sꢣn có vào ngꢗ cꢑnh khác.  
ꢂ Sꢋ dꢊng lꢙi thư viꢇn có sꢣn.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
14  
Tóm tꢏt  
ꢀ Chương trình hưꢂng đꢃi tưꢄng:  
ꢀ Tuân thꢌ ba tính chꢎt hương đꢃi tưꢄng.  
ꢀ Mꢊc tiêu: ꢠng phó thay đꢖi, dꢀ bꢑo trì, nâng cꢎp.  
ꢀ Mꢈu thiꢉt kꢉ:  
ꢀ Bài giꢑi mꢈu cho vꢎn đꢚ thiꢉt kꢉ thưꢘng gꢓp.  
ꢀ 23 mꢈu cꢌa Gang of Four.  
ꢀ Mꢈu thông dꢊng:  
ꢀ Singleton.  
ꢀ Composite.  
ꢀ Adapter.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
15  
Bài tꢁp  
ꢀ Bài tꢁp 10.1:  
Mꢆt cꢞ máy đưꢄc cꢎu tꢙo tꢐ các chi tiꢉt máy. Mꢞi chi tiꢉt máy đꢚu đưꢄc  
đánh mã sꢃ đꢔ phân biꢇt vꢂi nhau (ví dꢊ CT001).  
Các chi tiꢉt máy đưꢄc phân làm 2 loꢙi:  
ꢅ Chi tiꢉt đơn: không thꢔ phân chia, có trꢢng lưꢄng và giá thành.  
ꢅ Chi tiꢉt phꢠc: cꢎu tꢙo tꢐ nhꢗng chi tiꢉt con (đơn hoꢓc phꢠc).  
Trꢢng lưꢄng = trꢢng lưꢄng các chi tiꢉt con + 10% phꢊ kiꢇn kꢉt nꢃi.  
Giá thành = giá thành các chi tiꢉt con + 20% công lꢏp ráp.  
Viꢉt chương trình:  
ꢅ Nhꢁp vào các chi tiꢉt máy cꢎu thành nên cꢞ máy.  
ꢅ Tính trꢢng lưꢄng cꢞ máy.  
ꢅ Tính giá thành cꢞ máy.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
16  
Bài tꢁp  
ꢀ Bài tꢁp 10.2:  
Đơn vꢤ lưu trꢗ dꢗ liꢇu trên máy tính là tꢁp tin và thư mꢊc.  
ꢅ Tꢁp tin có thông tin vꢚ tên và kích thưꢂc.  
ꢅ Thư mꢊc chꢜ có tên nhưng có thꢔ chꢠa tꢁp tin và thư mꢊc con.  
Viꢉt chương trình cho phép:  
ꢅ Tꢙo ra mꢆt cây thư mꢊc tꢁp tin.  
ꢅ Đꢉm sꢃ tꢁp tin và thư mꢊc có trong mꢆt thư mꢊc nào đó.  
ꢅ Tính kích thưꢂc mꢆt thư mꢊc.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
17  
Bài tꢁp  
ꢀ Bài tꢁp 10.3:  
Mꢆt công ty sꢑn xuꢎt có 2 loꢙi nhân viên:  
ꢅ Nhân viên sꢑn xuꢎt: lương = sꢃ sꢑn phꢥm x 10000.  
ꢅ Nhân viên văn phòng: lương = mꢠc lương – ngày nghꢜ x 10000.  
Thông tin chung cꢌa nhân viên công ty gꢒm:  
ꢅ Hꢢ tên.  
ꢅ Năm vào làm.  
Ngoài lương đưꢄc tính như trên, mꢞi nhân viên còn đưꢄc phꢊ cꢎp mꢆt  
khoꢑng tiꢚn là 500000. Và khoꢑng tiꢚn này cꢠ tăng thêm 50000 cho  
mꢞi năm công tác ꢝ công ty.  
Viꢉt chương trình:  
ꢅ Nhꢁp vào danh sách nhân viên công ty.  
ꢅ Tính tꢖng sꢃ tiꢚn công ty phꢑi trꢑ cho nhân viên mꢞi tháng.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
18  
Bài tꢁp  
ꢀ Bài tꢁp 10.4:  
Mꢆt khách sꢙn 5 sao có 3 loꢙi phòng:  
ꢅ Phòng loꢙi A, đơn giá 300 USD / ngày.  
ꢅ Phòng loꢙi B, đơn giá 200 USD / ngày.  
ꢅ Phòng loꢙi C, đơn giá 100 USD / ngày.  
Tiꢚn thuê phòng = đơn giá * sꢃ ngày thuê.  
Khách ꢝ phòng loꢙi A đưꢄc sꢋ dꢊng mꢆt sꢃ dꢤch vꢊ cꢌa khách sꢙn.  
Tiꢚn sꢋ dꢊng dꢤch vꢊ đưꢄc cꢆng vào tiꢚn thuê phòng cꢌa khách.  
Đꢓc biꢇt khách sꢙn có chính sách giꢑm giá 10% tꢐ ngày thꢠ 10 trꢝ đi  
cho nhꢗng khách thuê phòng loꢙi A và B.  
Viꢉt chương trình:  
ꢅ Nhꢁp vào thông tin thuê phòng.  
ꢅ Tính tꢖng tiꢚn thuê phòng.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
19  
Bài tꢁp  
ꢀ Bài tꢁp 10.5:  
Mꢆt công ty kinh doanh bꢎt đꢆng sꢑn sꢝ hꢗu N miꢉng đꢎt. Mꢞi miꢉng  
đꢎt có nhꢗng thông tin sau:  
ꢅ Mã sꢃ (ví dꢊ: MD001).  
ꢅ Đơn giá mꢆt m2.  
Ngoài ra, mꢞi miꢉng đꢎt tùy theo hình dꢙng còn có nhꢗng thông tin  
riêng. Hiꢇn có 2 loꢙi hình dꢙng:  
ꢅ Hình chꢗ nhꢁt: diꢇn tích = dài x rꢆng.  
ꢅ Hình thang: diꢇn tích = (đáy lꢂn + đáy nhꢛ) * chiꢚu cao / 2.  
Miꢉng đꢎt hình thang đưꢄc công ty giꢑm giá 5%.  
Viꢉt chương trình:  
ꢅ Nhꢁp danh sách nhꢗng miꢉng đꢎt cꢌa công ty.  
ꢅ Tính tꢖng diꢇn tích các miꢉng đꢎt.  
ꢅ Tính tꢖng giá tiꢚn cꢌa các miꢉng đꢎt.  
Phương pháp lꢁp trình hưꢂng đꢃi tưꢄng ꢅ Nguyꢀn Minh Huy  
20  
pdf 20 trang myanh 25980 Free
Bạn đang xem tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Chương 10: Mẫu thiết kế hướng đối tượng - Nguyễn Minh Huy", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_huong_doi_tuong_chuong_mau_t.pdf