1
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 1
Trương Đai hoc Bach Khoa Tp. Hö̀ Chñ Minh
Khoa Cöng Nghï Thöng Tin
Mön hoc
PHÂN TÍCH & THIẾT KẾ
HƯỚNG ĐỐI TƯỢNG DÙNG UML
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 2
1. n lai 1 ś khai nim cơ ban cua hương ₫́i tương, cac ngn ngư
hương ₫́i tương thương dung, cơ ch́ dịch cac type/class sang ngn
ngư c̉ ₫ỉn (ngn ngư may).
2. n lai qui trnh phat trỉn ph̀n m̀m hơp nh́t.
3. n lai ngn ngư UML ₫ươc dung ₫̉ miu ta
cac artifacts cua qui
trnh phat trỉn ph̀n m̀m hơp nh́t.
4. Giơi thiu cac m̃u thít ḱ hương ₫́i tương ₫ươc dung ph̉ bín
trong cac ưng dung hin hanh va cac ưng dung tương lai.
Nöi dung mön hoc
2
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 3
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
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 4
Trương Đai hoc Bach Khoa Tp. Hö̀ Chñ Minh
Khoa Cöng Nghï Thöng Tin
Chương 1
CAC KHAI NIÏMCƠ BAN CUA
MÖ HÒNH HƯƠNG ĐÖI TƯƠNG
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
3
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 5
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ưakḯ 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.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 6
1. May tnh ś la thít bị co th̉ thưc hin 1 ś hưu han cac chưc năng
cơ ban (tp lnh), cơ ch́ thưc hin cac lnh la tư ₫ng tư lnh ₫̀u
cho ₫́n lnh cúi cung. Danh sach cac lnh ₫ươc thưc hin nay
₫ươc goi la
chương trnh.
2. b́t ky cng vic ngoai ₫ơi nao cung co th̉ ₫ươc chia thanh trnh tư
nhìu cng vic nho hơn. Trnh tư cac cng vic nho nay ₫ươc goi
la giai thut giai quýt cng vic ngoai ₫ơi. M̃i cng vic nho hơn
cung co th̉
₫ươc chia nho nưa, ⇒ cng vic ngoai ₫ơi la 1 trnh
tư cac lnh may (chương trnh).
3. v́n ₫̀ ḿu ch́t cua vic dung may tnh giai quýt v́n ₫̀ ngoai
₫ơi la lp trnh. Cho ₫́n nay, lp trnh la cng vic cua con ngươi
(vơi sư trơ giup nga
y cang nhìu cua may tnh).
4. cac lnh cua chương trnh (code) phai tham khao hoăc xư ly (truy
xút) thng tin (dư liu).
Tư lêp trònh co cếu truc ₫ḯn OOP
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
4
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 7
Tư lêp trònh co cếu truc ₫ḯn OOP
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
5. Dư liu cua 1 chương trnh co th̉ ŕt nhìu va ₫a dang. Đ̉ truy
xút ₫ung 1 dư liu ta c̀n :
-tn nhn dang.
-kỉu dư liu miu ta ću truc dư liu.
-t̀m vưc truy xút miu ta giơi han khach hang truy xútdư
liu.
6. Chương trnh c̉ ₫ỉn = giai thut + dư liu.
7. Chương trnh con (function, subroutine, ) cho phep ću truc
chương trnh, sư dung lai code
8. Chương trnh c̉ ₫ỉn co ću truc phn ćp như sau :
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 8
Chương trnh = ću truc dư liu + giai thut
entry 'start'
global data
module
(package)
local data
of module
local data
of function
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Tư lêp trònh co cếu truc ₫ḯn OOP
5
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 9
Chương trnh = tp cac ₫́i tương tương tac nhau
entry
₫́i tương
(object)
local data
of object
local data
of operation
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Tư lêp trònh co cếu truc ₫ḯn OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 10
Tö̉ng quat vï̀ hương ₫ö́i tương
M hnh hương ₫́i tương giơi thiu 1 quan ₫ỉm lp trnh
(va phn tch/thít ḱ) khac hăn so vơi trương phai c̉ ₫ỉn
(co ću truc).
Băt ₫̀u nhen nhom vao nhưng năm cúi 60s va ₫́n ₫̀u
90s th trơ nn ŕt ph̉ bín trong cng nghip ph̀n m̀m.
Nhưng ngn ngư hương ₫́i tương ₫̀u tin : Smalltalk,
Eiffel. Sau ₫o xút hin thm : Object Pascal, C++, Java,
C#,…
Hnh thanh cac phương phap phn tch/thít ḱ hương ₫́i
tương.
Va hin nay ta co 1 qui trnh phat trỉn ph̀n m̀m hơp nh́t
dưa trn ngn ngư UML.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
6
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 11
Đö́i tương (Object)
~ M hnh ₫́i tương quan nim chương trnh bao g̀m cac ₫́i
tương sinh śng va tương tac vơi nhau.
~ Đ́i tương bao g̀m :
thuc tnh (dư liu) : mang 1 gia trị nh́t ₫ịnh tai tưng thơi ₫ỉm.
tac vu (operation) : thưc hin 1 cng vic nao ₫o.
Interface
(abstract type)
Implementation
(class)
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 12
Kiï̉u trưu tương (Abstract type)
~ Abstract type (type) ₫ịnh nghĩa interface sư dung ₫́i tương.
~ Interface la tp cac entry ma bn ngoai co th̉ giao típ vơi ₫́i
tương.
~ Dung signature ₫̉ ₫ịnh nghĩa m̃i entry, Signature g̀m :
tn method (operation)
danh sach ₫́i ś hnh thưc, m̃i ₫́i ś ₫ươc ₫ăc ta bơi 3
thuc tnh : tn, type va chì
u chuỷn ₫ng (IN, OUT,
INOUT).
₫ăc ta chưc năng cua method (thương la chu thch).
~ Dung abstract type (chư khng phai class) ₫̉ ₫ăc ta kỉu cho
bín, thuc tnh, tham ś hnh thưc.
~ User khng c̀n quan tm ₫́n class (hin thưc cu th̉) cua ₫́i
tương.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
7
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 13
Class (Implementation)
~ Class ₫ịnh nghĩa chi tít hin thưc ₫́i tương :
₫ịnh nghĩa cac thuc tnh dư liu : gia trị cua t́t ca thuc
tnh xac ₫ịnh trang thai cua ₫́i tương.
kỉu cua thuc tnh co th̉ la type c̉ ₫ỉn hay abstract type,
trong trương hơp sau thuc tnh chưa tham khao ₫́n ₫́i
tươ
ng khac.
coding cac method va cac internal function.
~ Định nghĩa cac method tao va xoa ₫́i tương.
~ Định nghĩa cac method constructor va destructor.
~ User khng c̀n quan tn ₫́n class cua ₫́i tương.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 14
Vñ du vï̀ class trong Java
class abstract HTMLObject {
protected static final int LEFT = 0;
protected static final int MIDDLE = 1;
protected static final int RIGHT = 2;
private int alignment = LEFT;
protected Vector objects = null;
HTMLObject( ){ // constructor
objects = new Vector (5);
}
public void setAlignment( int algnmt ) {
alignment = algnmt;
}
public int getAlignment( ) {
return alignment;
}
public abstract String toHTML( ); // abstract operation
}
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
8
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 15
Tñnh bao ₫ong (encapsulation)
z Bao ₫ong : che d́u moi chi tít hin thưc cua ₫́i tương,
khng cho bn ngoai th́y va truy xút ⇒ tnh ₫c lp cao
giưa cac ₫́i tương (hay tnh ḱt dnh - cohesion giưa cac
₫́i tương ŕt th́p).
che d́u cac thuc tnh dư liu : ńu c̀n cho phep truy
xút 1 thuc tnh dư liu, ta tao 2 method get/set tương
ưng ₫̉ giam sat vic truy xút va che d́u chi tít hin
thưc bn trong.
che d́u chi tít hin thưc cac method.
che d́u cac internal function va sư hin thưc cua chung.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 16
Tñnh thưa kḯ (inheritance)
~ Tnh thưa ḱ cho phep giam nhe cng sưc ₫ịnh nghĩa
type/class : ta co th̉ ₫ịnh nghĩa cac type/class khng phai
tư ₫̀u ma băng cach ḱ thưa type/class co săn, ta chỉ ₫ịnh
nghĩa thm cac chi tít mơi ma thi (thương kha t).
Đa thưa ḱ hay ₫ơn thưa ḱ.
Ḿi quan h supertype/subtype va
superclass/subclass.
co th̉ override cac method cua class cha, ḱt qua
override chỉ co nghĩa trong ₫́i tương class con.
Đ́i tương cua class con co th̉ ₫ong vai tro cua ₫́i
tương cha nhưng ngươc lai thương khng ₫ung.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
9
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 17
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;
};
class Line extends Geometry {
int xPos2, yPos2;
// other attributes
public Draw(Graphics g) {
// cac lnh ve ₫oan thăng
}
}
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 18
Tñnh bao göp (aggregation)
1 ₫́i tương co th̉ chưa nhìu ₫́i tương khac tao nn ḿi
quan h bao gp 1 cach ₫ qui giưa cac ₫́i tương.
Co 2 goc nhn v̀ tnh bao gp : ngư nghĩa va hin thưc.
O
1
O
2
O
3
Goc nhn ngư nghĩa
Goc nhn hin
thưc
O
1
O
2
O
3
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
10
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 19
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;
};
class Group : public Geometry {
public:
Group( );
~Group( );
virtual void Draw( Window *pWnd );
// override
private:
Geometry **ppGeo;
// pointer container
int geoCount;
};
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 20
Thöng ₫iïp (Message)
~ Thng ₫ip la 1 phep goi tac vu ₫́n 1 ₫́i tương tư 1
tham khao.
~ Thng ₫ip bao g̀m 3 ph̀n :
tham khao ₫́n ₫́i tương ₫ch.
tn tac vu mún goi.
danh sach tham ś thưc c̀n truỳn theo (hay nhn v̀ tư)
tac vu.
v du : aCircle.SetRadius (3); aCircle.Draw (pWnd);
~ Thng ₫ip la phương tin giao típ (hay tương tac)
duy nh́t giưa cac ₫́i tương.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
11
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 21
Tñnh ₫a xa (Polymorphism)
~ Cung 1 lnh gơi thng ₫ip ₫́n ₫́i tương thng qua cung 1
tham khao nhưng ơ vị tr/thơi ₫ỉm khac nhau co th̉ gy ra
vic thưc thi method khac nhau cua cac ₫́i tương khac
nhau.
T1 p1; // C1 va C2 la 2 class hin thưc T1
p1 = New C1; // tao ₫́i tương C1, gan tham khaovaop1
p1.meth1( );
p1 = New C2; // tao ₫́i tương C2, gan tham khao vao p1
p1.meth1( );
Lnh p1.meth1( ); ơ 2 vị tr khac nhau kch hoat 2 method
khac nhau cua 2 class khac nhau.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 22
Kiï̉m tra kiï̉u (type check)
~ Chăt va dung ḿi quan h 'conformity' (tương thch t̉ng
quat). Type A tương thch vơi type B ⇔ Achưa moi method
cua B va ưng vơi tưng method cua B :
t̀n tai 1 method cung tn trong A.
danh sach ₫́i ś cua 2 method tương ưng phai băng
nhau.
kỉu ₫́i ś OUT hay gia trị return cua method trong A
phai tương thch vơi kỉu cua ₫́i ś tương ưng trong B.
kỉu ₫́i ś IN cua method trong B phai tương thch vơi
kỉu cua ₫́i ś tương ưng trong A.
kỉu ₫́i ś INOUT cua method trong A phai trung vơi
kỉu cua ₫́i ś tương ưng trong B.
Ö quan h so trung hay quan h con/cha (sub/super) la trương
hơp ₫ăc bit cua quan h
tương thch t̉ng quat.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
12
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 23
Tñnh tö̉ng quat hoa (Generalization)
~ Co 2 ngư nghĩa khac nhau cua tnh t̉ng quat hoa :
class t̉ng quat hoa cho phep san sinh tư ₫ng cac
class bnh thương, cac class bnh thương tư no chỉ co
th̉ tao ra ₫́i tương. Thương dung ngư nghĩa nay trong
giai ₫oan lp trnh.
ngươc vơi tnh thưa ḱ : supertype/superclass la
type/class t̉ng quat hoa cua cac con cua no. Thương
dung ngư nghĩa nay trong giai ₫oan phn tch/thít ḱ
ph̀n m̀m.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 24
Tñnh thương tru (persistence)
~ ₫ơi śng cua 1 ₫́i tương ₫c lp vơi ₫ơi śng cua ph̀n tư
tao ra no.
₫́i tương phai t̀n tai khi con t nh́t 1 tham khao ₫́n no
trong h th́ng.
₫́i tương phai bị xoa khi khng con tham khao nao ₫́n
no, v tai thơi ₫ỉm nay ₫́i tương la rac. Vic xac ₫ịnh
chnh xac 1 ₫́i tương co phai la rac hay khng la 1 vic
phưc tap code ưng dung khng ₫ươc phep lam, ₫y la
cng vic cua h th́ng thng qua module 'garbage
collection'.
vưng b̀n khng phai la vĩnh hăng, mưc ₫ co th̉ la 1
session cua may ao (JVM) hay lu dai (thng qua ₫ĩa
cưng, CDROM).
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
13
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 25
Tö̉ng kḯt
~ M hnh hương ₫́i tương quan nim th́ giơi (hay chương trnh)
bao g̀m cac ₫́i tương śng chung va tương tac vơi nhau.
~ Cac ₫ăc ₫ỉm chnh cua hương ₫́i tương :
Bao ₫ong : m̃i ₫́i tương bao g̀m dư liu va tac vu. Cac tac vu thít
lp nn hanh vi cua ₫́i tương. Cac ₫́i tương ₫ươc phn loai băng
class.
Cac ₫́i tương tương tac vơi nhau băng cach gơi thng ₫ip.
giưa cac class/₫́i tương co th̉ t̀
n tai quan h bao gp, thưa ḱ, t̉ng
quat hoa.
Tnh ₫a hnh : ḱt qua cua sư kỉm tra kỉu dưa vao ḿi quan h
'conformity'.
Tnh vưng b̀n : ₫́i tương t̀n tai khi con t nh́t 1 tham khao ₫́n no.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 26
Chương 2
THÑ DU VÏ NGÖN NGƯ OOP
) Visual C++
) Java
Chương 2: Th du v̀ cac ngn ngư OOP
Trương Đai hoc Bach Khoa Tp. Hö̀ Chñ Minh
Khoa Cöng Nghï Thöng Tin
14
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 27
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.
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 28
Chỉ hö̃ trơ khai niïm class
1. Dung class ₫̉ ₫ịnh nghĩa kỉu cho cac bín, thuc tnh
⇒ ₫́i tương co th̉ chưa vt ly ₫́i tương khac hay chưa tham
khao ₫́n ₫́i tương khac.
2. Đa thưa ḱ trong ₫ịnh nghĩa class ⇒ 1 class co th̉ chưa nhìu
class con trung nhau ⇒ dung "virtual base class" ₫̉ t́i ưu hoa
b nhơ ₫́i tương.
Chương 2: Th du v̀ cac ngn ngư OOP
15
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 29
Class trưu tương (Abstract class)
3. H̃ trơ khai nim "abstract class" ₫̉ ₫ịnh nghĩa class chỉ chưa
thng tin interface nhưng khng cho phep dung class nay ₫̉
₫ịnh nghĩa kỉu cho bín hay thuc tnh. 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;
};
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 30
Tềm vưc truy xuết thanh viïn
4. T̀m vưc truy xút thng tin trong ₫́i tương :
private : thng tin bị che d́u hoan toan.
protected : chỉ che d́u bn ngoai nhưng cho phep cac ₫́i
tương con, chau, chăt truy xút.
public : cho phep t́t ca moi nơi truy xút.
Friend class
: la class ma m̃i function cua no ₫̀u co th̉ truy
xút tư do m̃i thanh ph̀n cua class hin tai.
Friend function : la function co th̉ truy xút tư do m̃i thanh
ph̀n cua class hin tai.
Co th̉ han ch́ t̀m vưc cua thanh vin cua class cha khi thưa
ḱ.
Chương 2: Th du v̀ cac ngn ngư OOP
16
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 31
Hö̃ trơ tñnh ₫a hònh co chon loc
5. Định nghĩa 'virtual function' ńu mún ap dung tnh ₫a hnh
trong vic gơi thng bao yu 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
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 32
Cac ₫ö́i tương ₫ï̀u tam thơi
6. Cac ₫́i tương chỉ t̀n tai tam thơi trong khng gian process.
Tham khao ₫́n ₫́i tương thưc ch́t la pointer cuc b.
chương trnh phai tư vít code cho hoat ₫ng save/restore ₫́i
tương ńu mún lưu giư/dung lai ₫́i tương.
VC++ h̃ trơ hoat ₫ng save/restore ₫́i tương nhơ kha năng
'Serialization'.
7. Co quỳn 'override' b́t ky toan tư hay function nao cua class
cha.
8. Cho phep ₫ịnh nghĩa cac ham 'overloaded' : cung tn nhưng
'signature' khac nhau.
Chương 2: Th du v̀ cac ngn ngư OOP
17
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 33
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 { };
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 34
Cếu truc 1 chương trònh Dialog based ₫ơn gian
InitInstance()
DoModal()
CProgramApp
CProgramDlg
Chương 2: Th du v̀ cac ngn ngư OOP
18
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 35
Cếu truc 1 chương trònh SDI ₫ơn gian
InitInstance()
CProgramApp
CSingleDocTemplate
CMainFrame
CProgramView
CProgramDoc
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 36
Cếu truc 1 chương trònh MDI ₫ơn gian
InitInstance()
CProgramApp
CMultiDocTemplate
CChildFrame
CProgramView
CProgramDoc
Chương 2: Th du v̀ cac ngn ngư OOP
19
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 37
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.
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 38
1. Chu ýu dung class ₫̉ ₫ịnh nghĩa kỉu cho cac bín, thuc
tnh.
Co th̉ dung interface ₫̉ ₫ịnh nghĩa kỉu cho cac bín, thuc
tnh. Đ́itương chỉ co th̉ chưa tham khao ₫́n ₫́i tương khac.
2. Phai goi ham tao ₫́i tương 1 cach tương minh, nhưng khng
₫ươc xoa ₫́i tương.
class C1 extends RootClass { }
C1 o1; // o1 chưa tham khao ₫́n ₫́i tương C1
o1 = New C1;
3. Interface chỉ ₫ươc dung trong trương hơp ₫ăc bit va khng
tương ₫ương vơi abstract type.
4. Đơn thưa ḱ trong ₫ịnh nghĩa class ⇒ ḿi quan h thưa ḱ
giưa cac class kha ₫ơn gian.
Hö̃ trơ Class va Interface
Chương 2: Th du v̀ cac ngn ngư OOP
20
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 39
Hö̃ trơ abstract class
5. H̃ trơ khai nim "abstract class" ₫̉ ₫ịnh nghĩa class chưa
thng tin interface va khng cho phep 'instanciate' ₫́i tương.
Ban chỉ co th̉ dung class 'abstract class' ₫̉ ₫ăc ta kỉu cho
cac bí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 hin thưc bn trong,
nhưng thương chỉ co chưa cac 'abstract function'.
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 40
Tềm vưc truy xuết cac thanh phền
6. T̀m vưc truy xút cac thanh ph̀n trong ₫́i tương :
private : thanh ph̀n bị che d́u hoan toan.
protected : che d́u bn ngoai nhưng cho phep cac ₫́i tương
con, chau, chăt truy xút.
public : cho phep t́t ca moi nơi truy xút.
friendly : cho phep moi ph̀n tư trong package truy xút. Đy
la t̀m vưc default va khng co tư khoa t̀m vưc tương minh.
Chương 2: Th du v̀ cac ngn ngư OOP
21
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 41
7. Package la ₫ơn vị quan ly t̀m vưc cua java, co th̉ chưa nhì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
thuc 1 package : tn ₫ươc qui ₫ịnh bơi phat bỉu package hay
la package default.
Nhìu file source co th̉ thuc cung 1package (dung cung tn
trong phat bỉu package).
Hö̃ trơ package
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 42
Hö̃ trơ ₫ềy ₫u tñnh ₫a hònh
8. T́t ca cac public function ₫ươc quan ly trong 1 danh sach
"public function table".
₫ịa chỉ function 1
₫ịa chỉ function 2
₫ịa chỉ function 3
₫ịa chỉ function i
₫ịa chỉ function n
Chương 2: Th du v̀ cac ngn ngư OOP
22
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 43
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 khng c̀n xoa no.
Đ́i tương se t̀n tai mt khi con tham khao ₫́n no. Module
Garbage Collection trong JVM se chịu trach nhim phat hin
₫́i tương 'rac' va xoa no ra khoi b nhơ JVM.
10.Co quỳn 'override' b́t ky function nao cua class cha.
11.Cho phep ₫ịnh nghĩa cac ham 'overloaded' : cung tn nhưng
'signature' khac nhau.
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 44
Thñ du vï̀ chương trònh Java
import java.net.*;
public class getnet {
public static void main(String args[]) {
try {
if(args.length!=1) {
System.out.println("Usage: java AddrLookupApp <HostName>");
return;
}
InetAddress host = InetAddress.getByName(args[0]);
String hostName = host.getHostName();
System.out.println ("Host name : "+hostName);
System.out.println ("IP address:"+host.getHostAddress());
}
catch (UnknownHostException e) { }
}
}
Chương 2: Th du v̀ cac ngn ngư OOP
23
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 45
Thñ du vï̀ chương trònh Java
Chương 2: Th du v̀ cac ngn ngư OOP
12.34.25
AlarmClock
GUIClock
wakeup()
<<chưa>>
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 46
Thñ du vï̀ cac class Java
public class AlarmClock {
private static final int MAX_CAPACITY = 10;
private static final int UNUSED = -1;
private static final int NOROOM = -1;
private Sleeper[] sleepers = new Sleeper[MAX_CAPACITY];
private long[] sleepFor = new long[MAX_CAPACITY];
public AlarmClock () {
for (int i = 0; i < MAX_CAPACITY; i++)
sleepFor[i] = UNUSED;
}
Chương 2: Th du v̀ cac ngn ngư OOP
24
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 47
Thñ du vï̀ cac class Java
public synchronized boolean letMeSleepFor(Sleeper s, long time)
{
int index = findNextSlot();
if (index == NOROOM) {
return false;
} else {
sleepers[index] = s;
sleepFor[index] = time;
new AlarmThread(index).start();
return true;
}
}
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 48
Thñ du vï̀ cac class Java
private synchronized int findNextSlot() {
for (int i = 0; i < MAX_CAPACITY; i++) {
if (sleepFor[i] == UNUSED)
return i;
}
return NOROOM;
}
private synchronized void wakeUpSleeper(int sleeperIndex) {
sleepers[sleeperIndex].wakeUp();
sleepers[sleeperIndex] = null;
sleepFor[sleeperIndex] = UNUSED;
}
Chương 2: Th du v̀ cac ngn ngư OOP
25
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 49
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);
}
}
}
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 50
Thñ du vï̀ cac class Java
public interface Sleeper {
public void wakeUp();
public long ONE_SECOND = 1000;// in milliseconds
public long ONE_MINUTE = 60000; // in milliseconds
}
import java.applet.Applet;
import java.awt.Graphics;
import java.util.*;
import java.text.DateFormat;
public class GUIClock extends Applet implements Sleeper {
private AlarmClock clock;
public void init() {
clock = new AlarmClock();
}
Chương 2: Th du v̀ cac ngn ngư OOP