Tải bản đầy đủ (.pdf) (20 trang)

OOP 10 design patterns -

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 (672.96 KB, 20 trang )

MẫuMẫu thiếtthiết kếkế
hướnghướng
đốiđối
tượngtượng
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
hướnghướng
đốiđối
tượngtượng
1Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 GiớiGiới thiệuthiệu mẫumẫu thiếtthiết kếkế
 MộtMột sốsố mẫumẫu thôngthông dung.dung.
2Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 GiớiGiới thiệuthiệu mẫumẫu thiếtthiết kếkế
 MộtMột sốsố mẫumẫu thôngthông dung.dung.
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
GiớiGiới thiệuthiệu mẫumẫu thiếtthiết kếkế
 ThếThế nàonào làlà chươngchương trìnhtrình hướnghướng đốiđối tượngtượng??

CóCó khaikhai báobáo lớplớp vàvà sửsử dụngdụng đốiđối tượngtượng??
 ChưaChưa đủđủ!!!!
 CầnCần tuântuân thủthủ baba tínhtính chấtchất hướnghướng đốiđối tượngtượng!!!!
 TínhTính đóngđóng góigói (encapsulation)(encapsulation)
 QuyQuy tắctắc hộphộp đenđen
 TínhTính kếkế thừathừa (inheritance)(inheritance)
 TáiTái sửsử dụngdụng
 TínhTính đađa hìnhhình
 HàmHàm ảoảo + + liênliên kếtkết độngđộng
4Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
GiớiGiới thiệuthiệu mẫumẫu thiếtthiết kếkế


 MụcMục đíchđích củacủa hướnghướng đốiđối tượngtượng??

GiảmGiảm gắngắn kếtkết mãmã nguồnnguồn (spaghetti code).(spaghetti code).
 GiảmGiảm chi chi phíphí xâyxây mớimới
 GiảmGiảm phụphụ thuộcthuộc vàovào càicài đặtđặt cụcụ thểthể
 ỨngỨng phóphó thaythay đổiđổi, , ddễễ bảobảo trìtrì, , nângnâng cấpcấp
5Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
GiớiGiới thiệuthiệu mẫumẫu thiếtthiết kếkế
 KháiKhái niệmniệm mẫumẫu thiếtthiết kếkế::

CácCác tínhtính chấtchất hướnghướng đốiđối tượngtượng mơmơ hồhồ, , khókhó hiểuhiểu
 CầnCần cócó nhữngnhững bàibài giảigiải mẫumẫu
 MẫuMẫu thiếtthiết kếkế Gang of Four:Gang of Four:
 Ra Ra đờiđời tạitại OOPSLA 1994.OOPSLA 1994.
 23 23 bàibài giảigiải mẫumẫu chocho nhữngnhững vấnvấn đềđề thiếtthiết kếkế thườngthường gặpgặp
6Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
 GiớiGiới thiệuthiệu mẫumẫu thiếtthiết kếkế
 MộtMột sốsố mẫumẫu thôngthông dụngdụng
7Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
MộtMột sốsố mẫumẫu thôngthông dụngdụng
 VấnVấn đềđề 1:1:
MộtMột nhànhà hànghàng nhỏnhỏ thuêthuê duyduy nhấtnhất mộtmột nhânnhân viênviên phụcphục vu vu bànbàn. . TạiTại mộtmột
thờithời điểmđiểm, , nhânnhân viênviên chỉchỉ cócó thểthể phụcphục vụvụ tốitối đađa 5 5 bànbàn. . NhânNhân viênviên đượcđược
tiềntiền thưởngthưởng 5% 5% trêntrên mỗimỗi hóahóa đơnđơn tínhtính tiềntiền
HãyHãy xâyxây dựngdựng lớplớp NhanVienPhucVuNhanVienPhucVu đảmđảm bảobảo điềuđiều kiệnkiện phụcphục vụvụ vàvà
tínhtính sốsố tiềntiền thưởngthưởng màmà nhânnhân viênviên nhậnnhận đượcđược đếnđến thờithời điểmđiểm hiệnhiện tạitại
class class
NhanVienPhucVuNhanVienPhucVu
class class

NhanVienPhucVuNhanVienPhucVu
{{
private:private:
intint soBansoBan;;
float float tongTientongTien;;
public:public:
void void donKhachdonKhach();();
void void tinhTienKhachtinhTienKhach(float (float soTiensoTien););
float float tinhTienThuongtinhTienThuong();();
};};
8Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
MộtMột sốsố mẫumẫu thôngthông dụngdụng
 MẫuMẫu Singleton:Singleton:

