
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 1
13.1 Tổng quát vềmẫuthiếtkế HĐT
13.2 MẫuAdapter
13.3 Mẫu Composite
13.4 MẫuProxy
13.5 Mẫu Decorator
13.6 Mẫu Facade
13.7 Mẫu Flyweight
13.8 Kếtchương
Chương 13
Các mẫuthiếtkếphụcvụtổchứccấu trúc các ₫ối
tượng (Structural Patterns)
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 2
13.1 Tổng quát vềmẫuthiếtkế HĐT
Trong việc phát triển1 phầnmềm, ta thường thựchiện các hoạt
₫ộng chứcnăng sau ₫ây :
1. Nắmbắtyêucầuphầnmềm
2. Phân tích từng chứcnăng
3. Thiếtkế
4. Hiệnthực (hay viết code)
5. Kiểmthử
Các hoạt₫ộng trên có mối quan hệphụthuộc nhau, cụthểkết
quảcủabướci làdữliệu₫ầuvàocủabướcthứi+1. Do ₫ónếu
bướcthứi có lỗi, nghĩalàkếtquảcủanókhông₫úng thì sẽkéo
theo các bướcsau₫ósẽbịlỗichodùtacốgắng thựchiện chúng
tốtcáchgì₫inữa.

Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 3
13.1 Tổng quát vềmẫuthiếtkế HĐT
Nhưvậy, lỗiởbước₫ầutiênlànguyhạinhất, kế₫ólàlỗiởbước
thức2, thứ3, ... Tuy nhiên, các bướcnắmbắtyêucầu và phân
tích chứcnăng thường chỉtạorakếtquảít, chưacó₫ộ phứctạp
cao, do ₫ótavẫncócáchkiểm soát ₫ể những kếtquảnày ít có lỗi
nhất. Còn bắt₫ầutừbướcthiếtkếtrở₫i, kếtquảsẽnhiềuvàcó
₫ộ phứctạpcaohơn nên sẽkhó kiểm soát hơn. Và nếucólỗiở
bước này thì rất nguy hạivìsẽkéo theo hoạt₫ộng hiệnthực
không có ý nghĩagìnữa.
Tóm lại, thiếtkếphầnmềmlàmộtvấn₫ề rấtkhókhăn, nhấtlàkhi
phầnmềmlớn, mối quan hệgiữa các phầntửsẽnhiềuvàphức
tạp, bảnthiếtkếthường không hiệuquảvà chứanhiềulỗikhó
biết. Hơnnữa, ta thường phảitrảgiá cao cho các lỗithiếtkếvì
chúng ảnh hưởng nặng nề₫ến các giai ₫oạn sau nhưviết code,
kiểmthử….
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 4
13.1 Tổng quát vềmẫuthiếtkế HĐT
Dùng phương pháp thiếtkếhướng ₫ốitượng sẽgiúp ta có thểthiết
kế ₫ượcphầnmềmcócấu trúc rõ ràng, mạch lạc, nhờ₫ótadễ
phát hiệnlỗinếucó, dễhiệuchỉnh, dễnâng cấptừng thành phần
(thí dụnhờtính bao ₫óng, bao gộp, thừakế, ₫axạ, tổng quát
hóa…).
Tuy nhiên việcthiếtkếphầnmềm HĐT còn phụthuộcnhiềuvào
khảnăng ngườithiếtkế, không phảiaithiếtkế₫ềutạo₫ược
những kếtquảtích cựcnhư₫ã nêu trên.

Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 5
13.1 Tổng quát vềmẫuthiếtkế HĐT
Hiệnnay, hoạt₫ộng thiếtkếphầnmềmlàphải₫ạt₫ược3 miêu
tiêu chính sau ₫ây (trong nhiềumục tiêu khác) :
Mục tiêu 1 : thiếtkế ₫ượcphầnmềmgiảiquyết₫úng các chức
năng mà user yêu cầu. Đây là mục tiêu chính yếunhất.
Mục tiêu 2 : phảihạnchế ₫ượcviệctáithiếtkếlại trong tương
lai, cho dù vì lý do gì.
Mục tiêu 3 : bảnthiếtkếhiệnhànhphảihỗtrợtốtnhấtviệctái
thiếtkếlạinếu vì lý do gì ₫óphảitáithiếtkếlạiphầnmềm.
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 6
13.1 Tổng quát vềmẫuthiếtkế HĐT
Có nhiều nguyên nhân dẫn₫ếntáithiếtkếphầnmềm (PM) :
Do PM phụthuộc vào phầncứng, hệ₫iều hành (OS) hay PM khác
: PM càng dùng trựctiếp các thông sốphầncứng hay PM liên
quan sẽphải thay ₫ổi khi các thông sốnày thay ₫ổi.
Do PM phụthuộc vào giảithuật : khi PM có nhiềugiải pháp, nhiều
mức₫ộ xửlý cho cùng mộtvấn₫ề, việc ràng buộcchặtchẽPM
vớigiải pháp cụthểsẽdẫn₫ếnkhóbổsung, thay ₫ổiPM.
Do PM chưacótínhtổng quát hóa. Thí dụtiện ích gỏphím tiếng
Việtlúc₫ầuchỉhỗtrợnhậpliệu theo 1 cách gỏcụthể, nếumuốn
PM này hỗtrợgỏnhiều cách khác, ngay cảcách do user tự₫ặtthì
phảithiếtkếlạiPM gỏphím.
Các thành phầncủa PM liên quan nhau quá chặtchẽ: hiệuchỉnh,
nâng cấp 1 thành phầnthường phải thay ₫ổicácthànhphầnphụ
thuộctrựctiếpvàgiántiếpnótheokiểu dây chuyền.

Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 7
13.1 Tổng quát vềmẫuthiếtkế HĐT
Mộtbiện pháp ₫ược₫ề xuất₫ể có những bảnthiếtkếtốt, hạnchế
₫ượcviệctáithiếtkếlạivàkhicầnthiếtkếlại, nó phảihỗtrợtốt
nhấtviệctáithiếtkếlà sửdụng lạinhững mẫuthiếtkếhướng ₫ối
tượng (Object Oriented Design Patterns), hay gọitắtlàmẫuthiết
kế(Design Patterns).
Vậymẫuthiếtkếlà gì ? Mẫuthiếtkếcó các ₫ặc₫iểmsau:
Là bảnthiếtkếcủanhững người chuyên nghiệpvànổitiếng,
₫ã₫ượcsửdụng trong các phầnmềm₫ang ₫ượcdùngphổ
biếnvà₫ượcngười dùng ₫ánh giá tốt.
Giúp giải quyết 1 trong những vấn₫ề thiếtkếthường gặptrong
các phầnmềm.
Giúp cho bảnthiếtkếphầnmềmcótínhuyển chuyểncao, dễ
hiệuchỉnh và dễnâng cấp.
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 8
13.1 Tổng quát vềmẫuthiếtkế HĐT
Vai trò củamẫuthiếtkế: mẫuthiếtkế₫óng 1 sốvai trò chính yếu
nhưsau :
Cung cấpphương pháp giải quyếtnhững vấn₫ề thựctế
thường gặp trong phầnmềmmàmọingười₫ã₫ánh giá, kiểm
nghiệmlàrấttốt.
Là biệnpháptáisửdụng tri thức các chuyên gia phầnmềm.
Hình thành kho tri thức, ngữvựng trong giao tiếpgiữanhững
người làm phầnmềm.
Giúp ta tìm hiểu₫ể nắmvững hơn₫ặc₫iểm ngôn ngữlậptrình
hướng ₫ốitượng.
Nhưvậy, nếusửdụng triệt₫ể các mẫuthiếtkếtrong việcthiếtkế
phầnmềmmới, ta sẽtiếtkiệm₫ược chi phí, thời gian và nguồnlực.
HơnnữaPM tạo₫ượcsẽcó ₫ộ tin cậy, uyển chuyểncao, dễdàng
hiệuchỉnh và nâng cấp sau này khi cầnthiết.

Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 9
13.1 Tổng quát vềmẫuthiếtkế HĐT
Phân loạicácmẫuthiếtkế: Dựa vào công dụng, ta có thểphân các
mẫuthiếtkếthành 3 nhóm chính :
Structural (nhóm mẫucấutrúc): các mẫu này cung cấpcơchế
₫ể quảnlýcấutrúcvàmối quan hệgiữa các class, thí dụ₫ể
dùng lại các class có sẵn (class thưviện, class của bên thứba
- third party,…), ₫ể tạomối ràng buộcthấpnhấtgiữa các class
(lower coupling) hay cung cấpcáccơchếthừakếkhác.
Creational (nhóm mẫuphụcvụkhởitạo₫ốitượng) : giúp khắc
phụccácvấn₫ề vềkhởitạo₫ốitượng, nhấtlà₫ốitượng lớnvà
phứctạp, hạnchếsựphụthuộccủaphầnmềm vào platform
cấpthấp.
Behavioral (nhóm mẫugiải quyết hành vi của₫ốitượng) : giúp
che dấusựhiệnthựccủa₫ốitượng, che dấugiảithuật, hỗtrợ
việc thay ₫ổicấuhình₫ốitượng một cách linh.
Khoa Khoa học& Kỹthuật Máy tính
Trường ĐH Bách Khoa Tp.HCM
© 2010
Môn : Lập trình hướng ₫ối tượng
Chương 13 : Các mẫuthiếtkếphụcvụtổchứccấutrúccác₫ốitượng
Slide 10
13.1 Tổng quát vềmẫuthiếtkế HĐT
Phân loạicácmẫuthiếtkế: Còn nếudựavàoloạiphầntử ₫ược
dùng trong mẫu, ta có thểphân các mẫuthiếtkếthành 2 nhóm
chính :
Class patterns : nhóm mẫuthiếtkếchỉsửdụng các class và
mối quan hệtĩnh giữa các class nhưthừakế, hiệnthực. Các
mối quan hệnày ₫ượcxác₫ịnh tạithời₫iểmdịch, do ₫ó class
patterns thích hợp cho thành phầnchứcnăng không cần thay
₫ổi₫ộng trong thờigianchạy.
Object patterns : nhóm mẫuthiếtkếcó dùng mối quan hệgiữa
các ₫ốitượng, mối quan hệnày rất₫ộng vì dễdàng thay ₫ổi
bấtkỳlúc nào trong lúc phầnmềmchạy

