Professional Documents
Culture Documents
Mön hoc
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT
ĐH Bach Khoa Tp.HCM Slide 1
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT
ĐH Bach Khoa Tp.HCM Slide 2
1
Tai liïu tham khao chñnh
[1] The Unified Software Development Process, Ivar Jacabson,
Grady Booch, James Rumbaugh, Addison-Wesley, 1999.
[2] Software Engineering - A practitioner's approach, R.S.
Pressman, McGraw-Hill, 1997
[3] Design Patterns, Erich Gamma, Richard Helm, Ralph
Johnson, John Vlissides, Addison-Wesley, 1998.
[4] OMG Unified Modeling Language Specification, version 1.3,
Object Management Group (www.omg.org), 1999
[5] UML Toolkit, Hans-Erik Eriksson & Magnus Penker, 1998
[6] Object-Oriented Software Engineering, A Use-Case Driven
Approach, I. Jacobson, ACM Press/Addison-Wesley, 1992
[7] Object-Oriented Analysis and Design with Applications, G.
Booch, The Benjamin Cummings Publishing Company, 1994
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT
ĐH Bach Khoa Tp.HCM Slide 3
Chương 1
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 4
2
Nöi dung
1.1 Tư lêp trònh co cếu truc ₫ḯn OOP
1.2 Đö́i tương, thuöc tñnh, tac vu.
1.3 Abstract type va class.
1.4 Tñnh bao ₫ong.
1.5 Tñnh thưa kḯ va cơ chḯ 'override'.
1.6 Tñnh bao göp.
1.7 Thöng ₫iïp, tñnh ₫a hònh va kiï̉m tra kiï̉u.
1.8 Tñnh tö̉ng quat hoa.
1.9 Tñnh vưng bï̀n.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 5
3
Tư lêp trònh co cếu truc ₫ḯn OOP
5. Dư li u cua 1 chương tr nh co th ̉ r ́t nhi ̀u va ₫a dang. Đ ̉ truy
xu ́t ₫ung 1 dư li u ta c ̀n :
- t n nh n dang.
- ki ̉u dư li u mi u ta c ́u truc dư li u.
- t ̀m vưc truy xu ́t mi u ta giơi han khach hang truy xu ́t dư
li u.
6. Chương tr nh c ̉ ₫i ̉n = giai thu t + dư li u.
7. Chương tr nh con (function, subroutine,...) cho phep c ́u truc
chương tr nh, sư dung lai code...
8. Chương tr nh c ̉ ₫i ̉n co c ́u truc ph n c ́p như sau :
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 7
local data
of function
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 8
4
Tư lêp trònh co cếu truc ₫ḯn OOP
Chương tr nh = t p cac ₫ ́i tương tương tac nhau
₫ ́i tương
(object)
local data
entry of object
local data
of operation
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 9
5
Đö́i tương (Object)
~ M h nh ₫ ́i tương quan ni m chương tr nh bao g ̀m cac ₫ ́i
tương sinh s ́ng va tương tac vơi nhau.
~ Đ ́i tương bao g ̀m :
thu c t nh (dư li u) : mang 1 gia trị nh ́t ₫ịnh tai tưng thơi ₫i ̉m.
tac vu (operation) : thưc hi n 1 c ng vi c nao ₫o. Implementation
(class)
Interface
(abstract type)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 11
6
Class (Implementation)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 13
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 14
7
Tñnh bao ₫ong (encapsulation)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 15
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 16
8
Vñ du vï̀ thưa kḯ va override - Java
class Geometry {
public Draw(Graphics g);
protected int xPos, yPos;
protected double xScale, yScale;
protected COLORREF color;
};
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 17
O1 O2 O2
O1
O3 O3
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 18
9
Vñ du vï̀ bao göp - C++
class Geometry { // abstract base class
public:
Geometry( );
~Geometry( );
virtual void Draw( Window *pWnd ) = 0; // abstract operation
protected:
int xPos, yPos;
double xScale, yScale;
COLORREF color;
};
10
Tñnh ₫a xa (Polymorphism)
~ Cung 1 l nh gơi th ng ₫i p ₫ ́n ₫ ́i tương th ng qua cung 1
tham khao nhưng ơ vị tr /thơi ₫i ̉m khac nhau co th ̉ g y ra
vi c thưc thi method khac nhau cua cac ₫ ́i tương khac
nhau.
T1 p1; // C1 va C2 la 2 class hi n thưc T1
...
p1 = New C1; // tao ₫ ́i tương C1, gan tham khao vao p1
p1.meth1(...);
...
p1 = New C2; // tao ₫ ́i tương C2, gan tham khao vao p1
p1.meth1(...);
L nh p1.meth1(...); ơ 2 vị tr khac nhau k ch hoat 2 method
khac nhau cua 2 class khac nhau.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 21
11
Tñnh tö̉ng quat hoa (Generalization)
~ Co 2 ngư nghĩa khac nhau cua t nh t ̉ng quat hoa :
class t ̉ng quat hoa cho phep san sinh tư ₫ ng cac
class b nh thương, cac class b nh thương tư no chỉ co
th ̉ tao ra ₫ ́i tương. Thương dung ngư nghĩa nay trong
giai ₫oan l p tr nh.
ngươc vơi t nh thưa k ́ : supertype/superclass la
type/class t ̉ng quat hoa cua cac con cua no. Thương
dung ngư nghĩa nay trong giai ₫oan ph n t ch/thi ́t k ́
ph ̀n m ̀m.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 23
12
Tö̉ng kḯt
~ M h nh hương ₫ ́i tương quan ni m th ́ giơi (hay chương tr nh)
bao g ̀m cac ₫ ́i tương s ́ng chung va tương tac vơi nhau.
~ Cac ₫ăc ₫i ̉m ch nh cua hương ₫ ́i tương :
Bao ₫ong : m ̃i ₫ ́i tương bao g ̀m dư li u va tac vu. Cac tac vu thi ́t
l p n n hanh vi cua ₫ ́i tương. Cac ₫ ́i tương ₫ươc ph n loai băng
class.
Cac ₫ ́i tương tương tac vơi nhau băng cach gơi th ng ₫i p.
giưa cac class/₫ ́i tương co th ̉ t ̀n tai quan h bao g p, thưa k ́, t ̉ng
quat hoa.
T nh ₫a h nh : k ́t qua cua sư ki ̉m tra ki ̉u dưa vao m ́i quan h
'conformity'.
T nh vưng b ̀n : ₫ ́i tương t ̀n tai khi con t nh ́t 1 tham khao ₫ ́n no.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 25
Chương 2
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 26
13
2.1 Ngön ngư Visual C++
1. Chỉ hö̃ trơ khai niïm class.
2. Cho phep Đa thưa kḯ.
3. Dung 'abstract class' ₫ï̉ ₫ịnh nghĩa interface.
4. Tềm vưc truy xuết cac thanh phền.
5. Đa hònh co chon loc nhơ 'virtual function'
6. Chỉ hö̃ trơ cac ₫ö́i tương tam.
7. Override method khi thưa kḯ.
8. Co thï̉ ₫ịnh nghĩa function overloaded.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 27
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 28
14
Class trưu tương (Abstract class)
3. H ̃ trơ khai ni m "abstract class" ₫ ̉ ₫ịnh nghĩa class chỉ chưa
th ng tin interface nhưng kh ng cho phep dung class nay ₫ ̉
₫ịnh nghĩa ki ̉u cho bi ́n hay thu c t nh. 1 abstract class la 1
class chưa t nh ́t 1 "pure virtual funtion".
class Geometry { // abstract class
public:
Geometry( );
~Geometry( );
virtual void Draw( Window *pWnd ) = 0; // pure virtual function
protected:
int xPos, yPos;
double xScale, yScale;
COLORREF color;
};
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 29
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 30
15
Hö̃ trơ tñnh ₫a hònh co chon loc
5. Định nghĩa 'virtual function' n ́u mu ́n ap dung t nh ₫a h nh
trong vi c gơi th ng bao y u c ̀u function nay thưc thi.
T ́t ca cac 'virtual function' ₫ươc quan ly trong 1 danh sach
"virtual function table".
₫ịa chỉ function 1
₫ịa chỉ function 2
₫ịa chỉ function 3
₫ịa chỉ function i
₫ịa chỉ function n
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 31
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 32
16
Skeleton ₫ịnh nghĩa class
class Geometry : Object { // == class Geometry : public Object {
public:
Geometry( );
~Geometry( );
virtual void Draw( Window *pWnd ); // virtual method
BOOL IsDisplayed(void);
....
protected:
COLORREF color;
....
private :
int xPos, yPos;
double xScale, yScale;
...
};
class Point : Geometry {};
class Line : Geometry { .... };
class Polygon : Geometry {....};
class Rectangle : Geometry {....};
....
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 33
InitInstance()
DoModal()
CProgramDlg
CProgramApp
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 34
17
Cếu truc 1 chương trònh SDI ₫ơn gian
InitInstance()
CMainFrame
CProgramView CProgramDoc
CSingleDocTemplate
CProgramApp
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 35
InitInstance()
CChildFrame
CProgramView CProgramDoc
CMultiDocTemplate
CProgramApp
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 36
18
2.2 Ngön ngư Java
1. Hö̃ trơ 'interface' (1 dang cua type) va class.
2. Hö̃ trơ Đơn thưa kḯ.
3. Dung 'abstract class' ₫ï̉ ₫ịnh nghĩa interface.
4. Tềm vưc truy xuết cac thanh phền.
5. Hö̃ trơ package
6. Đa hònh ₫ềy ₫u.
7. Chỉ hö̃ trơ ₫ö́i tương tam trong session JVM
8. Override function khi thưa kḯ.
9. Co thï̉ ₫ịnh nghĩa function overloaded.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 37
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 38
19
Hö̃ trơ abstract class
5. H ̃ trơ khai ni m "abstract class" ₫ ̉ ₫ịnh nghĩa class chưa
th ng tin interface va kh ng cho phep 'instanciate' ₫ ́i tương.
Ban chỉ co th ̉ dung class 'abstract class' ₫ ̉ ₫ăc ta ki ̉u cho
cac bi ́n hoăc ₫ịnh nghĩa cac class con.
class abstract Geometry { // abstract class
protected int xPos, yPos;
protected double xScale, yScale;
protected COLORREF color;
...
public abstract Draw(Graphics g); // abstract function
...
};
Abstract class co th ̉ chưa ₫ ̀y ₫u cac hi n thưc b n trong,
nhưng thương chỉ co chưa cac 'abstract function'.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 39
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 40
20
Hö̃ trơ package
7. Package la ₫ơn vị quan ly t ̀m vưc cua java, co th ̉ chưa nhi ̀u
class.
package graphics;
public class Circle extends Graphic implements Draggable {
...
}
T ́t ca moi ph ̀n tư ₫ươc ₫ịnh nghĩa trong 1 file source ₫ ̀u
thu c 1 package : t n ₫ươc qui ₫ịnh bơi phat bi ̉u package hay
la package default.
Nhi ̀u file source co th ̉ thu c cung 1package (dung cung t n
trong phat bi ̉u package).
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 41
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 42
21
Cac ₫ö́i tương ₫ï̀u 'tam thơi'
9. Cac ₫ ́i tương chỉ t ̀n tai tam thơi trong 1session chay JVM.
Ban co th ̉ tao ra cac ₫ ́i tương mơi ma kh ng c ̀n xoa no.
Đ ́i tương se t ̀n tai m t khi con tham khao ₫ ́n no. Module
Garbage Collection trong JVM se chịu trach nhi m phat hi n
₫ ́i tương 'rac' va xoa no ra khoi b nhơ JVM.
10. Co quy ̀n 'override' b ́t ky function nao cua class cha.
11. Cho phep ₫ịnh nghĩa cac ham 'overloaded' : cung t n nhưng
'signature' khac nhau.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 43
22
Thñ du vï̀ chương trònh Java
GUIClock
<<chưa>> AlarmClock
12.34.25
wakeup()
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 45
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 46
23
Thñ du vï̀ cac class Java
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 47
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 48
24
Thñ du vï̀ cac class Java
private class AlarmThread extends Thread {
int mySleeper;
AlarmThread(int sleeperIndex) {
super();
mySleeper = sleeperIndex;
}
public void run() {
try {
sleep(sleepFor[mySleeper]);
} catch (InterruptedException e) {}
wakeUpSleeper(mySleeper);
}
}
}
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 49
25
Thñ du vï̀ cac class Java
public void start() {
clock.letMeSleepFor(this, 1000);
}
public void paint(Graphics g) {
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
DateFormat dateFormatter =
DateFormat.getTimeInstance();
g.drawString(dateFormatter.format(date), 5, 10);
}
public void wakeUp() {
repaint();
clock.letMeSleepFor(this, 1000);
}
} Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 2: Th du v ̀ cac ng n ngư OOP
ĐH Bach Khoa Tp.HCM Slide 51
Chương 3
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 52
26
Tö̉ng quat vï̀ vến ₫ï̀ dịch OOP
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 53
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 54
27
Dịch 1 class
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 55
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 56
28
Dịch thuöc tñnh dư liïu (tt)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 57
• c ́u truc record ₫ươc dịch ra ma may thanh 1 vung nhơ li n tuc
co ₫ dai băng ₫ dai cua record.
- field C1 o1; C1_o1 db dup (sizeof(C1))
• truy xu ́t 1 thu c t nh dư li u trơ thanh vi c truy xu ́t nhơ
dung cach ₫ịnh ₫ịa chỉ chỉ s ́ :
- o1.i = 5; mov bx, C1_o1
mov [bx+4], 5
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 58
29
Tao bang ₫ịa chỉ cac method
pvftbl
fname faddr
class C1 : C0 { 0 "proc1" C0_proc1
int i ;
1 "proc2" C1_proc2
double d;
... 2 "proc3" C0_proc3
public :
int proc4(int i, double k); 3 "proc4" C1_proc4
void proc5 (double d); 4 "proc5" C1_proc5
...
}; 5 .... ...
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 59
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 60
30
Dịch 1 method
int C1_proc1(C1* p, int i, double d) {
int C1::proc1(int i,double k) {
C2 o2; C2 *p2;
C2 o2;
// truy xu ́t thu c t nh
C2 *p2;
p->C1_i = i; p->C1_d = d;
C1::i = i;
// goi ham
d = k;
C1_proc5(p,d);
proc5(d);
C2_proc2(&o2, i,d);
o2.proc2(i,d);
// gơi th ng bao : ki ̉m tra, load,
p2 = New(C2); 1 // anh xa bang ₫ịa chỉ method
p2->proc2(i,d);
.... 2 for (i = 0; i <C1METHCNT; i ++)
if (strcmp ("proc2", p2->
};
pvftbl[i].fname)==0) break;
3 (*pvftbl[i].faddr)(p2,i,d);
};
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 61
31
Tö́i ưu hoa code tao ra
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 63
32
Tö́i ưu hoa code tao ra (tt)
• cai gia phai tra cua vi c t ́i ưu hoa trong C++ :
— ngươi l p tr nh phai tư quy ́t ₫ịnh method nao c ̀n xư ly
theo cơ ch ́ ₫a h nh, ham nao kh ng ? N ́u sư quy ́t ₫ịnh
nay sai th se g y l ̃i khi chay, ma la ngươi th kho long
quy ́t ₫ịnh ch nh xac.
— t nh ₫a h nh chỉ ₫ung giưa cac ₫ ́i tương co m ́i quan h
con/cha, ơ ₫o thư tư cac ₫ịa chỉ method cua moi class con
trong bang ₫ịa chỉ lu n gi ́ng thư tư cac method tương ưng
cua class cha, tuy nhi n giưa 2 class b ́t ky th kh ng th ̉
₫am bao → ki ̉m tra ki ̉u trong C++ kh ng th ̉ n ng c ́p l n
băng cach dung m ́i quan h "conformity".
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 3: Nguy n tăc dịch OOP
ĐH Bach Khoa Tp.HCM Slide 65
Chương 4
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 66
33
What Is a Process?
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 67
Key concepts
When does
• Cycle product happen?
When does
• Phase, Iterations architecture happen?
34
Key concepts
time
Phase
Inception Elaboration Construction Transition
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 69
Lifecycle Phases
Inception Elaboration Construction Transition
time
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 70
35
Major Milestones
time
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 71
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 72
36
Iterations and Workflow
Phases
Core Workflows Inception Elaboration Construction Transition
Requirements
An iteration in the
elaboration phase
Analysis
Design
Implementation
Test
Analysis Analysis
Model
Implementation Impl.
Model
Each workflow is
associated with one or
more models.
Test Test
Model
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 74
37
Use Case Model
Use Case
Use Case Diagrams
Model
Class Object
Diagrams Diagrams
Analysis Component
Model
Diagrams
Deployment
Design Diagrams
Model
Sequence
Diagrams
Depl.
Model Collaboration
Diagrams
Impl. Statechart
Model Diagrams
Activity
Test
Model Diagrams
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 75
Activity
Test
Model Diagrams
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 76
38
Deployment and Implementation Model
Use Case
Use Case Diagrams
Model
Class Object
Diagrams Diagrams
Analysis Component
Model
Diagrams
Deployment
Design Diagrams
Model
Sequence
Diagrams Incl. active classes
Depl.
and components
Model Collaboration
Diagrams
Impl. Statechart
Model Diagrams
Activity
Test
Model Diagrams
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 77
Test Model
Use Case
Use Case Diagrams
Model
Class Object
Diagrams Diagrams
Analysis Component
Model
Diagrams
Deployment
Design Diagrams
Model
Sequence
Test model refers to Diagrams
Depl. all other models and
Model uses corresponding Collaboration
diagrams Diagrams
Impl. Statechart
Model Diagrams
Activity
Test
Model Diagrams
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 78
39
Overview of the Unified Process
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 79
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 80
40
Use Cases Drive Iterations
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 81
Architecture-Centric
time
Architecture
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 82
41
Overview of the UML
• The UML is a language for
— visualizing
— specifying
— constructing
— documenting
the artifacts of a software-intensive system
• There are 4 key elements :
— Modeling elements
— Relationships
— Extensibility Mechanisms
— Diagrams
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 83
Modeling Elements
• Structural elements
— class, interface, collaboration, use case,
active class, component, node
• Behavioral elements
— interaction, state machine
• Grouping elements
— package, subsystem
• Other elements
— note
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 84
42
Relationships
• Dependency
• Association
• Generalization
• Realization
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 85
Extensibility Mechanisms
• Stereotype
• Tagged value
• Constraint
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 86
43
Models, Views, and Diagrams
A model is a complete
description of a system State
from a particular State
Diagrams
Class
Diagrams
perspective Use Case Diagrams
Use Case
Diagrams State
Use Case Use Case
Diagrams State
Diagrams
Use Case Diagrams Object
Diagrams
Diagrams
Sequence Diagrams
Diagrams
Diagrams
Scenario State
Scenario
Diagrams State
Diagrams
Collaboration
Diagrams Models Component
Diagrams
Diagrams Diagrams
Scenario Component
Scenario
Diagrams
Component
Diagrams
Deployment
Statechart
Diagrams Diagrams
Diagrams Diagrams
Activity
Diagrams
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 87
Diagrams
• A diagram is a view into a model
— Presented from the aspect of a particular
stakeholder
— Provides a partial representation of the system
— Is semantically consistent with other views
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 88
44
Use Case Diagram
• Captures system functionality as seen by users
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 89
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 90
45
Class Diagram
• Captures the
vocabulary of a
system
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 91
Class Diagram
• Captures the vocabulary of a system
• Built and refined throughout development
• Purpose
— Name and model concepts in the system
— Specify collaborations
— Specify logical database schemas
• Developed by analysts, designers, and
implementers
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 92
46
Object Diagram
• Captures instances and links
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 93
Object Diagram
• Shows instances and links
• Built during analysis and design
• Purpose
— Illustrate data/object structures
— Specify snapshots
• Developed by analysts, designers, and
implementers
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 94
47
Component Diagram
• Captures the physical structure of the
implementation
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 95
Component Diagram
• Captures the physical structure of the
implementation
• Built as part of architectural specification
• Purpose
— Organize source code
— Construct an executable release
— Specify a physical database
• Developed by architects and
programmers
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 96
48
Deployment Diagram
• Captures the
topology of a
system’s
hardware
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 97
Deployment Diagram
• Captures the topology of a system’s
hardware
• Built as part of architectural specification
• Purpose
— Specify the distribution of components
— Identify performance bottlenecks
• Developed by architects, networking
engineers, and system engineers
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 98
49
Sequence Diagram
• Captures
dynamic
behavior (time-
oriented)
• Purpose
— Model flow of
control
— Illustrate typical
scenarios
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 99
Collaboration Diagram
• Captures dynamic behavior
(message-oriented)
• Purpose
– Model flow of control
– Illustrate coordination of
object structure and control
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 100
50
Statechart Diagram
• Captures dynamic behavior (event-oriented)
• Purpose
— Model object lifecycle
— Model reactive objects (user interfaces, devices,
etc.)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 101
Activity Diagram
• Captures dynamic
behavior (activity-
oriented)
• Purpose
— Model business
workflows
— Model operations
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 102
51
Architecture and the UML
Classes, interfaces,
collaborations Components
Use cases
Models
Views
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 4: UML & Qui tr nh hơp nh ́t
ĐH Bach Khoa Tp.HCM Slide 104
52
Trương Đai Hoc Bach Khoa Tp. HCM
Khoa Cöng nghï Thöng tin
Chương 5
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 105
M u c ₫ È c h c u a h o a t ₫ é n g n ă m b ă t yãu c Ý ̀ u
Muc ₫ ch cua hoat ₫ ng năm băt y u c ̀u la x y dưng m h nh h
th ́ng ma se ₫ươc x y dưng băng cach dung cac use-case. Cac ₫i ̉m
băt ₫ ̀u cho hoat ₫ ng nay kha ₫a dang :
tư m h nh nghi p vu (business model) cho cac ưng dung nghi p
vu.
tư m h nh lĩnh vưc (domain model) cho cac ưng dung nhung
(embeded).
tư ₫ăc ta y u c ̀u cua h th ́ng nhưng ₫ươc tao bơi nhom khac
va/hoăc dung cac phương phap ₫ăc ta khac (th du như hương
c ́u truc).
tư 1 ₫i ̉m nao ₫o năm giưa cac ₫i ̉m xu ́t phat tr n.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 106
53
C a c artifa ct s c Ý ̀ n ta o r a tr o n g n ă m b ă t yãu c Ý ̀ u
M h nh use-case :
actor : ngươi/h th ́ng ngoai/thi ́t bị ngoai tương tac vơi h th ́ng
use-case : cac chưc năng co nghĩa cua h th ́ng cung c ́p cho
actor.
— flow of events
— cac y u c ̀u ₫ăc bi t cua use-case
₫ăc ta ki ́n truc (view of use-case model)
bang thu t ngư
cac prototype giao di n vơi user (user-interface prototype)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 107
C a c artifa ct s c Ý ̀ n ta o r a tr o n g n ă m b ă t yãu c Ý ̀ u
1
Use-Case Model Use-Case System
* *
Use - Case
Actor
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 108
54
C a c w o r k er s tr o n g n ă m b ă t yãu c Ý ̀ u
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 109
Q u i trÉnh n ă m b ă t yãu c Ý ̀ u
Prioritize
Architect Use-Cases
Use-Case
Detail a
Specifier Use-Case
Prototype
User-Interface
Designer User-Interface
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 110
55
T É m A ct o r s & U s e c a s e s
Muc ₫ ch nh n dang actor va use-case la ₫ ̉ :
Giơi han h th ́ng vơi m i trương bao quanh no.
Phat hoa ai va cac g se tương tac vơi h th ́ng va h th ́ng cung
c ́p cac chưc năng g .
Năm băt va ₫ịnh nghĩa danh sach cac thu t ngư chung thi ́t y ́u
cho vi c tao cac ₫ăc ta v ̀ cac chưc năng cua h th ́ng.
Hoat ₫ ng nay g ̀m 4 bươc :
T m cac actor cua h th ́ng.
T m cac use cases cua h th ́ng.
Mi u ta văn tăt v ̀ tưng use-case.
Mi u ta toan th ̉ m h nh use-case.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 111
T É m A ct o r s
Vi c t m cac actor phu thu c vao ₫i ̉m xu ́t phat : n ́u xu ́t phat tư m
h nh nghi p vu hay m h nh lĩnh vưc th vi c t m actor r ́t ₫ơn gian. Con
n ́u xu ́t phat tư cac y ni m mơ h ̀ th hay tra lơi cac c u hoi sau :
Ai la ngươi sư dung chưc năng ch nh cua h th ́ng ?
Ai c ̀n sư h ̃ trơ tư h th ́ng ₫ ̉ thưc hi n c ng vi c thương nh t
cua ho ?
Ai phai thưc hi n c ng vi c bao dương, quan trị va giư cho h
th ́ng hoat ₫ ng ?
H th ́ng se ki ̉m soat thi ́t bị ph ̀n cưng nao ?
H th ́ng ₫ang x y dưng c ̀n tương tac vơi nhưng h th ́ng khac
kh ng ? H th ́ng nao ?
Ai hoăc v t th ̉ nao quan t m ₫ ́n hay chịu anh hương bơi k ́t
qua ma h th ́ng ph ̀n m ̀m tao ra ?
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 112
56
T É m U s e-C a s e s
Vi c t m cac use-case phu thu c vao ₫i ̉m xu ́t phat : n ́u xu ́t phat tư
m h nh nghi p vu hay m h nh lĩnh vưc th vi c t m use-case r ́t ₫ơn
gian. Con n ́u xu ́t phat tư cac y ni m mơ h ̀ th hay tra lơi cac c u hoi
sau :
Actor y u c ̀u chưc năng g cua h th ́ng ?
Actor c ̀n phai ₫oc, tao, xoa, sưa ₫ ̉i hoăc lưu trư th ng tin nao
cua h th ́ng ?
Actor c ̀n thi ́t phai ₫ươc canh bao v ̀ nhưng sư ki n trong h
th ́ng, hay actor c ̀n phai bao hi u cho h th ́ng v ̀ v ́n ₫ ̀ nao
₫o kh ng ?
H th ́ng co th ̉ h ̃ trơ m t s ́ c ng vi c thương nh t cua actor
nao ₫o kh ng ?
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 113
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 114
57
Cac né́i quan hã giưa cac actor va use-cases
Use-Case Z
Use-Case Y
<<extend>> Use-Case D
Use-Case A Use-Case B
<<include>>
Use-Case C
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 115
<<extend>>
<<extend>>
<<exten...
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 116
58
Cac né́i quan hã giưa cac actor va actor
Quan h giưa cac actors : t ̉ng Cus tom ers
quat hoa (generalization).
Th du Customer la actor t ̉ng
quat hoa cua cac actor Online C us tom er
Customer, Telephone Customer,
Retail Store Customer.
Lưu y actor t ̉ng quat hoa
thương kh ng co th t, no la
ph ̀n tư trưu tương. R etail S tor e O nline
Cu s tom er Cus tom er
Telephone
C us tom er
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 117
Ini tiator
Confirm Order Initiator
Initiator
Initiator
Buyer Initiator Seller
Invoice Buyer
Send Reminders
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 118
59
Lươc ₫é̀ trang thai cua use-case Pay Invoice
Browsing
schedule reject
Invoice
Scheduled
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 119
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 120
60
Săp thư tư ưu tiãn cac use-case
cac use-case t m ₫ươc kh ng phai thi ́t y ́u như nhau, do ₫o
ki ́n truc sư c ̀n săp x ́p thư tư ưu ti n chung ₫ ̉ xac ₫ịnh
use-case nao n n ₫ươc phat tri ̉n trươc, use-case nao ₫ươc
phat tri ̉n sau.
k ́t qua cua hoat ₫ ng nay la x y dưng ₫ươc goc nh n ki ́n
truc cua m h nh use-case, no ₫ươc dung ₫ ̉ hoach ₫ịnh
cac bươc lăp cung vơi cac y ́u t ́ khac như nghi p vu, kinh
t ́...
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 121
61
Đăc ta use-case gé̀m nhưng gÉ ?
n n ₫ịnh nghĩa trang thai băt ₫ ̀u.
khi nao va cach nao use-case băt ₫ ̀u.
thư tư cac hoat ₫ ng ₫ươc thưc hi n.
khi nao va cach nao use-case k ́t thuc.
n n ₫ịnh nghĩa trang thai k ́t thuc.
kh ng cho phep nhi ̀u 'path' thưc thi.
Co th ̉ mi u ta lu ̀ng thi hanh phu trong ₫ăc ta lu ̀ng cơ
ban.
Đăc ta lu ̀ng phu ₫ươc rut tr ch tư lu ̀ng cơ ban.
Tương tac giưa h th ́ng va actor va chung trao ₫ ̉i nhưng
g.
Vi c dung cac ₫ ́i tương, gia trị, tai nguy n trong h th ́ng.
Phai mi u ta ro rang h th ́ng lam g va actor lam g .
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 123
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 124
62
CÝ́u truc lai mé hÉnh Use-Case
M h nh use-case ₫ươc c ́u truc lai ₫ ̉ :
rut tr ch cac use-case t ̀ng quat va dung chung bơi cac use-
case ₫ăc bi t hơn.
rut tr ch cac use-case nhi m y va phu th m ₫ ̉ nơi r ng use-
case khac.
Trươc khi hoat ₫ ng nay xay ra :
nha ph n t ch ₫a nh n di n tương ₫ ́i ₫ ̀y ₫u cac actor va
use-case, mi u ta chung trong cac lươc ₫ ̀ ₫ ̉ c ́u thanh m
h nh use-case t ̉ng th ̉.
ngươi ₫ăc ta use-case ₫a phat tri ̉n ₫ăc ta chi ti ́t cho m ̃i
use-case.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 125
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 5: Năm băt y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 126
63
Trương Đai Hoc Bach Khoa Tp. HCM
Khoa Cöng nghï Thöng tin
Chương 6
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 127
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 128
64
Cac artifacts cÝ̀n tao ra trong phÝn tÈch yãu cÝ̀u
M h nh ph n t ch = h th ́ng ph n t ch :
cac class ph n t ch
— boundary class
— entity class.
— control class
cac d ̃n xu ́t use-case c ́p ph n t ch :
— cac lươc ₫ ̀ class ph n t ch
— cac lươc ₫ ̀ tương tac (c ng tac,...).
— 'flow of events' ơ c ́p ph n t ch
— cac y u c ̀u ₫ăc bi t cua use-case
cac package ph n t ch
₫ăc ta ki ́n truc (view of analysis model)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 129
*
1
*
Analysis Analysis Analysis Package
Model System
* * *
*
Analysis Class Use-Case Realization -
Analysis
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 130
65
Cac workers trong phÝn tÈch yãu cÝ̀u
Use-Case Component
Architect
Engineer Engineer
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 131
Architect Architectural
Analysis
Use-Case Analyze a
Engineer Use-Case
Analyze a Analyze a
Component
Engineer Class Package
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 132
66
PhÝn tÈch kiã́n truc : nhÝn dang cac package phÝn tÈch
Muc ₫ ch cua ph n t ch ki ́n truc la phat hoa m h nh ph n t ch va ki ́n
truc h th ́ng băng cach nh n dang cac package ph n t ch, cac class
ph n t ch d ̃ th ́y va cac y u c ̀u ₫ăc bi t chung cho h th ́ng.
Cac package ph n t ch giup t ̉ chưc h th ́ng thanh nhưng ₫ơn vị nho
d ̃ quan ly. M ̃i package chưa 1 s ́ use-case vơi t nh ch ́t sau :
cac use-case h ̃ trơ cho cung 1 qui tr nh nghi p vu.
cac use-case h ̃ trơ cho cung 1 actor.
cac use-case co quan h l ̃n nhau : t ̉ng quat hoa, include va
extend.
Theo thơi gian, khi vi c ph n t ch ti ́n tri ̉n, sư tinh ch ́ c ́u truc cac
package se ti ́n tri ̉n theo.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 133
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 134
67
PhÝn tÈch kiã́n truc : nhÝn dang cac class thưc thã̉ dã̃ thÝ́y
Tư cac class lĩnh vưc hay cac class nghi p vu trong bươc năm băt y u
c ̀u, ₫ ̀ nghị 1 s ́ class thưc th ̉ quan trong nh ́t (tư 10-20).
Cac class ph n t ch con lai se ₫ươc nh n dang trong hoat ₫ ng ph n
t ch use-case.
Cac y u c ̀u ₫ăc bi t cung ₫ươc nh n dang ₫ ̉ ₫ươc xư ly trong cac
bươc sau, chung g ̀m :
t nh b ̀n vưng.
sư ph n tan & ₫ ̀ng thơi.
cac t nh ch ́t an toan dư li u.
₫ ̀ khang vơi l ̃i.
quan ly giao tac.
T nh ch ́t cua m ̃i y u c ̀u ₫ăc bi t se ₫ươc c n nhăc sau trong tưng
class va tưng d ̃n xu ́t use-case.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 135
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 136
68
PhÝn tÈch use-case : nhÝn dang cac class phÝn tÈch
Trong bươc nay ta nh n dang cac class ₫i ̀u khi ̉n, bi n, thưc th ̉ c ̀n
thi ́t ₫ ̉ hi n thưc use-case va phat hoa t n, trach nhi m, thu c t nh va
cac m ́i quan h giưa chung. Dung cac hương d ̃n sau :
nh n dang cac class thưc th ̉ băng cach chu y cac th ng tin trong
₫ăc ta use-case va trong m h nh lĩnh vưc.
nh n dang class bi n cơ sơ cho m ̃i class thưc th ̉ vưa t m ₫ươc.
nh n dang class bi n trung t m cho m ̃i actor la con ngươi.
nh n dang class bi n trung t m cho m ̃i actor la h th ́ng ngoai
hay thi ́t bị I/O.
nh n dang class ₫i ̀u khi ̉n co trach nhi m xư ly trong d ̃n xu ́t
use-case.
T p hơp cac class ph n t ch tham gia vao d ̃n xu ́t use-case thanh 1
(hay nhi ̀u) lươc ₫ ̀ class.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 137
ThÈ du vã̀ lươc ₫é̀ class phÝn tÈch cho use-case Pay Invoice
Order Configmation
Order Handler
Invoice
Payment Scheduler
Payment Request
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 138
69
PhÝn tÈch use-case : miãu ta sư tương tac giưa cac ₫é́i tương phÝn tÈch
C ̀n chu y cac ₫i ̉m sau trong lươc ₫ ̀ c ng tac :
p. tư actor gơi 1 th ng bao ₫ ́n class bi n ₫ ̉ k ch hoat use-case.
m ̃i class ph n t ch n n co t nh ́t 1 ₫ ́i tương tham gia vao lươc
₫ ̀ c ng tac.
chưa v i k ́t hơp tac vu cu th ̉ cho th ng bao.
cac m ́i n ́i trong lươc ₫ ̀ c ng tac thương la 'instance' cua m ́i
quan h k ́t hơp giưa cac class tương ưng.
chưa t p trung vao thư tư thơi gian cac th ng bao.
Lươc ₫ ̀ c ng tac n n xư ly t ́t ca m ́i quan h cua use-case
₫ươc hi n thưc.
c ̀n b ̉ sung ₫ăc ta dang văn ban vao lươc ₫ ̀ c ng tac, ₫ăc ta
nay n n ₫ươc ₫ ̉ vao 'flow of events c ́p ph n t ch".
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 139
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 140
70
Lươc ₫é̀ céng tac
Cac thanh ph ̀n cua lươc ₫ ̀ c ng tac :
5: Get
: Order Confirmation
4: Get
: Order Handler
8: New
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 141
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 142
71
PhÝn tÈch class : nhÝn dang cac nghĩa vu
t ̉ hơp cac vai tro ma class ₫ong trong cac d ̃n xu ́t use-case
khac nhau se cho ta 1 s ́ nghĩa vu cua class.
nghi n cưu cac lươc ₫ ̀ class va lươc ₫ ̀ tương tac trong cac d ̃n
xu ́t use-case co class tham gia.
₫ i khi c ̀n nghi n cưu 'flow of events c ́p ph n t ch' cua d ̃n xu ́t
use-case ₫ ̉ t m th m cac nghĩa vu cac class.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 143
72
PhÝn tÈch class : nhÝn dang mé́i quan hã giưa cac class
Cac ₫ ́i tương tương tac nhau th ng qua cac lươc ₫ ̀ c ng tac. Cac m ́i
li n k ́t nay thương la 'instance' cua m ́i quan h k ́t hơp giưa cac
class. Cac m ́i li n k ́t nay cung co th ̉ am chỉ nhu c ̀u v ̀ sư g p
nhi ̀u ₫ ́i tương. M ́i quan h g p n n ₫ươc dung khi cac ₫ ́i tương
mi u ta :
cac khai ni m chưa v t ly khai ni m khac (xe chưa tai x ́ va
khach)
cac khai ni m ₫ươc x y dưng tư cac khai ni m khac (xe g ̀m cac
banh xe va ₫ ng cơ).
cac khai ni m tao thanh t p hơp y ni m nhi ̀u ₫ ́i tương (gia ₫ nh
g ̀m cha, me va con).
Đ ̉ rut tr ch cac hanh vi chung cua nhi ̀u class ph n t ch, ta co th ̉ dung
class t ̉ng quat hoa, nhưng chỉ n n ơ c ́p y ni m.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 145
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 6: Ph n t ch y u c ̀u hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 146
73
Trương Đai Hoc Bach Khoa Tp. HCM
Khoa Cöng nghï Thöng tin
Chương 7
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 147
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 148
74
Cac artifacts cÝ̀n tao ra trong thiã́t kã́
M h nh thi ́t k ́ = h th ́ng thi ́t k ́ :
cac h th ́ng con
cac class thi ́t k ́.
cac interface cua h th ́ng con va class.
cac d ̃n xu ́t use-case c ́p thi ́t k ́ :
— cac lươc ₫ ̀ class
— cac lươc ₫ ̀ tương tac (tr nh tư, trang thai,...).
— 'flow of events' ơ c ́p thi ́t k ́.
— cac y u c ̀u c ́p hi n thưc.
₫ăc ta ki ́n truc (view of design model)
M h nh b ́ tr :
₫ăc ta ki ́n truc (view of deployment model)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 149
*
1 *
Design Desgin Design
Model System Subsystem
*
* * * * *
Interface
Use-Case Realization -
Desgin Class
Design
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 150
75
Đăc ₫iã̉m cua class thiã́t kã́
Class thi ́t k ́ la sư trưu tương trưc ti ́p cua class hi n thưc :
dung ng n ngư l p tr nh ₫ ̉ mi u ta class thi ́t k ́.
thương xac ₫ịnh t ̀m vưc cua cac thanh ph ̀n.
cac m ́i quan h co y nghĩa trưc ti ́p tơi hi n thưc : t ̉ng quat hoa
→ thưa k ́, quan h g p, k ́t hơp thanh thu c t nh tương ưng.
method trong thi ́t k ́ → method trong hi n thưc.
co th ̉ delay vi c xư ly 1 s ́ y u c ̀u tơi luc hi n thưc.
class thi ́t k ́ thương co stereotype tương ưng vơi ng n ngư l p
tr nh : <<form>>, <<class module>>, <<user control>>...
class thi ́t k ́ hi n thưc (hay cung c ́p) 1 interface.
co th ̀ co 1 s ́ class active, nhưng n n t ̀n tai trong m h nh
process thay v trong m h nh thi ́t k ́.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 151
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 152
76
Qui trÉnh thiã́t kã́
Architect Architectural
Design
Use-Case Design a
Engineer Use-Case
Design a Design a
Component
Engineer Class Subsystem
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 153
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 154
77
Thiã́t kã́ kiã́n truc : nhÝn dang nut va cÝ́u hÉnh mang
C ́u h nh mang v t ly se anh hương ₫ ́n ki ́n truc ph ̀n m ̀m, g ̀m cac
kh a canh :
cac nut nao li n quan, kha năng v ̀ b nhơ va c ng su ́t t nh cua
nut.
ki ̉u n ́i k ́t va ki ̉u giao thưc nao giưa cac nut.
cac t nh ch ́t v ̀ sư n ́i k ́t va giao thưc như băng th ng, ₫ săn
sang, ch ́t lương...
c ̀n kha năng t nh dư thưa, ch ́ ₫ ₫ ̀ khang l ̃i, di cư process,
sao lưu dư li u,...
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 155
Thiã́t kã́ kiã́n truc : nhÝn dang hã thé́ng con va interface cua chung
Chia c ng vi c thi ́t k ́ tư ₫ ̀u hay khi m h nh thi ́t k ́ phat tri ̉n thanh
phưc tap c ̀n ₫ươc chia nho. M t s ́ h th ́ng con ₫ươc dung lai tư cac
project khac :
nh n dang cac h th ́ng con c ́p ưng dung
nh n dang cac h th ́ng con c ́p giưa va c ́p h th ́ng
₫ịnh nghĩa sư phu thu c giưa cac h th ́ng con.
nh n dang giao ti ́p cua cac h th ́ng con.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 156
78
Thiã́t kã́ kiã́n truc : nhÝn dang cac class thiã́t kã́ quan trong vã̀ kiã́n truc
C ̀n nh n dang cac class thi ́t k ́ quan trong v ̀ măt ki ́n truc ₫ ̉ lam
ti ̀n ₫ ̀ cho hoat ₫ ng thi ́t k ́, cac class khac se ₫ươc nh n dang trong
vi c thi ́t k ́ use-case.
nh n dang cac class thi ́t k ́ tư cac class ph n t ch tương ưng
nh n dang cac class chu ₫ ng khi chu y y u c ̀u ₫ ̀ng thơi tr n h
th ́ng :
— cac y u c ̀u v ̀ hi u qua, ₫ săn sang, throughput cua h
th ́ng
— sư ph n tan cua h th ́ng tr n cac nut.
— cac y u c ̀u khac như khơi ₫ ng, k ́t thuc, tranh deadlock,
tranh bao hoa, c ́u h nh lai cac nut, kha năng n ́i k ́t.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 157
Thiã́t kã́ kiã́n truc : nhÝn dang cac cơ chã́ thiã́t kã́ té̉ng quat
Tư cac y u c ̀u chung va ₫ăc bi t ₫a ₫ươc nh n dang trong ph ̀n ph n
t ch (trong cac class ph n t ch va cac d ̃n xu ́t use-case c ́p ph n t ch),
quy ́t ₫ịnh cach xư ly chung dưa tr n c ng ngh hi n thưc va thi ́t k ́
săn co. K ́t qua la 1 t p cac cơ ch ́ thi ́t k ́ t ̉ng quat. Cac y u c ̀u c ̀n
xư ly thương li n quan ₫ ́n :
t nh b ̀n vưng.
sư ph n tan & ₫ ̀ng thơi.
cac t nh ch ́t an toan dư li u.
₫ ̀ khang vơi l ̃i.
quan ly giao tac.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 158
79
Thiã́t kã́ Use-Case
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 159
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 160
80
Thiã́t kã́ Use-Case : miãu ta cac tương tac giưa cac object thiã́t kã́
Dung lươc ₫ ̀ tr nh tư :
lươc ₫ ̀ tr nh tư chưa cac ph ̀n tư actor, ₫ ́i tương thi ́t k ́ va
cac t.bao giưa chung.
n ́u use-case co nhi ̀u lu ̀ng ₫i ̀u khi ̉n khac nhau, n n tao
lươc ₫ ̀ tr nh tư cho tưng lu ̀ng.
n n chuy ̉n lươc ₫ ̀ c ng tac ơ c ́p ph n t ch thanh lươc ₫ ̀
tr nh tư ban ₫ ̀u, tư ₫o phat tri ̉n th m chi ti ́t.
dung 'flow of events', duy t qua cac bươc trong no ₫ ̉ quy ́t
₫ịnh cac tương tac nao c ̀n thi ́t giưa cac ₫ ́i tương thi ́t k ́
va ph ̀n tư actor.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 161
Thiã́t kã́ Use-Case : miãu ta cac tương tac giưa cac object thiã́t kã́
N n chu y cac ghi nh n sau trong vi c x y dưng lươc ₫ ̀ tr nh tư :
n n t p trung vao tr nh tư trong lươc ₫ ̀.
actor gơi th ng bao ₫ ́n 1 ₫ ́i tương thi ́t k ́ ₫ ̉ y u c ̀u thưc
hi n use-case.
m ̃i class thi ́t k ́ n n co t nh ́t 1 ₫ ́i tương tham gia vao
lươc ₫ ̀ tr nh tư.
cac message ₫ươc gơi giưa cac ₫ương ₫ơi s ́ng ₫ ́i tương,
co th ̉ co t n tam va se trơ thanh t n tac vu tương ưng.
dung label va flow of events c ́p thi ́t k ́ ₫ ̉ b ̉ sung lươc ₫ ̀
tr nh tư.
lươc ₫ ̀ tr nh tư n n xư ly t ́t ca m ́i quan h cua use-case
c ̀n hi n thưc.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 162
81
Lươc ₫é̀ céng tac
Cac thanh ph ̀n cua lươc ₫ ̀ c ng tac : (th du lươc ₫ ̀ c ng
tac cho use-case Login cua h th ́ng ₫ăng ky m n hoc h t n
chỉ th ng qua Web.
1: login(uname,pswd)
: People
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 163
: LoginForm : Database
: People
1.2: welcome
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 164
82
Lươc ₫é̀ trang thai
Cac thanh ph ̀n cua lươc ₫ ̀ trang thai : (th du lươc ₫ ̀ trang
thai cho use-case Send/Read e-mail).
hightlight
Composed focus
compose command
entry/ assign ID
exit/ fill date Read
on char/ handle character re-fwd cmd / quote / append subject
entry/ convert to rich text
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 165
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 166
83
Thiã́t kã́ class
Muc ₫ ch cua vi c thi ́t k ́ class la tao ra class thi ́t k ́ hoan
thanh vai tro cua no trong d ̃n xu ́t use-case va cac y u c ̀u phu.
Bao g ̀m vi c duy tr class thi ́t k ́ va cac kh a canh sau cua no :
cac tac vu cua class.
cac thu c t nh cua class.
cac m ́i quan h ma class tham gia.
cac method cua class (hi n thưc tac vu tương ưng).
cac trang thai cua ₫ ́i tương.
cac phu thu c tơi b ́t ky cơ ch ́ thi ́t k ́ t ̉ng quat nao.
cac y u c ̀u co li n quan ₫ ́n hi n thưc cua class.
sư hi n thưc ₫ung cua b ́t ky interface ma class phai cung
c ́p.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 167
84
Thiã́t kã́ class : NhÝn dang cac tac vu
Nh n dang cac tac vu ma class thi ́t k ́ c ̀n cung c ́p va t ̀m vưc
cua chung (dung cu phap ng n ngư l p tr nh). Cac ₫ ̀u vao cua
bươc nay la :
cac trach nhi m cua b ́t ky class ph n t ch ma d ̃n tơi class
thi ́t k ́.1 trach nhi m tương ưng 1 hay nhi ̀u tac vu, nhưng
ơ ₫ y mơi phat hoa th ng s ́ h nh thưc cac tham s ́.
cac y u c ̀u ₫ăc bi t cua b ́t ky class ph n t ch ma d ̃n tơi
class thi ́t k ́.
cac interface ma class thi ́t k ́ phai cung c ́p.
d ̃n xu ́t use-case c ́p thi ́t k ́ ma class tham gia.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 169
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 170
85
Thiã́t kã́ class : NhÝn dang cac mé́i quan hã kã́t hơp & gép
C ̀n theo cac hương d ̃n sau :
chu y cac m ́i quan h k ́t hơp & g p cua b ́t ky class ph n
t ch ma d ̃n tơi class thi ́t k ́.
tinh ch ́ s ́ ph ̀n tư tham gia, t n vai tro, t nh ch ́t cua vai
tro, class k ́t hơp, k ́t hơp n-ary.
tinh ch ́ hương cua m ́i quan h k ́t hơp tư lươc ₫ ̀ tương
tac.
Nh n dang m ́i quan h t ̉ng quat hoa dung cu phap ng n ngư
l p tr nh, n ́u ng n ngư l p tr nh kh ng h ̃ trơ, dung m ́i quan h
k ́t hơp, g p ₫ ̉ thay th ́.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 171
Thiã́t kã́ class : NhÝn dang cac mé́i quan hã kã́t hơp & gép
Method ₫ăc ta cach tac vu ₫ươc hi n thưc. Mi u ta cac method
dung ng n ngư tư nhi n hay ng n ngư pseudocode. N ́u cung ky
sư linh ki n thưc hi n 2 kh u thi ́t k ́ va hi n thưc, ng ta thương
t khi ₫ăc ta method trong giai ₫oan thi ́t k ́.
M t vai ₫ ́i tương thi ́t k ́ ₫ươc ₫i ̀u khi ̉n bơi trang thai : trang
thai xac ₫ịnh hanh vi cua no khi nh n 1 th ng bao tư ngoai →
mi u ta trang thai dung lươc ₫ ̀ trang thai.
Xư ly cac y u c ̀u ₫ăc bi t chưa ₫ươc chu y ơ cac bươc trươc.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 172
86
Thiã́t kã́ hã thé́ng con (Subsystem)
Muc ₫ ch cua vi c thi ́t k ́ h th ́ng con la :
₫am bao h th ́ng con la ₫ c l p vơi nhau nhi ̀u như co th ̉
co.
₫am bao h th ́ng con la ₫ c l p vơi interface cua no nhi ̀u
như co th ̉ co.
₫am bao h th ́ng con cung c ́p ₫ươc interfcae ₫ung.
₫am bao h th ́ng con hoan thanh muc ₫ ch, tao hi n thưc
₫ung cho cac tac vu.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 173
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 7: Thi ́t k ́ hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 174
87
Trương Đai Hoc Bach Khoa Tp. HCM
Khoa Cöng nghï Thöng tin
Chương 8
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 175
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 176
88
Cac artifacts cÝ̀n tao ra trong hiãn thưc
M h nh hi n thưc = h th ́ng hi n thưc :
cac h th ́ng con hi n thưc
cac component (executable, file, library, table, document,...)
cac interface cua h th ́ng con va component.
k ́ hoach t ch hơp cac "build"
₫ăc ta ki ́n truc (view of Implementation model)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 177
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 178
89
Build
Ph ̀n m ̀m ₫ươc hi n thưc theo tưng bươc nho d ̃ quan ly, m ̃i
bươc ta x y dưng 1 build. Build la 1 version kha thi cua h th ́ng.
Lơi ch cua cach ti ́p c n nay la :
version kha thi co th ̉ tao ra kha sơm thay v phai chơ ₫ơi
l u, vi c ki ̉m tra t ch hơp nhơ ₫o ₫ươc băt ₫ ̀u sơm ₫ ̉ co
th ̉ demo cho cac thanh vi n n i b hay cac ngươi li n
quan.
d ̃ dang phat hi n ₫i ̉m y ́u va l ̃i v m ̃i l ̀n chỉ co 1 ph ̀n
mơi r ́t nho ₫ươc th m vao.
ki ̉m tra t ch hơp thương nhanh hơn la ki ̉m tra toan b h
th ́ng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 179
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 180
90
Cac artifacts cÝ̀n tao ra trong thiã́t kã́
*
1 *
Implementation Implementation Implementation
Model System Subsystem
* * *
*
Interface
Component
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 181
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 182
91
Qui trÉnh hiãn thưc
Architect Architectural
Implementation
System Integrate
Integrator System
Implement
Component a Class Perform
Engineer Implement Unit Test
a Subsystem
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 183
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 184
92
TÈch hơp hã thé́ng
Muc ₫ ch cua t ch hơp h th ́ng la :
tao 1 k ́ hoach t ch hơp cac build mi u ta build nao trong
tưng bươc lăp va cac y u c ̀u trong m ̃i build.
t ch hơp m ̃i build trươc khi ki ̉m tra t ch hơp.
M t vai ti u chu ̉n cho 1 build k ́ ti ́p la :
build n n th m 1 s ́ chưc năng vao build trươc băng cach
hi n thưc hoan chỉnh use-case.
build kh ng n n bao g ̀m qua nhi ̀u thanh ph ̀n mơi hay
₫ươc tinh ch ́.
build n n dưa tr n build trươc theo cơ ch ́ nơi r ng tư dươi
l n.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 185
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 186
93
TÈch hơp 1 build
N ́u build ₫ươc k ́ hoach c ̉n th n th vi c t ch hơp no r ́t ₫ơn
gian :
chon version ₫ung cua cac h th ́ng hi n thưc va cac thanh
ph ̀n r ̀i dịch, li n k ́t chung ₫ ̉ tao ra build.
chu y m ́i phu thu c dang bottom-up khi dịch cac thanh
ph ̀n va h th ́ng con.
build vưa ₫ươc tao ra se ₫ươc ki ̉m tra t ch hơp va h th ́ng
n ́u no pass ₫ươc ki ̉m tra t ch hơp va la build cu ́i cua 1
bươc lăp.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 187
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 188
94
Hiãn thưc class
Muc ₫ ch cua hi n thưc class la hi n thưc tưng class thi ́t k ́
thanh file thanh ph n tương ưng, g ̀m cac c ng vi c sau :
Phat hoa 1 file thanh ph ̀n chưa source code cua class. 1
file co th ̉ chưa nhi ̀u class, nhưng theo qui ₫ịnh cua ng n
ngư l p tr nh va nguy n ly ph n chia module, co th ̉ 1 file
chỉ chưa 1 class (VC++, java).
tao source code tư class thi ́t k ́ va cac m ́i quan h ma
class tham gia.
hi n thưc cac tac vu cua class thi ́t k ́ dươi dang cac
method.
₫am bao thanh ph ̀n cung c ́p cung interface như class thi ́t
k ́.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 189
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 190
95
Kha năng mơ réng
Kha năng mơ r ng phu thu c vao cac y ́u t ́ sau :
bao ₫ong lơp con : ngay ca lơp bao ngoai cung kh ng th ́y
b n trong.
che d ́u c ́u truc dư li u : kh ng xu ́t ra b n ngoai.
tranh ₫a li n k ́t giư nhi ̀u ₫ ́i tương : tham khao cho phep
thưc hi n chưc năng tr n ₫ ́i tương tương ưng, tranh dung
no ₫ ̉ ti ́p tuc truy xu ́t gian ti ́p ₫ ́n cac ₫ ́i tương khac.
tranh dung l nh switch tr n ki ̉u ₫ ́i tương : ban th n ₫ ́i
tương tư hi ̉u m nh la ai.
ph n bi t tac vu public va private.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 191
96
Thưc hiãn kiã̉m tra ₫ơn vị (Unit test)
Muc ₫ ch la ki ̉m tra chưc năng cua tưng ₫ơn vị ₫ươc hi n thưc 1
cach ri ng le. Co 2 loai ki ̉m tra tưng ₫ơn vị :
ki ̉m tra ₫ăc ta (black-box testing) : ki ̉m tra hanh vi cua ₫ơn
vị như ₫ươc th ́y tư ngoai.
ki ̉m tra c ́u truc (white-box testing) : ki ̉m tra sư hi n thưc
b n trong ₫ơn vị.
Cung con 1 s ́ loai ki ̉m tra ₫ơn vị khac như : ki ̉m tra t nh hi u
qua, ki ̉m tra vi c dung b nhơ, ki ̉m tra tai, ki ̉m tra kha năng.
Vi c ki ̉m tra t ch hơp va ki ̉m tra h th ́ng se ₫ươc thưc hi n
trong giai ₫oan ki ̉m tra.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 193
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 194
97
Kiã̉m tra cÝ́u truc
Muc ₫ ch cua ki ̉m tra c ́u truc (white-box testing) la ki ̉m tra sư
hi n thưc b n trong ₫ơn vị :
₫am bao moi hang l nh ₫ ̀u ₫ươc ki ̉m tra ( t nh ́t la chay 1
l ̀n).
ki ̉m tra moi path c ̀n quan t m : cac path chay thương
nh ́t, cac path d ̃ g y sai, cac path t ₫ươc bi ́t v ̀ giai thu t
nh ́t, cac path co rui ro cao.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 8: Hi n thưc hương ₫ ́i tương
ĐH Bach Khoa Tp.HCM Slide 195
Chương 9
KIÏM THƯ
Cac artifacts cền tao ra
Cac workers tham gia
Qui trònh kiï̉m thư
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9: Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 196
98
Cac artifacts cÝ̀n tao ra trong kiã̉m thư
M h nh ki ̉m thư = h th ́ng ki ̉m thư :
Test case : 1 trương hơp ki ̉n thư { input, status, output}
Test procedure : cach thưc thưc hi n test case
Test component : tư ₫ ng hoa 1 hay nhi ̀u thu tuc ki ̉n thư
Plan Test : chi ́n lươc, tai nguy n, lịch
Defect : l ̃i
Evaluate Test : phu cac testcase, cac code, trang thai l ̃i
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 197
* * *
99
Cac workers trong kiã̉m thư
Perform Integration
Integration tester Test
System Perform
Tester System Test
Component Implement
Engineer Test
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 200
100
Kã́ hoach viãc kiã̉m thư
Muc ₫ ch la k ́ hoach hoa cac n ̉ lưc ki ̉m thư cho 1 bươc lăp
băng cach :
mi u ta chi ́n lươc ki ̉m thư : thưc hi n ki ̉u ki ̉m thư nao,
thưc hi n như th ́ nao, khi nao thư va ₫anh gia k ́t qua ki ̉m
thư như th ́ nao.
ươc lương cac y u c ̀u cua n ̉ lưc ki ̉m thư, như cac tai
nguy n v ̀ h th ́ng hay tai nguy n v ̀ ngươi.
lăp lịch cho n ̉ lưc ki ̉m thư.
Ky sư ki ̉m thư dung chu y ́u m h nh use-case va cac y u c ̀u
phu, cung co th ̉ dung th m m h nh thi ́t k ́.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 201
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 202
101
Thiã́t kã́ cac test case tÈch hơp
Thi ́t k ́ cac test case t ch hơp :
test case t ch hơp ₫ ̉ ki ̉m tra cac thanh ph ̀n ₫ươc hi n
thưc trong build tương tac vơi nhau, thương dưa vao d ̃n
xu ́t use-case ơ c ́p thi ́t k ́, chu y ́u la cac lươc ₫ ̀ tương
tac va tr nh tư.
₫ ̉ giam nhe n ̉ lưc thi ́t k ́ test case, ky sư ki ̉m thư c ́
găng t m ra cac test case co ph ̀n giao t ́i thi ̉u, m ̃i test
case tương ưng vơi 1 path hay 1 kịch ban ri ng trong d ̃n
xu ́t use-case.
sau khi ki ̉m thư, ky sư ki ̉m thư se so sanh cac tương tac
thưc sư giưa cac ₫ ́i tương vơi sơ ₫ ̀ tương tac trong thi ́t k ́,
n ́u gi ́ng th Ok, n ́u khac th co l ̃i.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 203
102
Thiã́t kã́ cac thu tuc kiã̉m thư
dưa vao tưng test case va ₫ ̀ nghị thu tuc ki ̉m thư cho tưng
test case.
c ́ găng dung lai cac thu tuc ki ̉m thư ₫a co nhi ̀u như co
th ̉ (co th ̉ co thay ₫ ̉i nho).
1 thu tuc ki ̉m thư co th ̉ tac ₫ ng tr n nhi ̀u test case va 1
test case co th ̉ co nhi ̀u thu tuc ki ̉m thư.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 205
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 206
103
Thưc hiãn kiã̉m thư tÈch hơp
Thưc hi n cac test case cua m ̃i build va ghi nh n k ́t qua. Qui
tr nh thưc hi n :
thưc hi n băng tay tu ̀n tư cac test case hay băng cac thanh
ph ̀n ki ̉m l ̃i tư ₫ ng.
So sanh k ́t qua co ₫ươc vơi k ́t qua ky vong.
th ng bao cac l ̃i tơi ky sư linh ki n li n quan.
th ng bao cac l ̃i tơi ky sư thi ́t k ́ test case ₫ ̉ ₫anh gia k ́t
qua ki ̉m thư t ̉ng th ̉.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 207
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 208
104
Đanh gia viãc kiã̉m thư
Ky sư ki ̉m thư quan t m 2 thươc ₫o ch nh :
mưc ₫ hoan thanh ki ̉m thư.
₫ tin c y : xu hương l ̃i phat hi n so vơi xư hương test case
thanh c ng.
Dưa tr n xu hương l ̃i, ky sư ki ̉m thư co th ̉ ₫ ̀ nghị cac c ng vi c sau
:
thưc hi n th m ki ̉m l ̃i ₫ ̉ xac ₫ịnh th m l ̃i.
nơi long ti u chu ̉n ki ̉m l ̃i n ́u muc ti u ch ́t lương qua cao so
vơi bươc lăp hi n hanh.
Tach cac b ph n co ve ₫at ₫ tin c y, con cac b ph n chưa ₫at
phai ₫ươc xem xet va ki ̉m thư lai.
Cu ́i cung l p tai li u v ̀ mưc ₫ hoan thanh ki ̉m thư, ₫ tin c y, cac
c ng vi c ₫ ̀ nghị (ta goi la ₫ăc ta ₫anh gia ki ̉m thư).
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 209
105
Tổng quát về hoạt ₫ộng debug ứng dụng
2. các lỗi run-time (giải thuật, tràn bộ nhớ,...). VC++ không thể phát hiện các
lỗi này vì chúng thuộc phạm trù ngữ nghĩa. Ứng dụng sẽ chạy theo giải
thuật ₫ược miêu tả, ta phải tự ₫ánh giá tính ₫úng/sai về giải thuật, nhưng
việc tìm lỗi giải thuật thường rất khó. Để giúp ₫ở người lập trình dễ dàng
tìm ra các lỗi giải thuật, VC++ cung cấp công cụ cho phép họ kiểm soát
₫ược qui trình chạy ứng dụng và truy xuất các biến dữ liệu của chương
trình, cộng cụ này ₫ược gọi là 'Debug'.
Ví dụ :
double a[50];
double b;
…
b = 3.1416;
a[50] = 9.0; // cũng sẽ làm b = 9.0 vì vùng nhớ của biến b cũng
// chính là vùng nhớ của phần tử a[50]
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 211
106
Tổng quát về tiện ích debug tích hợp trong VC++
Trong quá trình debug, ứng dụng sẽ ở 1 trong 2 chế ₫ộ sau :
Pause : chế ₫ộ của ứng dụng trước khi chạy hay khi dừng lại theo 1 ₫iều kiện
dừng nào ₫ó của người debug. VC++ sẽ ghi nhớ lệnh sắp thi hành trước khi
dừng (lệnh ₫ầu tiên của ứng dụng nếu nó chưa bắt ₫ầu chạy). Do tính lịch sử,
ta dùng thuật ngữ PC - program counter ₫ể nói về lệnh này. Ở chế ₫ộ này,
người debug có thể xem trạng thái của ứng dụng : giá trị của các biến dữ liệu
₫ể biết ứng dụng chạy ₫úng hay sai theo yêu cầu, lịch sử gọi hàm trong call
strack, thêm/bớt các ₫iều kiện dừng,… ₫iều khiển việc thi hành tiếp theo của
ứng dụng, lúc này ứng dụng sẽ chuyển sang chế ₫ộ Running.
Running : chế ₫ộ mà ứng dụng ₫ang chạy các lệnh của nó ₫ến khi nó gặp 1
₫iều kiện dừng ₫ã thiết lập trước, lúc này ứng dụng sẽ chuyển về chế ₫ộ
Pause.
Trong quá trình debug, ứng dụng ở chế ₫ộ Pause chủ yếu thời gian và người
debug tương tác với ứng dụng chủ yếu ở chế ₫ộ này. Mỗi khi ứng dụng ₫ược chạy
tiếp, nó chuyển qua chế ₫ộ Running, nhưng sẽ nhanh chóng chạy ₫ến lệnh dừng
và chuyển về chế ₫ộ Pause (trừ phi bị 'blocked' chờ I/O hay bị 'loop' trong các vòng
lặp vô tận).
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 213
Cửa sổ Debug
Cửa sổ Registers
Cửa sổ Memory
Cửa sổ CallStack
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT
ĐH Bach Khoa Tp.HCM Slide 214
107
Các thao tác ₫ể xem và hiệu chỉnh biến dữ liệu
Để xem nội dung của 1 biến dữ liệu, người debug có thể :
dời chuột ₫ến tên biến trong cửa sổ code, 1 cửa sổ nhỏ chứa giá trị của biến
₫ó sẽ ₫ược hiển thị ₫ể người debug xem xét.
Xem nội dung của biến trong cửa sổ “Variable”.
nhập biểu thức (thường là biến dữ liệu) vào vùng Name của cửa sổ Watch ₫ể
xem nội dung của nó.
Để hiệu chỉnh giá trị của 1 biến nào ₫ó (do ₫ã bị sai, nhưng muốn sửa lại cho ₫úng
hầu có thể kiểm thử các lệnh còn lại), người debug có thể dời cursor về cell chứa
giá trị hiện hành của biến ₫ó (trong cửa sổ Variable hay trong cửa sổ Watch rồi
hiệu chỉnh lại giá trị mới).
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 215
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 216
108
Các lệnh thiết lập ₫iều kiện dừng
Để xem/hiệu chỉnh các ₫iểm dừng (breakpoint), ta chọn menu Edit.Breakpoints ₫ể
hiển thị cửa sổ Breakpoints, từ ₫ó thực hiện chức năng mong muốn :
Xem danh sách các ₫iểm dừng hiện hành, có thể xóa hết chúng bằng cách
chọn button “Remove All”, có thể xóa từng ₫iểm dừng bằng cách chọn nó rồi
ấn button “Remove”.
Muốn thiết lập ₫iểm dừng mới, chọn tab “Location”, nhập vị trí lệnh cần dừng
và ₫iều kiện dừng mong muốn (mặc ₫ịnh là luôn luôn dừng ở vị trí qui ₫ịnh).
Muốn thiết lập ₫iểm dừng mới dựa trên 1 biến nào ₫ó bị thay ₫ổi giá trị, chọn
tab “Data”, nhập biểu thức cần tính toán (biến cần quan tâm).
Muốn thiết lập ₫iểm dừng mới dựa trên thông báo (message) của Windows,
chọn tab “Message”, chọn hàm xử lý, chọn thông báo cần dừng.
Ta có thể (và nên) thiết lập nhiều ₫iểm dừng ₫ồng thời ₫ể 'rào chắn' nhiều luồng
thi hành khác nhau của chương trình.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 217
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 218
109
Các lệnh ₫iều khiển khác
Ngoài ra khi ứng dụng ở trạng thái 'Pause', người debug có thể thực hiện
các lệnh sau :
chọn menu Debug.Stop Debugging ₫ể kết thúc việc chạy ứng dụng.
chọn menu Debug.Restart ₫ể kết thúc việc chạy ứng dụng rồi bắt ₫ầu chạy lại
từ ₫ầu.
Khi ứng dụng ở trạng thái ‘Running', người debug có thể thực hiện các lệnh sau :
chọn menu Debug.Break ₫ể dừng ₫ột ngột việc chạy ứng dụng, lệnh ₫ang
thực hiện sẽ ₫ược ₫ánh dấu ₫ể ta dễ theo dõi. Chức năng này giúp ta biết ứng
dụng ₫ang bị 'loop' ở ₫oạn lệnh nào. Nếu ứng dụng ₫ang bị 'block' chờ biến
cố I/O, sẽ không có lệnh nào ₫ược dánh dấu cả.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 9 : Ki ̉m thư
ĐH Bach Khoa Tp.HCM Slide 219
Chương 10
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 220
110
Giới thiệu
Thiết kế phần mềm là một vấn ₫ề rất khó khăn, nhất là khi phần mềm
lớn, mối quan hệ giữa các phần tử nhiều → bản thiết kế thường không
hiệu quả hoặc có lỗi.
Các lỗi thiết kế thường phải trả giá cao do ảnh hưởng ₫ến nhiều giai
₫oạn sau (viết code, kiểm tra…).
Phương pháp lập trình hướng ₫ối tượng cung cấp cơ chế ₫ể có thể xây
dựng ₫ược phần mềm dễ nâng cấp, thay ₫ổi (VD: ₫ặc tính thừa kế, ₫a
hình…). Tuy nhiên việc xây dựng những phần mềm HĐT như thế phụ
thuộc nhiều vào khả năng người thiết kế.
Mục tiêu của thiết kế: không chỉ thiết kế những phần mềm ₫úng mà còn
có thể hạn chế hoặc hỗ trợ tái thiết kế trong tương lai.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 221
111
Giới thiệu (tt)
Một biện pháp ₫ược ₫ề xuất ₫ể có những bản thiết kế tốt: sử dụng lại
những mẫu thiết kế của những chuyên gia ₫ã qua kiểm nghiệm thực tế.
Mẫu thiết kế (Design pattern) thường có ₫ặc ₫iểm:
Là những thiết kế ₫ã ₫ược sử dụng và ₫ược ₫ánh giá tốt.
Giúp giải quyết những vấn ₫ề thiết kế thường gặp.
Chú trọng việc giúp cho bản thiết kế có tính uyển chuyển, dễ nâng cấp,
thay ₫ổi.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 223
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 224
112
Phân loại software patterns
Có nhiều loại Software patterns: analysis patterns, design patterns,
organization patterns, process patterns… Bài giảng này chỉ tập trung
vào Object Oriented Design Patterns (từ ₫ây về sau gọi là Design
Patterns hay mẫu thiết kế).
Design patterns có ba nhóm chính
Structural — Cung cấp cơ chế xử lý những lớp không thể thay ₫ổi (lớp thư
viện của third party…), ràng buộc muộn (lower coupling) và cung cấp các
cơ chế khác ₫ể thừa kế.
Creational — Khắc phục các vấn ₫ề khởi tạo ₫ối tượng, hạn chế sự phụ
thuộc platform.
Behavioral — Che dấu hiện thực của ₫ối tượng, che dấu giải thuật, hỗ trợ
việc thay ₫ổi cấu hình ₫ối tượng một cách linh ₫ộng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 225
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 226
113
Khả năng ứng dụng design patterns
Tìm kiếm ₫ối tượng: việc phân chia hệ thống thành một tập hợp các ₫ối
tượng hoạt ₫ộng hiệu quả là công việc khó khăn. Design pattern giúp
₫ưa ra những ₫ối tượng thường gặp trong những trường hợp thiết kế
tương tự ₫ã gặp trước ₫ây.
Xác ₫ịnh số lượng và kích thước ₫ối tượng: trong trường hợp hệ thống
cần ràng buộc số lượng xác ₫ịnh ₫ối tượng ₫ang hoạt ₫ộng hay người
thiết kế băn khoăn về việc nên tập trung một số chức năng nào ₫ó vào
trong 1 ₫ối tượng hay tách ra thành nhiều ₫ối tượng.
Xác ₫ịnh interface và hiện thực (implementation) của ₫ối tượng. Hướng
chương trình ₫ến ₫ặc ₫iểm: program to an interface, not an
implementation.
Giúp thiết kế theo hướng tái sử dụng và linh ₫ộng bằng cách sử dụng
mối quan hệ giữa các ₫ối tượng (bao gộp, thừa kế…) một cách phù hợp
và thiết kế theo hướng tiên ₫oán trước các thay ₫ổi trong tương lai.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 227
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 228
114
Structural Patterns
Các mẫu cấu trúc (Structural Patterns) tập trung giải quyết vấn ₫ề kết
hợp các lớp và/hoặc ₫ối tượng thành một kiến trúc lớn hơn.
Các mẫu cấu trúc lớp (structural class patterns) sử dụng thừa kế ₫ể kết
hợp các lớp hay các interface. Tương tự quá trình ₫a thừa kế: một lớp
thừa kế từ nhiều lớp cha sẽ mang ₫ặc ₫iểm của tất cả các lớp cha gộp
lại.
Các mẫu cấu trúc ₫ối tượng (structural object patterns) tập trung vào
việc kết hợp các ₫ối tượng ₫ể thực hiện những chức năng nào ₫ó.
Trong các slide tiếp theo, chúng ta sẽ tìm hiểu các mẫu: Adapter,
Composite, Proxy, Decorator, Facade, Flyweight.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 229
Adapter
Mục tiêu : chuyển ₫ổi interface của một class thành một interface khác
theo yêu cầu sử dụng của Client.
Nhu cầu áp dụng : có những trường hợp chúng ta sử dụng một class
nhưng không muốn tuân theo interface của chính class ₫ó mà lại muốn
chuyển sang một interface khác. Mẫu Adapter giúp chúng ta giải quyết
vấn ₫ề này.
Ví dụ : chương trình drawing editor xử lý các ₫ối tượng ₫ồ họa Line,
Polygon, Text... thông qua interface sử dụng Shape (₫ược ₫ịnh nghĩa
như class root nếu ngôn ngữ lập trình không hỗ trợ Interface). Hiện thực
class Line, Polygon từ ₫ầu khá dễ vì ₫ơn giản nhưng hiện thực class
Text thì phức tạp hơn → nên dùng lại class sẵn có nào ₫ó (thí dụ
TextView cung cấp chức năng quản lý Text) nhưng không thể hay không
muốn thay ₫ổi class TextView → ₫ịnh nghĩa class Adapter tên là
TextShape thừa kế class Shape của ứng dụng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 230
115
Thí dụ về mẫu Adapter dùng object
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 231
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 232
116
Sơ ₫ồ cấu trúc của mẫu Adapter dùng object
Mẫu Object
Adapter xây dựng
lớp Adapter bằng
cách thừa kế
interface ₫ích và
bao gộp ₫ối tượng
của interface cần
chuyển.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 233
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 234
117
Các ngữ cảnh nên dùng mẫu Adapter
muốn dùng một lớp ₫ã có sẵn nhưng interface của nó không tương thích
với interface ₫ang sử dụng trong khi chúng ta chỉ muốn dùng interface
₫ang sử dụng.
muốn tạo ra các lớp có thể giao tiếp với các lớp khác nhưng chưa biết
trước interface của những lớp ₫ó.
(₫ối với mẫu object adapter) muốn sử dụng nhiều lớp con ₫ã có sẵn
nhưng sẽ không hiệu quả nếu phải chuyển interface (bằng mẫu Adapter)
của từng lớp con. Object Adapter sẽ chuyển interface của chỉ lớp cha.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 235
Composite
Mục tiêu : tạo quan hệ thứ bậc bao gộp giữa các ₫ối tượng. Client có thể
xem ₫ối tượng bao gộp và ₫ối tượng bị bao gộp như nhau → khả năng
tổng quát hóa trong code của client → dễ phát triển, nâng cấp, bảo trì.
Nhu cầu áp dụng : Có những trường hợp hệ thống muốn xem xét các ₫ối
tượng ₫ơn cũng như các ₫ối tượng phức (₫ối tượng chứa nhiều ₫ối tượng
₫ơn). Trong trường hợp này, hệ thống vừa phải ₫ảm bảo ₫ược tính bao
gộp lẫn tính không phân biệt giữa các phần tử. Mẫu Composite cung cấp
giải pháp cho yêu cầu này.
Ví dụ : chương trình drawing editor vừa có các ₫ối tượng ₫ơn như ký tự,
₫iểm ảnh vừa có các ₫ối tượng phức như từ (gồm nhiều ký tự), hàng
(gồm nhiều từ), nhóm các phần tử nhỏ hơn…Dưới góc ₫ộ người sử dụng,
họ thường tác ₫ộng như nhau lên một từ và một ký tự...
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 236
118
Thí dụ về mẫu Composite
Graphic
Draw()
Add(Graphic)
Remove(Graphic)
GetChild(int)
graphics
Line Text Rectangle Picture
for all g in graphics
Draw() Draw() Draw() Draw() g.Draw()
Add(Graphic)
Remove(Graphic) add g to list of graphics
GetChild(int)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 237
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 238
119
Các phần tử tham gia
Component
Khai báo interface và hiện thực một số tác vụ chung cho các ₫ối tượng của
những lớp thừa kế (gọi chung là các component)
Khai báo interface cho việc truy xuất và quản lý ₫ối tượng của các
component.
Có thể khai báo hay hiện thực các phương thức ₫ể truy xuất ₫ến ₫ối tượng
cha của những component.
Leaf : Định nghĩa tác vụ cho cho những component cơ bản.
Composite : Định nghĩa tác vụ cho những component bao gộp những
component khác.
Client : Sử dụng các component thông qua interface Component
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 239
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 240
120
Proxy
Mục tiêu : Cung cấp ₫ối tượng ₫ại diện cho một ₫ối tượng khác ₫ể hỗ trợ
hoặc kiểm soát quá trình truy xuất ₫ối tượng ₫ó. Đối tượng thay thế gọi
là Proxy.
Nhu cầu áp dụng :
Những ₫ối tượng lớn khi khởi tạo sẽ tốn nhiều tài nguyên, do ₫ó nên trì hoãn
thời ₫iểm khởi tạo thực sự các ₫ối tượng này. Trong thời gian trì hoãn, proxy
₫óng vai trò thay thế ₫ối tượng.
Chương trình muốn truy xuất một ₫ối tượng ở không gian ₫ịa chỉ khác.
Proxy thay thế ₫ối tượng ở máy remote.
Đối tượng cần ₫ược bảo mật khỏi tương tác trực tiếp với client. Client chỉ tác
₫ộng ₫ược lên Proxy, Proxy chuyển yêu cầu Client xuống ₫ối tượng thực
hiện yêu cầu.
Chương trình muốn bổ sung một số thao tác kiểm soát lên một ₫ối tượng.
Proxy ₫óng vai trò ₫ối tượng kiểm soát.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 241
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 242
121
Thí dụ về mẫu Proxy
DocumentEditor Graphic
Draw()
GetExtent()
Store()
Load()
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 243
RealSubject Proxy
// prolog code
Request() realSubject Request() realSubject->Request();
... ... // epilog code
... ...
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 244
122
Các phần tử tham gia
Proxy
giữ liên hệ ₫ến ₫ối tượng RealSubject.
có thể thay thế ₫ối tượng RealSubject.
kiểm soát quá trình truy xuất ₫ến ₫ối tượng RealSubject, có thể tạo hoặc
delete ₫ối tượng này.
Thực hiện một số hoạt ₫ộng khác tùy loại Proxy:
+ remote proxy: encode và gửi thông tin ₫ến ₫ối tượng RealSubject ở
không gian ₫ịa chỉ khác.
+ virtual proxy: chứa các thông tin về ₫ối tượng realSubject ₫ể có thể khởi
tạo lại nó sau này.
+ protection proxy: kiểm tra ₫ối tượng ₫ang thực hiện truy xuất có quyền
không…
+ smart proxy: thực hiện các thao tác bổ sung khi có truy xuất ₫ến ₫ối
tượng thực.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 245
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 246
123
Các ngữ cảnh nên dùng mẫu Proxy
Các chương trình phân bố
Các hệ thống chương trình cần phối hợp hoạt ₫ộng của nhiều ₫ối tượng.
Các hệ thống middleware.
Hệ thống cần chia tải ₫ể phục vụ ₫ược nhanh.
DBMS, OS
…
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 247
Mẫu Decorator
Mục tiêu : thêm ₫ộng trách nhiệm cho ₫ối tượng.
Nhu cầu áp dụng :
muốn thêm trách nhiệm cho 1 số ₫ối tượng chứ không phải cho toàn bộ các
₫ối tượng của class tương ứng.
Ví dụ :
Toolkit GUI cho phép user thêm border và scrollbar vào bất kỳ phần tử GUI
nào như TextView...
aBorderDecorator
aScrollDecorator
component aTextView
component
component
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 248
124
Decorator
VisualComponent
Draw()
component
TextView Decorator
Draw() Draw() component->Draw();
ScrollDecorator BorderDecorator
Draw() Draw() Decorator::Draw();
ScrollTo() DrawBorder() DrawBorder();
scrollPosition borderWidth
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 249
component
ConcreteComponent Decorator
Operation() Operation() component->Operation();
ConcreteDecoratorA ConcreteDecoratorB
Operation() Operation() Decorator::Operation();
AddedBehavior() AddedBehavior();
addedState addedState
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 250
125
Các phần tử tham gia
Component (VisualComponent)
₫ịnh nghĩa interface cho các ₫ối tượng mà ta cần thêm trách nhiệm cho
chúng 1 cách ₫ộng.
ConcreteComponent (TextView)
₫ịnh nghĩa ₫ối tượng mà ta cần thêm trách nhiệm cho chúng 1 cách ₫ộng.
Decorator
chứa tham khảo ₫ến ₫ối tượng Component và ₫ịnh nghĩa interface tương
thích với interface của Component.
ConcreteDecorator (BorderDecorator, ScrollDecorator)
thêm trách nhiệm cho thành phần gốc.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 251
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 252
126
Facade
Mục tiêu : cung cấp interface hợp nhất cho tập các interface của 1 hệ
thống con. Facade ₫ịnh nghĩa 1 interface cấp cao hơn các interface có
sẵn ₫ể làm cho hệ thống con dễ sử dụng hơn.
Nhu cầu áp dụng :
tối thiểu hóa tính "coupling" giữa các hệ thống con ₫ể tối thiểu hóa giao tiếp
giữa các hệ thống con.
Ví dụ :
hệ thống con biên dịch có nhiều class phục vụ các bước biên dịch rời ràc
như Scanner, Parser, ProgramNode, BytecodeStream,
ProgramNodeBuilder. Để dịch source code, ta có thể viết 1 ứng dụng gọi
dịch vụ của từng class ₫ể duyệt token, parser, xây dựng cây cú pháp, tạo
code ₫ối tượng... Tuy nhiên làm như trên sẽ rất khó và dễ gây ra lỗi. Cách
khắc phục là ₫ịnh nghĩa 1 class mới với giao tiếp hợp nhất tên là Compiler,
nó cung cấp 1 hàm Compile (file), ứng dụng nào cần dịch source code chỉ
cần gởi thông ₫iệp Compile ₫ến ₫ối tượng Compiler.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 253
Sc a n n Toke
Stream er n
Pa rs e r Sy mb
ol
BytecodeStream Pro g r a m N o d e Pro g r a m N
B u ff e r ode
CodeGenerator
State mentN
ode
E x p r e ssio n N
ode
S t a c k M a c hi n e C o d e G e R ISCCodeGene V a ri a bl e N o
nerator rator de
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 254
127
Sơ ₫ồ cấu trúc của mẫu Facade
Facade
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 255
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 256
128
Các ngữ cảnh nên dùng mẫu Facade
muốn cung cấp 1 giao tiếp ₫ơn giản cho 1 hệ thống con phức tạp.
muốn tạo thêm lớp ngăn cách hệ thống con với client.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 257
Mẫu Flyweight
Mục tiêu : dùng phương tiện dùng chung ₫ể quản lý hiệu quả 1 số lớn
₫ối tượng nhỏ.
Nhu cầu áp dụng :
thiết kế hướng ₫ối tượng thường có nhiều ₫iểm lợi, nhưng hiện thực ấu trĩ
bản thiết kế có thể trả giá ₫ắt về sự không hiệu quả.
thí dụ chương trình xử lý văn bản có thể dùng khái niệm ₫ối tượng ₫ể miêu
tả bất kỳ phần tử cơ bản nào : ký tự, công thức, hình, .... Tuy nhiên ký tự là
₫ối tượng rất nhỏ và xuất hiện rất nhiều lần trong văn bản, nếu mỗi lần xuất
hiện 1 ký tự, ta tạo riêng 1 ₫ối tượng mới cho ký tự ₫ó thì rất không hiệu
quả. Mẫu Flyweight rất thích hợp ₫ể giải quyết vấn ₫ề dùng chung ký tự.
Flyweight là ₫ối tượng dùng chung dựa vào khái niệm cơ bản là trạng thái
trong và trạng thái ngoài. Trạng thái trong ₫ược chứa trong flyweight, ₫ộc
lập với ngữ cảnh sử dụng (code ký tự,...). Trạng thái ngoài phụ thuộc và
thay ₫ổi theo ngữ cảnh, nó không thể ₫ược chứa trong flyweight, ngữ cảnh
cần truyền cho flyweight trạng thái ngoài khi nhờ flyweight 1 công việc nào
₫ó.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 258
129
Thí dụ về mẫu Flyweight
Glyph
Draw(Context)
Intersects(Point,Context)
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 259
if (flyweight(key) exists
return existing flyweight
else {
create new flyweight;
add it to pool of flyweights;
return the new flyweight;
}
ConcreteFlyweight UnsharedConcreteFlyweight
Operation(extrinsicState Operation(extrinsicState)
)
intrinsicState allState
Client
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 260
130
Các phần tử tham gia
Flyweight (Glyph)
₫ịnh nghĩa interface cho ₫ối tượng nhận yêu cầu và hoạt ₫ộng theo trạng
thái ngoài.
ConcreteFlyweight (Character)
hiện thực interface Flyweight thành các ₫ối tượng dùng chung.
UnsharedConcreteFlyweight (Character)
hiện thực interface Flyweight thành các ₫ối tượng không dùng chung.
FlyweightFactory
tạo và quản lý các ₫ối tượng Flyweight.
Client
chứa tham khảo ₫ến flyweight và nhờ khi cần
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 261
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 10 : Các mẫu cấu trúc
ĐH Bach Khoa Tp.HCM Slide 262
131
Trường Đại Học Bách Khoa Tp. HCM
Khoa Công nghệ Thông tin
Chương 11
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 263
Creational Patterns
Creational design patterns giúp xây dựng hệ thống linh ₫ộng về mặt khởi
tạo, quản lý và sử dụng ₫ối tượng. Chúng có thể cho phép hệ thống chủ
₫ộng trong việc xác ₫ịnh ₫ối tượng nào ₫ược tạo, ai tạo ra ₫ối tượng ₫ó,
cách thức và thời ₫iểm khởi tạo ₫ối tượng ₫ó.
Đặc ₫iểm nổi bật trong creational patterns là chương trình cần sử dụng
₫ối tượng không trực tiếp sinh ra ₫ối tượng mà nhờ các phần tử trung
gian ₫ể tăng ₫ộ linh ₫ộng.
Class creational patterns sử dụng ₫ặc ₫iểm thừa kế ₫ể thay ₫ổi class sẽ
₫ược sử dụng ₫ể sinh ra ₫ối tượng, Object creational patterns truyền quá
trình khởi tạo ₫ối tượng cho một ₫ối tượng khác.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 264
132
Ví dụ về quá trình khởi tạo ₫ối tượng
Xây dựng một mê lộ (maze) cho các trò chơi có sử dụng mê lộ.
Một mê lộ ₫ược ₫ịnh nghĩa bằng một tập hợp các phòng (room), mỗi
phòng biết các ₫ối tượng kế cận nó ở 4 hướng: bắc, nam, ₫ông, tây. Đối
tượng kế cận có thể là một phòng khác, một bức tường (wall) hay một
cánh cửa (door) sang phòng khác.
Các hướng có thể ₫ược hiện thực bởi các hằng số hay kiểu enum trong
C++:
enum Direction {North , South , East , West }
Lược ₫ồ lớp của hệ thống như sau:
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 265
Enter()
Enter() Enter()
Maze SetSide() Enter()
rooms GetSide()
AddRoom()
RoomNo() isOpen
roomNumber
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 266
133
Ví dụ về quá trình khởi tạo ₫ối tượng
MapSite là lớp cha trừu tượng của tất cả các phần tử trong mê lộ.
MapSite chỉ có một phương thức Enter ₫ể chỉ thao tác ₫i vào một phần
tử (room, door, wall). Tùy ₫ặc ₫iểm của mình, các phần tử sẽ phải
override phương thức này.
Lớp Room có thể ₫ược hiện thực trong C++ như sau :
class Room : public MapSite {
public:
Room (int roomNo);
MapSite* GetSide (Direction) const;
void SetSide(Direction, MapSite*);
virtual void Enter();
private:
MapSite m_sides[4];
int m_roomNumber;
};
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 267
134
Ví dụ về quá trình khởi tạo ₫ối tượng
Lớp Maze có thể hiện thực trong C++ như sau :
class Maze {
public:
Maze();
void AddRoom(Room*);
Room* RoomNo(int) const;
private:
//…
};
Lớp MazeGame tích hợp những lớp ₫ã giới thiệu ₫ể tạo thành một game
có sử dụng mê lộ. Lớp này phải tạo ra một mê lộ (Maze), method
CreateMaze tạo một mê lộ ₫ơn giản gồm 2 phòng có thể ₫ược ₫ịnh
nghĩa trong C++ như sau :
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 269
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 270
135
Giải pháp khắc phục
Truyền cho phương thức CreateMaze một ₫ối tượng có khả năng sinh ra room, wall,
door theo ₫ặc thù của ứng dụng. Khi ₫ó nếu muốn thay ₫ổi maze thì chỉ cần truyền
một ₫ối tượng khác. Đây là hướng tiếp cận của mẫu Abstract Factory.
Code trong CreateMaze gọi các phương thức thông thường (hoặc virtual) ₫ể khởi
tạo ₫ối tượng thay vì gọi constructor của lớp tương ứng. Khi ₫ó nếu muốn thay ₫ổi
lớp sẽ tạo ₫ối tượng thì chỉ cần tạo một subclass thừa kế MazeGame, trong ₫ó
override các phương thức khởi tạo ₫ối tượng ở trên. Đây là hướng tiếp cận của mẫu
Factory Method.
CreateMaze ₫ược truyền các ₫ối tượng room, door, wall có khả năng sinh ra ₫ối
tượng tương tự chúng (clone). Khi ₫ó nếu muốn thay ₫ổi ₫ối tượng trong
CreateMaze, ta chỉ cần truyền vào các ₫ối tượng khác. Các ₫ối tượng truyền cho
CreateMaze gọi là Prototype và hướng tiếp cận này là của mẫu Prototype.
CreateMaze ₫ược truyền 1 ₫ối tượng mà có thể tạo mêlộ mới dùng các tác vụ thêm
phòng, cửa và tường vào mêlộ mà nó xây dựng rồi ta dùng thừa kế ₫ể thay ₫ổi các
phần của mêlộ hay cách thức xây dựng mêlộ. Đây là hướng tiếp cận của mẫu
Builder.
Trong các slide sau chúng ta sẽ tìm hiểu các mẫu phần mềm này.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 271
Abstract Factory
Mục tiêu : cung cấp interface cho việc khởi tạo ₫ối tượng mà không cần
xác ₫ịnh trước lớp cụ thể (concrete) tương ứng.
Nhu cầu áp dụng : có những trường hợp khi xây dựng chương trình
chúng ta chưa biết chính xác hay chưa muốn ràng buộc lớp nào sẽ ₫ược
sử dụng ₫ể sinh ra ₫ối tượng, chẳng hạn:
chương trình có khả năng chạy trên nhiều platform. Mỗi platform có một họ
các lớp giao diện, việc sử dụng cụ thể họ lớp giao diện nào chỉ biết khi
chương trình chạy.
framework cần khởi tạo ₫ối tượng nhưng chưa biết trước lớp cụ thể sẽ sử
dụng.
Những chương trình như vậy thường có một số yêu cầu ₫ối với người thiết kế:
code chương trình phải có khả năng tương tác tổng quát lên các ₫ối tượng
sẽ ₫ược sinh ra.
dễ chuyển ₫ổi giữa các họ ₫ối tượng.
dễ bổ sung các họ ₫ối tượng mới.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 272
136
Ví dụ về quá trình khởi tạo ₫ối tượng
Giải pháp ₫ề nghị:
Cung cấp interface cho các ₫ối tượng dự ₫ịnh sẽ ₫ược khởi tạo khi hệ thống
chạy, gọi là AbstractProduct.
Cung cấp interface ₫ể khởi tạo các ₫ối tượng kiểu AbstractProduct, gọi là
AbstractFactory.
Để khởi tạo một ₫ối tượng cụ thể, cần xây dựng 2 lớp concrete: một lớp hiện
thực interface AbstractFactory ₫ể khởi tạo ₫ối tượng từ lớp hiện thực
AbstractProduct.
Hướng tiếp cận trên là của mẫu Abstract Factory.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 273
CreateScrollbar() Window
CreateWindow()
PMWindow MotifWindow
MotifWidgetFactory PMWidgetFactory
PMScrollbar MotifScrollbar
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 274
137
Sơ ₫ồ cấu trúc của mẫu AbstractFactory
AbstractFactory Client
CreateProductA() AbstractProductA
CreateProductB()
ProductA2 ProductA1
ConcreteFactory1 ConcreteFactory2
ProductB2 ProductB1
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 275
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 276
138
Các phần tử tham gia
Client : chương trình cần tạo các ₫ối tượng. Client chỉ sử dụng các
interface AbstractFactory và AbstractProduct.
Quá trình tương tác giữa các phần tử :
Tại thời ₫iểm compile, Client nắm giữ pointer ₫ến phần tử của lớp
AbstractFactory (giả sử là _factory).
Tại thời ₫iểm run-time, Client biết cần sử dụng họ ₫ối tượng
ConcreteProduct nào sẽ khởi tạo ₫ối tượng ConcreteFactory tương
ứng và gán vào _factory. Client thông qua interface AbstractFactory
₫ể yêu cầu ₫ối tượng ConcreteFactory sinh ra các ₫ối tượng mong
muốn.
Client dựa vào interface của các ₫ối tượng ConcreteProduct ₫ược
khai báo trong AbstractProduct ₫ể sử dụng các ₫ối tượng này.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 277
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 278
139
Ví dụ áp dụng
Lớp MazeFactory (tương ứng phần tử Abstract Factory) cung cấp
phương thức mặc ₫ịnh ₫ể khởi tạo các ₫ối tượng maze, wall, room, door.
Các lớp con thừa kế có thể override các phương thức này ₫ể sinh ra các
maze, wall, room, door khác.
MazeFactory không sử dụng Constructor mà cung cấp các method
Make ₫ể tạo ra các ₫ối tượng.
MazeFactory có thể ₫ược hiện thực trong C++ như sau:
class MazeFactory {
public: MazeFactory();
virtual Maze* MakeMaze() const { return new Maze;}
virtual Wall* MakeWall() const { return new Wall;}
virtual Room* MakeRoom(int n) const {
return new Room(n); }
virtual Door* MakeDoor(Room* r1, Room* r2) const {
return new Door(r1, r2);
}
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 279
Ví dụ áp dụng
Lớp MazeGame ₫óng vai trò là Client sử dụng mẫu Abstract Factory.
Phương thức CreateMaze ₫ược truyền một ₫ối tượng kiểu MazeFactory,
CreateMaze sử dụng ₫ối tượng này ₫ể sinh ra các ₫ối tượng cần thiết.
CreateMaze có thể ₫ược hiện thực trong C++ như sau:
Maze* MazeGame::CreateMaze (MazeFactory& factory) {
Maze* aMaze = factory.MakeMaze();
Room* r1 = factory.MakeRoom (1);
Room* r2 = factory.MakeRoom (2);
Door* aDoor = factory.MakeDoor(r1, r2);
aMaze->AddRoom(r1);
aMaze->AddRoom(r2);
r1->SetSide(North, factory.MakeWall());
…
return aMaze;
}
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 280
140
Ví dụ áp dụng
Để thay ₫ổi ₫ối tượng tạo ra, ta chỉ việc truyền một ₫ối tượng factory
khác, miễn là ₫ối tượng này thuộc kiểu MazeFactory.
VD ₫ể tạo một maze mà trong room có thể có bom, ta ₫ịnh nghĩa lớp
RoomWithABomb thừa kế lớp Room và lớp BombedMazeFactory thừa
kế lớp MazeFactory trong ₫ó override phương thức MakeRoom như sau:
Room* BombedMazeFactory::MakeRoom(int n) const {
return new RoomWithABomb(n);
}
Trong chương trình Game chỉ cần thực hiện ₫oạn code:
MazeGame game;
BombedMazeFactory factory;
game.CreateMaze(factory);
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 281
Ví dụ áp dụng
Khi áp dụng mẫu Abstract Factory, chương trình có một số ₫ặc ₫iểm :
có thể thích ứng với nhiều kiểu maze khác nhau.
việc thêm một kiểu maze chỉ là thêm một họ các lớp, không ảnh hưởng ₫ến
code chương trình ₫ã có.
chương trình nhất quán trong việc sử dụng một họ các phần tử của cùng
một kiểu maze, không xảy ra trường hợp 2 phần tử của 2 họ khác nhau
cùng tồn tại trong code của client.
việc bổ sung một loại phần tử vào maze sẽ gặp khó khăn vì phải bổ sung
vào lớp MazeFactory, do ₫ó sẽ ảnh hưởng ₫ến hầu như tất cả các lớp khác.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 282
141
Factory Method
Mục tiêu : ₫ịnh nghĩa interface ₫ể sinh ra ₫ối tượng nhưng ₫ể cho lớp
con quyết ₫ịnh lớp nào ₫ược dùng ₫ể sinh ra ₫ối tượng. Factory Method
cho phép một lớp chuyển quá trình khởi tạo ₫ối tượng cho lớp con.
Nhu cầu áp dụng :
Tương tự nhu cầu áp dụng ở mẫu Abstract Factory: cần phải cung
cấp giải pháp tạo ₫ối tượng nhưng chưa biết ₫ược lớp cụ thể dùng ₫ể
sinh ra ₫ối tượng.
Hướng giải quyết theo mẫu Factory Method: thay vì tạo lớp Abstract
Factory ₫ể tạo các ₫ối tượng như trong mẫu Abstract Factory,
Factory Method tạo một phương thức ảo, các lớp con sẽ override
phương thức này ₫ể khởi tạo ₫ối tượng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 283
Sơ ₫ồ thí dụ
docs
Document Application
MyDocument MyApplication
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 284
142
Sơ ₫ồ cấu trúc của mẫu Factory method
docs
Product Creator
FactoryMethod() ...
AnOperation() Product = FactoryMethod();
...
ConcreteProduct ConcreteCreator
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 285
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 286
143
Các ngữ cảnh nên dùng mẫu Factory Method
một lớp không biết trước lớp của ₫ối tượng mà nó cần khởi tạo.
một lớp muốn lớp con của mình thay ₫ổi hay xác ₫ịnh lớp của ₫ối tượng
cần khởi tạo.
một lớp muốn chuyển quá trình hiện thực một nhiệm vụ nào ₫ó cho một
trong các lớp con nhưng cho phép ứng dụng xác ₫ịnh lớp con cụ thể.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 287
Ví dụ áp dụng
Lớp MazeGame ₫óng vai trò là Creator, cung cấp các factory method ₫ể
tạo các ₫ối tượng:
class MazeGame {
public: Maze* CreateMaze();
// factory methods:
virtual Maze* MakeMaze() const { return new Maze; }
virtual Room* MakeRoom(int n) const { return new Room(n); }
virtual Wall* MakeWall() const { return new Wall; }
virtual Door* MakeDoor(Room* r1, Room* r2) const { return
new Door(r1, r2); }
};
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 288
144
Ví dụ áp dụng
Method CreateMaze có thể ₫ược ₫ịnh nghĩa lại như sau:
Maze* MazeGame::CreateMaze () {
Maze* aMaze = MakeMaze();
Room* r1 = MakeRoom(1); Room* r2 = MakeRoom(2);
Door* theDoor = MakeDoor(r1, r2);
aMaze->AddRoom(r1);
aMaze->AddRoom(r2);
r1->SetSide(North, MakeWall());
//…….
r2->SetSide(North, MakeWall());
//…….
return aMaze;
}
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 289
Ví dụ áp dụng
Các maze game khác muốn thay ₫ổi phần tử trong game thì:
Định nghĩa các lớp thừa kế từ các lớp thể hiện các phần tử tương ứng
VD: RoomWithABomb thừa kế Room.
Định nghĩa lớp thừa kế lớp MazeGame, trong lớp này override factory
method tạo ra ₫ối tượng muốn thay ₫ổi.
VD:
class BombedMazeGame : public MazeGame {
public: BombedMazeGame();
virtual Wall* MakeWall() const { return new BombedWall; }
virtual Room* MakeRoom(int n) const
{ return new RoomWithABomb(n); }
};
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 290
145
Prototype
Mục tiêu : giúp khởi tạo ₫ối tượng bằng cách copy một ₫ối tượng khác
(prototype) ₫ang tồn tại.
Nhu cầu áp dụng :
Muốn tạo ₫ối tượng nhưng không biết hoặc không muốn sử dụng lớp
Concrete. Ví dụ Editor Framework cho phép ứng dụng bổ sung các
control vào toolbox nhưng chưa biết lớp cụ thể sẽ sinh ra Control.
Giải pháp ₫ề nghị :
+ Framework cung cấp interface ₫ể copy một ₫ối tượng, interface
này sẽ ₫ược các lớp concrete cần sinh ra ₫ối tượng implement.
+ Ứng dụng phát triển từ Framework hay component tạo ra ₫ối
tượng mong muốn, sau ₫ó mỗi lần tạo thêm một ₫ối tượng bằng
cách gọi hàm copy ₫ối tượng này.
Đây chính là phương pháp của mẫu Prototype.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 291
Ví dụ về mẫu Prototype
Tool MusicsalNote
Manipulate()
Draw(Position)
Clone()
prototype
RotateTool GraphicTool
Staff MusicalNote
Manipulate() Manipulate()
Draw(Position)
Clone()
WholeNote HalfNote
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 292
146
Sơ ₫ồ cấu trúc của mẫu Prototype
prototype
Client Prototype
Operation() Clone()
ConcretePrototype1 ConcretePrototype2
p = protoype->Clone();
Clone() Clone()
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 293
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 294
147
Một số vấn ₫ề hiện thực
Class có thể cung cấp phương thức ₫ể set giá trị cho ₫ối tượng sau
khi ₫ược tạo ra bằng cách copy từ prototype.
Nếu số lượng prototype trong ứng dụng không cố ₫ịnh, nên quản
lý chúng bằng một ₫ối tượng prototype manager. Đối tượng này
chứa các tham khảo ₫ến các prototype và các key tương ứng ₫ể
truy xuất chúng.
Việc hiện thực phương thức clone phụ thuộc nhiều vào ngôn ngữ
lập trình. Có thể copy hoàn toàn (deep copy) hay share biến
(shallow copy).
Java, SmallTalk, Eiffel cung cấp phương thức clone(). C++ có
phương thức copy.
Tất cả những phương thức trên ₫ều mặc ₫ịnh thực hiện shallow
copy.
Khi hiện thực deep copy, ₫ể ý vấn ₫ề tham khảo vòng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 295
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 296
148
Ví dụ áp dụng
Chương trình này phát triển từ ví dụ áp dụng mẫu Abstract Factory.
Định nghĩa lớp MazePrototypeFactory thừa kế lớp MazeFactory, ₫ối
tượng lớp này ₫ược cung cấp các prototype ₫ể tạo ra các ₫ối tượng cùng
loại. MazePrototypeFactory có thể ₫ược hiện thực trong C++ như sau:
class MazePrototypeFactory : public MazeFactory{
public:
MazePrototypeFactory(Maze*, Wall*, Room*, Door*);
virtual Maze* MakeMaze() const;
...// Các method khởi tạo các phần tử của maze
private:
Maze* _mazePrototype;
Room* _roomPrototype;
Wall* _wallPrototype;
Door* _doorPrototype;
}
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 297
Ví dụ áp dụng
Constructor của lớp MazePrototypeFactory chỉ khởi tạo các prototype
với các ₫ối tượng tương ứng ₫ược cung cấp từ ứng dụng:
MazePrototypeFactory::MazePrototypeFactory (
Maze* m, Wall* w, Room* r, Door* d ) {
_mazePrototype = m;
_wallPrototype = w;
_roomPrototype = r;
_doorPrototype = d;
}
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 298
149
Ví dụ áp dụng
Các lớp Door, Wall, Room ₫ều phải hiện thực phương thức clone thừa kế
từ lớp MapSite và các phương thức set giá trị nếu cần:
class Door : public MapSite {
public: Door();
Door(const Door&);
virtual void Initialize(Room*, Room*);
virtual Door* Clone() const;
private: Room* _room1; Room* _room2;
};
Door::Door (const Door& other)
{ _room1 = other._room1; _room2 = other._room2; }
void Door::Initialize (Room* r1, Room* r2)
{ _room1 = r1; _room2 = r2; }
Door* Door::Clone () const { return new Door(*this); }
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 299
Ví dụ áp dụng
Các phương thức khởi tạo wall, room, door ₫ều clone prototype có sẵn
và set các giá trị nếu cần:
Wall* MazePrototypeFactory::MakeWall () const {
return _wallPrototype->Clone();
}
Door* MazePrototypeFactory::MakeDoor (Room* r1, Room *r2) const {
Door* door = _doorPrototype->Clone();
door->Initialize(r1, r2);
return door;
}
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 300
150
Ví dụ áp dụng
Để thay ₫ổi maze cần tạo, ta chỉ cần cung cấp các factory cho
constructor của MazePrototypeFactory :
MazeGame game;
MazePrototypeFactory bombedMazeFactory( new Maze, new
BombedWall, new RoomWithABomb, new Door );
Maze* maze = game.CreateMaze(bombedMazeFactory);
Khi bổ sung phần tử sản phẩm mới (VD: roomWithABomb), không cần
phải cung cấp lớp Factory (BombedMazeFactory) ₫ể sinh ra các sản
phẩm này mà chỉ cần cung cấp prototype của sản phẩm ₫ó.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 301
Mẫu Builder
Mục tiêu : tách việc xây dựng ₫ối tượng phức tạp khỏi việc miêu tả nó
sao cho cùng 1 qui trình xây dựng có thể tạo ra nhiều sự miêu tả khác
nhau.
Nhu cầu áp dụng :
Trình ₫ọc file RTF cần ₫ổi file RTF sang 1 số dạng khác chưa biết
trước như text thô, Tex,... hay sang 1 ₫iều khiển soạn thảo text.
Giải pháp ₫ề nghị :
+ ₫ịnh nghĩa class TextConverter chứa các tác vụ chuyển ₫ổi token
cơ bản.
+ Mỗi ₫ịnh dạng cần chuyển tới sẽ ₫ược ₫ảm trách bởi 1 subclass
của class TextConverter.
Đây chính là phương pháp của mẫu Builder.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 302
151
Ví dụ về mẫu Builder
builder
RTFReader TextConverter
ParseRTF() ConvertCharacter()
builders ConvertFont()
ConvertParagraph()
while (t=getnexttoken()) {
switch (t.type) {
ASCIIConverter TeXConverter TextWidgetConverter
case CHAR :
builder->ConvertCharacter(t.Char);
break; ConvertCharacter() ConvertCharacter() ConvertCharacter()
case FONT : GetASCIIText() ConvertFont() ConvertFont()
builder->ConvertFont(t.Font); ConvertParagraph() ConvertParagraph()
break; GetTeXText() GetTextWidget()
case PARA :
builder->ConvertParagraph();
}
}
ASCIIText TeXText TextWidget
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 303
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 304
152
Các phần tử tham gia
Director (RTFReader) : xây dựng ₫ối tượng dùng interface Builder.
Builder (TextConverter) : cung cấp interface ₫ể xây dựng các phần của
₫ối tượng Product.
ConcreteBuilder (ASCIIConverter, TeXConverter) :
xây dựng và lắp ghép các phần của Product bằng cách hiện thực
interface của class Builder.
₫ịnh nghĩa và ghi giữ ₫ối tượng mà nó tạo ra.
cung cấp interface ₫ể nhận ₫ối tượng.
Product (ASCIIText, TeXText) :
miêu tả ₫ối tượng phức tạp cần xây dựng.
bao gồm các class ₫ịnh nghĩa các thành phần bao gồm interface
phục vụ việc lắp ghép các thành phần thành kết quả cuối cùng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 305
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 306
153
Ví dụ áp dụng
Ta xây dựng interface của builder bằng class MazeBuilder sau :
class MazeBuilder {
protected:
MazeBuilder();
public:
// methods:
virtual void BuildMaze() { };
virtual void BuildRoom (int n) { };
virtual void BuildDoor (int roomFrom, int RoomTo) { } ;
virtual Maze* GetMaze() { return 0; };
};
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 307
Ví dụ áp dụng
Ta hiệu chỉnh hàm CreateMaze() của class MazeGame thành :
Maze* Mazegame::CreateMaze (MazeBuilder& builder) {
builder.BuildMaze();
builder.BuildRoom(1);
builder.BuildRoom(2);
builder.BuildDoor(1,2);
return builder.GetMaze();
}
Ta có thể ₫ịnh nghĩa các subclass của class MazeBuilder ₫ể tạo ra các
Maze khác nhau và tạo ₫ối tượng của subclass này rồi truyền nó như là
tham số của hàm CreateMaze() ₫ể tạo các Maze khác nhau.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 308
154
Singleton
Mục tiêu : ₫ảm bảo mỗi class chỉ có 1 instance và cung cấp 1 ₫iểm truy
xuất toàn cục ₫ến ₫ối tượng.
Nhu cầu áp dụng :
chỉ 1 "printer spooler" ₫ể quản lý các máy in.
chỉ 1 trình quản lý cho các file của hệ thống file.
chỉ 1 trình quản lý windows cho các cửa sổ trên màn desktop...
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 309
Singleton
static uniqueInstance
singletonData
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 310
155
Các phần tử tham gia
Singleton :
₫ịnh nghĩa tác vụ Instance giúp client truy xuất instance duy nhất của class.
Instance() là tác vụ chung của class (hàm static trong C++).
chịu trách nhiệm về việc tạo instance duy nhất cho class.
Cộng tác giữa các ₫ối tượng : các clients truy xuất instance của class
Singleton thông qua việc gọi tác vụ Instance() của class.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 311
Chương 12
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 312
156
Behavioral Patterns
Tập trung vào giải thuật và sự phân bố công việc giữa các object
Class patterns sử dụng thừa kế ₫ể chuyển giao thao tác giữa các class.
Object patterns sử dụng tính ₫a hình và bao gộp ₫ể truyền thao tác từ
₫ối tượng này sang ₫ối tượng khác.
Các slide sau sẽ giới thiệu các pattern Chain of Responsibility, Template
Method (class pattern), Strategy (object pattern) và Command (object
Pattern),..
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 313
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 314
157
Thí dụ về mẫu Chain of Responsibility
Thí dụ khi ấn phải chuột vào button OK thì trình trợ giúp của OKButton
sẽ chạy, nó sẽ hoặc hiển thị Help hoặc chuyển ₫iều khiển cho trình trợ
giúp của Dialog, trình trợ giúp của Dialog có thể chuyển ₫iều khiển ₫ến
Application...
aSavingDialog
handler
anApplication
aPrintButton
handler
handler
aPrintDialog
handler
anOKButton
handler
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 315
handler
HelpHandler
HandleHelp() handler->HandleHelp();
Application Widget
Dialog Button
if (can handle)
ShowHelp();
HandleHelp() else
ShowHelp() Handler::HandleHelp();
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 316
158
Lược ₫ồ cấu trúc của mẫu Chain of Responsibility
successor
Client Handler
HandleRequest()
ConcreteHandler1 ConcreteHandler2
HandleRequest() HandleRequest()
aClient
aConcreteHandler
aHandler aConcreteHandler
successor
successor
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 317
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 318
159
Các ngữ cảnh nên dùng mẫu Chain of Responsibility
Thường áp dụng mẫu Chain of Responsibility trong các trường hợp sau:
hơn 1 ₫ối tượng có thể xử lý request nhưng ₫ối tượng nào sẽ xử lý thì chưa
biết trước. Đối tượng xử lý sẽ ₫ược xác ₫ịnh ₫ộng.
bạn muốn gởi request ₫ến 1 ₫ối tượng xử lý nào ₫ó nhưng không xác ₫ịnh
rõ ràng.
muốn xác ₫ịnh tập các ₫ối tượng xử lý 1 request nào ₫ó 1 cách ₫ộng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 319
Template Method
Mục tiêu : ₫ịnh nghĩa bộ khung giải thuật trong một tác vụ nhưng cho
phép các class con hiện thực một số phần của tác vụ ₫ó.
Nhu cầu áp dụng : trong trường hợp Windows cho phép người lập trình
Hook vào hệ thống, Windows ₫ã ₫ể sẵn những entry mà người lập trình
có thể chèn thêm phần xử lý của mình. Người lập trình không thể thay
thế trình tự quá trình xử lý của Windows. Phương pháp lập trình hướng
₫ối tượng có thể cung cấp hướng giải quyết những vấn ₫ề này như sau:
Một lớp ₫ịnh nghĩa quá trình xử lý bao gồm nhiều tác vụ nhỏ hơn, các tác vụ
nhỏ hơn có thể cho lớp con override chính là các ₫iểm hook.
Các lớp con thừa kế hook vào quá trình xử lý của lớp cha bằng cách
override các ₫iểm hook.
Hướng tiếp cận như trên là của mẫu Template Method.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 320
160
Ví dụ về mẫu Template Method
docs
Document Application
Save() AddDocument()
Open() OpenDocument()
Close() DoCreateDocument()
DoRead() CanOpenDocument()
AboutToOpenDocument()
document
MyDocument
MyApplication
DoRead()
DoCreateDocument() return new MyDocument;
CanOpenDocument()
AboutToOpenDocument()
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 321
AbstractClass
TemplateMethod() ...
PrimitiveOperation1() PrimitiveOperation1();
PrimitiveOperation2() ...
PrimitiveOperation2();
...
ConcreteClass
PrimitiveOperation1()
PrimitiveOperation2()
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 322
161
Các phần tử tham gia
AbstractClass (Application) :
₫ịnh nghĩa các primitive operation cho lớp con override ₫ể hiện thực một
phần của hoạt ₫ộng. Các phương thức này là ₫iểm mà lớp con có thể hook
vào code của lớp cha.
hiện thực template method, là method ₫ịnh nghĩa bộ khung của hoạt ₫ộng.
Template method kết hợp các primitive operation ₫ể thực hiện trọn vẹn hoạt
₫ộng.
ConcreteClass (MyApplication) : hiện thực các primitive operation ₫ể
can thiệp một phần vào quá trình thực hiện hoạt ₫ộng ở lớp cha.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 323
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 324
162
Mẫu Strategy
Mục tiêu : Cung cấp một họ giải thuật và cho phép Client chọn lựa linh
₫ộng một giải thuật cụ thể khi sử dụng.
Nhu cầu áp dụng : Một số chương trình có nhiều giải thuật khác nhau
cho cùng một vấn ₫ề. Nhu cầu phát sinh: quản lý các giải thuật ₫ó một
cách ₫ơn giản và cho phép client chọn một trong những giải thuật ₫ó ₫ể
sử dụng một cách linh ₫ộng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 325
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 326
163
Ví dụ về mẫu Strategy
compositor
Composition Compositor
Traverse() Compose()
Repair()
compositor->Compose();
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 327
ContextInterface() AlgorithmInterface()
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 328
164
Các phần tử tham gia
Strategy (Compositor) : ₫ịnh nghĩa interface cho tất cả các lớp thể hiện
giải thuật. Có thể nhận pointer ₫ến ₫ối tượng Context trong quá trình
khởi tạo ₫ối tượng ₫ể truy xuất dữ liệu trong Context.
ConcreteStrategy (SimpleCompositor, TeXCompositor..) : hiện thực
interface Strategy, thể hiện một giải thuật cụ thể.
Context (Composition) :
tại thời ₫iểm dịch: chỉ sử dụng ₫ối tượng kiểu Strategy khi xác ₫ịnh giải thuật
cho vấn ₫ề cần xử lý.
tại thời ₫iểm run-time: ₫ược cung cấp một ₫ối tượng giải thuật cụ thể thay
thế cho ₫ối tượng Strategy.
có thể cung cấp entry cho phép ₫ối tuợng kiểu Strategy truy xuất dữ liệu.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 329
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 330
165
Mẫu Command
Mục tiêu : ₫óng gói request vào trong một Object, nhờ ₫ó có thể thông
số hóa chương trình nhận request và thực hiện các thao tác trên
request: sắp xếp, log, undo…
Nhu cầu áp dụng : Đôi khi chúng ta cần gửi request ₫ến ₫ối tượng nhưng
không biết ₫ược hành ₫ộng sẽ ₫ược thực thi cũng như những ₫ối tượng
bị tác ₫ộng bởi request ₫ó. Ví dụ user interface toolkit cần xây dựng
trước việc truyền request ₫ến menu và button nhưng chỉ có ứng dụng cụ
thể mới xác ₫ịnh ₫ược hành ₫ộng khi click vào chúng. Vấn ₫ề này có thể
₫ược giải quyết như sau:
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 331
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 332
166
Ví dụ về mẫu Command
command
Application Menu MenuItem Command
Add(MenuItem) Clicked() Execute()
Add(Document)
Document
command->Execute();
Open()
Close()
Cut()
Copy()
Paste()
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 333
Ví dụ về mẫu Command
Thí dụ ₫ối tượng PasteCommand hỗ trợ hoạt ₫ộng dán text từ clipboard
vào 1 tài liệu. Phần tử nhận của PasteCommand là ₫ối tượng Document
mà PasteCommand ₫ược cung cấp trong lúc "instantiation". tác vụ
Execute gọi chức năng Paste trên Document nhận ₫ược.
Command
Execute()
Document
Open()
document
Close() PasteCommand
Cut()
Copy() document->Paste();
Execute()
Paste()
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 334
167
Ví dụ về mẫu Command
Tác vụ Execute của OpenCommand thì khác : nó hiển thị cửa sổ yêu
cầu user nhập tên document rồi tạo ₫ối tượng Document tương ứng,
"add" document vào ứng dụng nhận rồi mở document.
Command
Execute()
Application application
OpenCommand
Add(Document)
Execute() name = AskUser();
AskUser() doc = new Document(name);
application-.Add(doc);
doc->Open();
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 335
Ví dụ về mẫu Command
Đôi khi 1 option Menu cần thực thi 1 chuỗi các lệnh, chúng ta có thể
₫ịnh nghĩa class MacroCommand ₫ể cho phép thi hành 1 số lệnh chưa
biết trước.
Command
Execute()
commands
MacroCommand
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 336
168
Lược ₫ồ class của mẫu Command
Client
Command
Invoker
Execute()
Receiver
receiver
Action() ConcreteCommand
Execute() receiver->Action();
state
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 337
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 338
169
Quá trình cộng tác giữa các phẩn tử
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 339
170
Mẫu State
Mục tiêu : cho phép 1 ₫ối tượng thay ₫ổi hành vi khi trạng thái bên trong
của nó thay ₫ổi. Ta có cảm giác như class của ₫ối tượng bị thay ₫ổi.
Nhu cầu áp dụng : trong class TCPConnection miêu tả 1 mối nối mạng,
₫ối tượng TCPConnection có thể ở 1 trong nhiều trạng thái : Established,
Listening, Closed. Khi ₫ối tượng TCPConnection nhận request, nó sẽ
₫áp ứng khác nhau tùy vào trạng thái hiện hành.
→ hướng giải quyết vấn ₫ề của mẫu State.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 341
Ví dụ về mẫu State
TCPConnection state
TCPState
Open() Open()
Close() Close()
Acknowledge() Acknowledge()
state->Open();
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 342
171
Lược ₫ồ cấu trúc của mẫu State
Context state
State
Request() Handle()
... ...
state->Handle();
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 343
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 344
172
Các ngữ cảnh nên dùng mẫu State
Thường áp dụng mẫu State trong các trường hợp sau:
hành vi của ₫ối tượng phụ thuộc vào trạng thái của nó và phải thay ₫ổi run-
time khi trạng thái thay ₫ổi.
các tác vụ có những lệnh ₫iều kiện số học lớn phụ thuộc vào trạng thái ₫ối
tượng.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 345
Mẫu Observer
Mục tiêu : ₫ịnh nghĩa sự phụ thuộc 1-n giữa các ối tượng sao cho khi 1
₫ối tượng thay ₫ổi trạng thái thì các ₫ội tượng phụ thuộc ₫ược cảnh báo
hầu hiệu chỉnh tự ₫ộng (₫ể ₫ảm bảo tính nhất quán).
Nhu cầu áp dụng : trong ứng dụng quản lý bảng tính, mỗi bảng tính là 1
database nhưng nó ₫ược trình bày dưới nhiều dạng khác nhau như
spreadsheet, barchart, piechart,... Mỗi khi nội dung database thay ₫ổi ta
muốn cập nhật ₫ồng thời nhiều dạng biểu diễn nó.
→ hướng giải quyết vấn ₫ề của mẫu Observer.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 346
173
Ví dụ về mẫu Observer
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 347
Subject observers
Observer
Attach(Observer) Update()
Detach(Observer)
Notify() forall o in observers
o->Update();
ConcreteSubject ConcreteObserver
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 348
174
Các phần tử tham gia
Subject :
biết observer của nó. Có thể có nhiều observer quan sát 1 subject.
cung cấp interface ₫ể Attach va Detach các observer vào mình.
Observer :
₫ịnh nghĩa interface hiệu chỉnh cho các ₫ối tượng mà sẽ ₫ược cảnh báo ₫ể
hiệu chỉnh subject của mình.
ConcreteSubject :
lưu trạng thái lưu ý tới các ₫ối tượng ConcreteObserver.
gởi cảnh báo tới các observer khi trạng thái của nó thay ₫ổi.
Concretebserver :
duy trì tham khảo tới ₫ối tượng ConcreteSubject.
lưu trạng thái mà cần phải luôn nhất quán với subject của mình.
hiện thực interface hiệu chỉnh ₫ể giữ trạng thái luôn nhất quán với subject
của mình.
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 349
Bö mön Cöng nghï phền mï̀m Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Khoa CNTT Chương 11 : Các mẫu Creational
ĐH Bach Khoa Tp.HCM Slide 350
175