GiúpGiúp giớigiới hạnhạn sốsố lượnglượng đốiđối tượngtượng đượcđược tạotạo
 ĐốiĐối tượngtượng dùngdùng chungchung
 Connection Pool.Connection Pool.
 Application Object.Application Object.
9Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
MộtMột sốsố mẫumẫu thôngthông dụngdụng
 VấnVấn đềđề 2:2:
CóCó 2 2 loạiloại mạchmạch điệnđiện::
CuộnCuộn dâydây: : mạchmạch đơnđơn, , cócó tiếttiết diệndiện S S vàvà chiềuchiều dàidài L.L.
R = 0.5 * L / S.R = 0.5 * L / S.
MạchMạch nốinối tiếptiếp: : mạchmạch phứcphức, , cócó mạchmạch con con mắcmắc nốinối tiếptiếp bênbên trongtrong
R = RR = R
11
+ R+ R
22
+  + R+  + R

NN

R = RR = R
11
+ R+ R
22
+  + R+  + R
NN

XâyXây dựngdựng chươngchương trìnhtrình tínhtính điệnđiện trởtrở củacủa mộtmột mạchmạch điệnđiện
class class CuonDayCuonDay
{{
private:private:
float float m_tietDienm_tietDien;;
float float m_chieuDaim_chieuDai;;
public:public:
CuonDayCuonDay(float S, float L);(float S, float L);
float float tinhDienTrotinhDienTro();();
};};
10Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
class class MachNoiTiepMachNoiTiep
{{
private:private:
??????
public:public:
float float tinhDienTrotinhDienTro();();
??????
};};
MộtMột sốsố mẫumẫu thôngthông dụngdụng
 MẫuMẫu Composite:Composite:


GiúpGiúp tổtổ chứcchức cáccác đốiđối tượngtượng phứcphức hợphợp
 ThưThư mụcmục tậptập tin.tin.
 Chi Chi tiếttiết máymáy
 MạchMạch điệnđiện
11Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
MộtMột sốsố mẫumẫu thôngthông dụngdụng
 VấnVấn đềđề 3:3:
XétXét chươngchương trìnhtrình huấnhuấn luyệnluyện thúthú nuôinuôi::
class class PetPet {{
public:public:
virtual void eat() = 0;virtual void eat() = 0;
virtual void talk() = 0;virtual void talk() = 0;
};};
void void trainPettrainPet( Pet *p )( Pet *p )
{{
pp >eat();>eat();
pp >talk();>talk();
pp

>eat();>eat();
};};
class class Cat Cat : pubic : pubic PetPet {{
public:public:
void eat();void eat();
void talk();void talk();
};};
class class Dog Dog : public : public PetPet {{
public:public:
void eat();void eat();

void talk();void talk();
};};
12Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
pp

>eat();>eat();
pp >talk();>talk();
}}
MộtMột sốsố mẫumẫu thôngthông dụngdụng
 VấnVấn đềđề 3 (3 (tiếptiếp theotheo):):
class class WildAnimalWildAnimal {{
public:public:
virtual void hunt() = 0;virtual void hunt() = 0;
virtual void virtual void eatMeateatMeat() = 0;() = 0;
virtual void shout() = 0;virtual void shout() = 0;
};};
class class
TigerTiger
: public : public
WildAnimalWildAnimal
{{
void void main()main()
{{
Tiger t = new Tiger();Tiger t = new Tiger();
Wolf w = new Wolf();Wolf w = new Wolf();
// // làmlàm saosao huấnhuấn luyệnluyện????
// //
trainPettrainPet
( t ); ( t );
class class

TigerTiger
: public : public
WildAnimalWildAnimal
{{
public:public:
void hunt();void hunt();
void void eatMeateatMeat();();
void shout(); void shout();
};};
class class WolfWolf : public : public WildAnimalWildAnimal {{
public:public:
void hunt();void hunt();
void void eatMeateatMeat();();
void shout(); void shout();
};};
13Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
HãyHãy tìmtìm cáchcách mởmở rộngrộng chươngchương trìnhtrình đểđể
cócó thểthể huấnhuấn luyệnluyện đượcđược cảcả cọpcọp vàvà sóisói
YêuYêu cầucầu: : chỉchỉ táitái sửsử dụngdụng, , khôngkhông chỉnhchỉnh
sửasửa chươngchương trìnhtrình hiệnhiện cócó
// //
trainPettrainPet
( t ); ( t );
// // trainPettrainPet( w);( w);
}}
MộtMột sốsố mẫumẫu thôngthông dụngdụng
 MẫuMẫu Adapter:Adapter:

TáiTái sửsử dụngdụng đốiđối tượngtượng sẵnsẵn cócó vàovào ngữngữ cảnhcảnh kháckhác
 SửSử dụngdụng lạilại thưthư việnviện cócó sẵnsẵn

14Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TómTóm tắttắt
 ChươngChương trìnhtrình hướnghướng đốiđối tượngtượng::

TuânTuân thủthủ baba tínhtính chấtchất hươnghương đốiđối tượngtượng
 MụcMục tiêutiêu: : ứngứng phóphó thaythay đổiđổi, , dễdễ bảobảo trìtrì, , nângnâng cấpcấp
 MẫuMẫu thiếtthiết kếkế::

BàiBài
giảigiải
mẫumẫu
chocho
vấnvấn
đềđề
thiếtthiết
kếkế
thườngthường
gặpgặp


BàiBài
giảigiải
mẫumẫu
chocho
vấnvấn
đềđề
thiếtthiết
kếkế
thườngthường
gặpgặp


 23 23 mẫumẫu củacủa Gang of Four.Gang of Four.
 MẫuMẫu thôngthông dụngdụng::

Singleton.Singleton.
 Composite.Composite.
 Adapter.Adapter.
15Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 10.1:10.1:
MộtMột cỗcỗ máymáy đượcđược cấucấu tạotạo từtừ cáccác chi chi tiếttiết máymáy. . MỗiMỗi chi chi tiếttiết máymáy đềuđều đượcđược
đánhđánh mãmã sốsố đểđể phânphân biệtbiệt vớivới nhaunhau ((víví dụdụ CT001).CT001).
CácCác chi chi tiếttiết máymáy đượcđược phânphân làmlàm 2 2 loạiloại::
Chi Chi tiếttiết đơnđơn: : khôngkhông thểthể phânphân chiachia, , cócó trọngtrọng lượnglượng vàvà giágiá thànhthành

Chi Chi
tiếttiết
phứcphức
: :
cấucấu
tạotạo
từtừ
nhữngnhững
chi chi
tiếttiết
con (con (
đơnđơn
hoặchoặc
phứcphức
).).


Chi Chi
tiếttiết
phứcphức
: :
cấucấu
tạotạo
từtừ
nhữngnhững
chi chi
tiếttiết
con (con (
đơnđơn
hoặchoặc
phứcphức
).).
TrọngTrọng lượnglượng = = trọngtrọng lượnglượng cáccác chi chi tiếttiết con + 10% con + 10% phụphụ kiệnkiện kếtkết nốinối
GiáGiá thànhthành = = giágiá thànhthành cáccác chi chi tiếttiết con + 20% con + 20% côngcông lắplắp rápráp
ViếtViết chươngchương trìnhtrình::
NhậpNhập vàovào cáccác chi chi tiếttiết máymáy cấucấu thànhthành nênnên cỗcỗ máymáy
TínhTính trọngtrọng lượnglượng cỗcỗ máymáy
TínhTính giágiá thànhthành cỗcỗ máymáy
16Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 10.2:10.2:
ĐơnĐơn vịvị lưulưu trữtrữ dữdữ liệuliệu trêntrên máymáy tínhtính làlà tậptập tin tin vàvà thưthư mụcmục
TậpTập tin tin cócó thôngthông tin tin vềvề têntên vàvà kíchkích thướcthước
ThưThư mụcmục chỉchỉ cócó têntên nhưngnhưng cócó thểthể chứachứa tậptập tin tin vàvà thưthư mụcmục con.con.
ViếtViết chươngchương trìnhtrình chocho phépphép::


TạoTạo
rara
mộtmột
câycây
thưthư
mụcmục
tậptập
tin.tin.

TạoTạo
rara
mộtmột
câycây
thưthư
mụcmục
tậptập
tin.tin.
ĐếmĐếm sốsố tậptập tin tin vàvà thưthư mụcmục cócó trongtrong mộtmột thưthư mụcmục nàonào đóđó
TínhTính kíchkích thướcthước mộtmột thưthư mụcmục
17Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 10.3:10.3:
MộtMột côngcông tyty sảnsản xuấtxuất cócó 2 2 loạiloại nhânnhân viênviên::
NhânNhân viênviên sảnsản xuấtxuất: : lươnglương = = sốsố sảnsản phẩmphẩm x 10000.x 10000.
NhânNhân viênviên vănvăn phòngphòng: : lươnglương = = mứcmức lượnglượng –– ngàyngày nghỉnghỉ x 10000.x 10000.
ThôngThông tin tin chungchung củacủa nhânnhân viênviên côngcông tyty gồmgồm::
HọHọ têntên
NămNăm vàovào làmlàm
NgoàiNgoài lươnglương đượcđược tínhtính nhưnhư trêntrên, , mỗimỗi nhânnhân viênviên còncòn đượcđược phụphụ cấpcấp mộtmột
khoảngkhoảng tiềntiền làlà 500000. 500000. VàVà khoảngkhoảng tiềntiền nàynày cứcứ tăngtăng thêmthêm 50000 50000 chocho

mỗimỗi nămnăm côngcông táctác ở ở côngcông tyty
ViếtViết chươngchương trìnhtrình::
NhậpNhập vàovào danhdanh sáchsách nhânnhân viênviên côngcông tyty
TínhTính tổngtổng sốsố tiềntiền côngcông tyty phảiphải trảtrả chocho nhânnhân viênviên mỗimỗi thángtháng
18Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 10.4:10.4:
MộtMột kháchkhách sạnsạn 5 5 saosao cócó 3 3 loạiloại phòngphòng::
PhòngPhòng loạiloại A, A, đơnđơn giágiá 300 USD / 300 USD / ngàyngày
PhòngPhòng loạiloại B, B, đơnđơn giágiá 200 USD200 USD / ngày./ ngày.
PhòngPhòng loạiloại C, C, đơnđơn giágiá 100 USD100 USD / ngày./ ngày.
TiềnTiền
thuêthuê
phòngphòng
= =
đơnđơn
giágiá
* *
sốsố
ngàyngày
thuêthuê

TiềnTiền
thuêthuê
phòngphòng
= =
đơnđơn
giágiá
* *
sốsố

ngàyngày
thuêthuê

KháchKhách ở ở phòngphòng loạiloại A A đượcđược sửsử dụngdụng mộtmột sốsố dịchdịch vụvụ củacủa kháchkhách sạnsạn. .
TiềnTiền sửsử dụngdụng dịchdịch vụvụ đượcđược cộngcộng vàovào tiềntiền thuêthuê phòngphòng củacủa kháchkhách
ĐặcĐặc biệtbiệt kháchkhách sạnsạn cócó chínhchính sáchsách giảmgiảm giágiá 10% 10% từtừ ngàyngày thứthứ 10 10 trởtrở điđi
chocho nhữngnhững kháchkhách thuêthuê phòngphòng loạiloại A A vàvà B.B.
ViếtViết chươngchương trìnhtrình::
NhậpNhập vàovào thôngthông tin tin thuêthuê phòngphòng củacủa kháchkhách
TínhTính tiềntiền thuêthuê phòngphòng chocho kháchkhách
19Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
 BàiBài tậptập 10.5:10.5:
MộtMột côngcông tyty kinhkinh doanhdoanh bấtbất độngđộng sảnsản sởsở hữuhữu N N miếngmiếng đấtđất. . MỗiMỗi miếngmiếng
đấtđất cócó nhữngnhững thôngthông tin tin sausau::
MãMã sốsố ((víví dụdụ: MD001).: MD001).
ĐơnĐơn giágiá mộtmột m2.m2.
NgoàiNgoài rara, , mỗimỗi miếngmiếng đấtđất tùytùy theotheo hìnhhình dạngdạng còncòn cócó nhữngnhững thôngthông tin tin
riêngriêng
. .
HiệnHiện
cócó
2 2
loạiloại
hìnhhình
dạngdạng
::
riêngriêng
. .
HiệnHiện

cócó
2 2
loạiloại
hìnhhình
dạngdạng
::
HìnhHình chữchữ nhậtnhật: : diệndiện tíchtích = = dàidài x x rộngrộng
HìnhHình thangthang: : diệndiện tíchtích = (= (đáyđáy lớnlớn + + đáyđáy nhỏnhỏ) * ) * chiềuchiều caocao / 2./ 2.
MiếngMiếng đấtđất hìnhhình thangthang đượcđược côngcông tyty giảmgiảm giágiá 5%.5%.
ViếtViết chươngchương trìnhtrình::
NhậpNhập danhdanh sáchsách nhữngnhững miếngmiếng đấtđất củacủa côngcông tyty
TínhTính tổngtổng diệndiện tíchtích cáccác miếngmiếng đấtđất
TínhTính tổngtổng giágiá tiềntiền củacủa cáccác miếngmiếng đấtđất
20Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×