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

Tài liệu PHÂN TÍCH & THIẾT KẾ HƯỚNG ĐỐI TƯỢNG DÙNG UML pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.56 MB, 176 trang )












SỐNG VỚI HỘI CHỨNG DOWN
1
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 1
Trương Đai hoc Bach Khoa Tp. Hö̀ Chñ Minh
Khoa Cöng Nghï Thöng Tin
Mön hoc
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
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 2
1. n lai 1 s́ khai nim cơ ban cua hương ₫́i tương, cac ngn ngư
hương ₫́i tương thương dung, cơ ch́ dịch cac type/class sang ngn
ngư c̉ ₫i̉n (ngn ngư may).


2. n lai qui trnh phat tri̉n ph̀n m̀m hơp nh́t.
3. n lai ngn ngư UML ₫ươc dung ₫̉ miu ta
 cac artifacts cua qui
trnh phat tri̉n ph̀n m̀m hơp nh́t.
4. Giơi thiu cac m̃u thi́t k́ hương ₫́i tương ₫ươc dung ph̉ bi́n
trong cac ưng dung hin hanh va cac ưng dung tương lai.
Nöi dung mön hoc
2
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 3
Tai liïu tham khao 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
ĐHBach Khoa Tp.HCM

Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 4
Trương Đai hoc Bach Khoa Tp. Hö̀ Chñ Minh
Khoa Cöng Nghï Thöng Tin
Chương 1
CAC KHAI NIÏMCƠ BAN CUA
MÖ HÒNH HƯƠNG ĐÖI TƯƠNG
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
3
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 truc ₫ḯn OOP
1.2 Đö́i tương, thuöc tñnh, tac vu.
1.3 Abstract type va class.
1.4 Tñnh bao ₫ong.
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 quat hoa.
1.9 Tñnh vưng bï̀n.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 6

1. May tnh s́ la thi́t bị co th̉ thưc hin 1 s́ hưu han cac chưc năng
cơ ban (tp lnh), cơ ch́ thưc hin cac lnh la tư ₫ng tư lnh ₫̀u
cho ₫́n lnh cu́i cung. Danh sach cac lnh ₫ươc thưc hin nay
₫ươc goi la
chương trnh.
2. b́t ky cng vic ngoai ₫ơi nao cung co th̉ ₫ươc chia thanh trnh tư
nhi̀u cng vic nho hơn. Trnh tư cac cng vic nho nay ₫ươc goi
la giai thut giai quy́t cng vic ngoai ₫ơi. M̃i cng vic nho hơn
cung co th̉
₫ươc chia nho nưa,... ⇒ cng vic ngoai ₫ơi la 1 trnh
tư cac lnh may (chương trnh).
3. v́n ₫̀ m́u ch́t cua vic dung may tnh giai quy́t v́n ₫̀ ngoai
₫ơi la lp trnh. Cho ₫́n nay, lp trnh la cng vic cua con ngươi
(vơi sư trơ giup nga
y cang nhi̀u cua may tnh).
4. cac lnh cua chương trnh (code) phai tham khao hoăc xư ly (truy
xu́t) thng tin (dư liu).
Tư lêp trònh co cếu truc ₫ḯn OOP
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
4
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 truc ₫ḯn OOP
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
5. Dư liu cua 1 chương trnh co th̉ r́t nhi̀u va ₫a dang. Đ̉ truy
xu́t ₫ung 1 dư liu ta c̀n :
-tn nhn dang.

-ki̉u dư liu miu ta c́u truc dư liu.
-t̀m vưc truy xu́t miu ta giơi han khach hang truy xu́tdư
liu.
6. Chương trnh c̉ ₫i̉n = giai thut + dư liu.
7. Chương trnh con (function, subroutine,...) cho phep c́u truc
chương trnh, sư dung lai code...
8. Chương trnh c̉ ₫i̉n co c́u truc phn c́p như sau :
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 8
Chương trnh = c́u truc dư liu + giai thut
entry 'start'
global data
module
(package)
local data
of module
local data
of function
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Tư lêp trònh co cếu truc ₫ḯn OOP
5
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 9
Chương trnh = tp cac ₫́i tương tương tac nhau

entry
₫́i tương
(object)
local data
of object
local data
of operation
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Tư lêp trònh co cếu truc ₫ḯn OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 10
Tö̉ng quat vï̀ hương ₫ö́i tương
 M hnh hương ₫́i tương giơi thiu 1 quan ₫i̉m lp trnh
(va phn tch/thi́t k́) khac hăn so vơi trương phai c̉ ₫i̉n
(co c́u truc).
 Băt ₫̀u nhen nhom vao nhưng năm cu́i 60s va ₫́n ₫̀u
90s th trơ nn r́t ph̉ bi́n trong cng nghip ph̀n m̀m.
 Nhưng ngn ngư hương ₫́i tương ₫̀u tin : Smalltalk,
Eiffel. Sau ₫o xu́t hin thm : Object Pascal, C++, Java,
C#,…
 Hnh thanh cac phương phap phn tch/thi́t k́ hương ₫́i
tương.
 Va hin nay ta co 1 qui trnh phat tri̉n ph̀n m̀m hơp nh́t
dưa trn ngn ngư UML.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
6
Bö mön Cöng nghï phền mï̀m

Khoa CNTT
ĐHBach 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 hnh ₫́i tương quan nim chương trnh bao g̀m cac ₫́i
tương sinh s́ng va tương tac vơi nhau.
~ Đ́i tương bao g̀m :
 thuc tnh (dư liu) : mang 1 gia trị nh́t ₫ịnh tai tưng thơi ₫i̉m.
 tac vu (operation) : thưc hin 1 cng vic nao ₫o.
Interface
(abstract type)
Implementation
(class)
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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ư dung ₫́i tương.
~ Interface la tp cac entry ma bn ngoai co th̉ giao ti́p vơi ₫́i
tương.
~ Dung signature ₫̉ ₫ịnh nghĩa m̃i entry, Signature g̀m :
 tn method (operation)
 danh sach ₫́i s́ hnh thưc, m̃i ₫́i s́ ₫ươc ₫ăc ta bơi 3
thuc tnh : tn, type va chi̀
u chuy̉n ₫ng (IN, OUT,
INOUT).

 ₫ăc ta chưc năng cua method (thương la chu thch).
~ Dung abstract type (chư khng phai class) ₫̉ ₫ăc ta ki̉u cho
bi́n, thuc tnh, tham s́ hnh thưc.
~ User khng c̀n quan tm ₫́n class (hin thưc cu th̉) cua ₫́i
tương.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
7
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 ti́t hin thưc ₫́i tương :
 ₫ịnh nghĩa cac thuc tnh dư liu : gia trị cua t́t ca thuc
tnh xac ₫ịnh trang thai cua ₫́i tương.
 ki̉u cua thuc tnh co th̉ la type c̉ ₫i̉n hay abstract type,
trong trương hơp sau thuc tnh chưa tham khao ₫́n ₫́i
tươ
ng khac.
 coding cac method va cac internal function.
~ Định nghĩa cac method tao va xoa ₫́i tương.
~ Định nghĩa cac method constructor va destructor.
~ User khng c̀n quan tn ₫́n class cua ₫́i tương.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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: Cac khai nim cơ ban cua m hnh hương ₫́i tương
8
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 ₫ong (encapsulation)
z Bao ₫ong : che d́u moi chi ti́t hin thưc cua ₫́i tương,
khng cho bn ngoai th́y va truy xu́t ⇒ tnh ₫c lp cao
giưa cac ₫́i tương (hay tnh k́t dnh - cohesion giưa cac
₫́i tương r́t th́p).

 che d́u cac thuc tnh dư liu : n́u c̀n cho phep truy
xu́t 1 thuc tnh dư liu, ta tao 2 method get/set tương
ưng ₫̉ giam sat vic truy xu́t va che d́u chi ti́t hin
thưc bn trong.
 che d́u chi ti́t hin thưc cac method.
 che d́u cac internal function va sư hin thưc cua chung.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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)
~ Tnh thưa k́ cho phep giam nhe cng sưc ₫ịnh nghĩa
type/class : ta co th̉ ₫ịnh nghĩa cac type/class khng phai
tư ₫̀u ma băng cach k́ thưa type/class co săn, ta chỉ ₫ịnh
nghĩa thm cac chi ti́t mơi ma thi (thương kha t).
 Đa thưa k́ hay ₫ơn thưa k́.
 M́i quan h supertype/subtype va
superclass/subclass.
 co th̉ override cac method cua class cha, k́t qua
override chỉ co nghĩa trong ₫́i tương class con.
 Đ́i tương cua class con co th̉ ₫ong vai tro cua ₫́i
tương cha nhưng ngươc lai thương khng ₫ung.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
9
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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) {
// cac lnh ve ₫oan thăng
}
}
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 nhi̀u ₫́i tương khac tao nn m́i
quan h bao gp 1 cach ₫ qui giưa cac ₫́i tương.
 Co 2 goc nhn v̀ tnh bao gp : ngư nghĩa va hin thưc.
O
1
O
2
O

3
Goc nhn ngư nghĩa
Goc nhn hin
thưc
O
1
O
2
O
3
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
10
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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)
~ Thng ₫ip la 1 phep goi tac vu ₫́n 1 ₫́i tương tư 1
tham khao.
~ Thng ₫ip bao g̀m 3 ph̀n :
 tham khao ₫́n ₫́i tương ₫ch.
 tn tac vu mu́n goi.
 danh sach tham s́ thưc c̀n truy̀n theo (hay nhn v̀ tư)
tac vu.
 v du : aCircle.SetRadius (3); aCircle.Draw (pWnd);
~ Thng ₫ip la phương tin giao ti́p (hay tương tac)
duy nh́t giưa cac ₫́i tương.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
11

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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)
~ Cung 1 lnh gơi thng ₫ip ₫́n ₫́i tương thng qua cung 1
tham khao nhưng ơ vị tr/thơi ₫i̉m khac nhau co th̉ gy ra
vic thưc thi method khac nhau cua cac ₫́i tương khac
nhau.
T1 p1; // C1 va C2 la 2 class hin thưc T1
...
p1 = New C1; // tao ₫́i tương C1, gan tham khaovaop1
p1.meth1(...);
...
p1 = New C2; // tao ₫́i tương C2, gan tham khao vao p1
p1.meth1(...);
Lnh p1.meth1(...); ơ 2 vị tr khac nhau kch hoat 2 method
khac nhau cua 2 class khac nhau.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 dung m́i quan h 'conformity' (tương thch t̉ng
quat). Type A tương thch vơi type B ⇔ Achưa moi method
cua B va ưng vơi tưng method cua B :
 t̀n tai 1 method cung tn trong A.

 danh sach ₫́i s́ cua 2 method tương ưng phai băng
nhau.
 ki̉u ₫́i s́ OUT hay gia trị return cua method trong A
phai tương thch vơi ki̉u cua ₫́i s́ tương ưng trong B.
 ki̉u ₫́i s́ IN cua method trong B phai tương thch vơi
ki̉u cua ₫́i s́ tương ưng trong A.
 ki̉u ₫́i s́ INOUT cua method trong A phai trung vơi
ki̉u cua ₫́i s́ tương ưng trong B.
Ö quan h so trung hay quan h con/cha (sub/super) la trương
hơp ₫ăc bit cua quan h
 tương thch t̉ng quat.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
12
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 quat hoa (Generalization)
~ Co 2 ngư nghĩa khac nhau cua tnh t̉ng quat hoa :
 class t̉ng quat hoa cho phep san sinh tư ₫ng cac
class bnh thương, cac class bnh thương tư no chỉ co
th̉ tao ra ₫́i tương. Thương dung ngư nghĩa nay trong
giai ₫oan lp trnh.
 ngươc vơi tnh thưa k́ : supertype/superclass la
type/class t̉ng quat hoa cua cac con cua no. Thương
dung ngư nghĩa nay trong giai ₫oan phn tch/thi́t k́
ph̀n m̀m.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m

Khoa CNTT
ĐHBach 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 s́ng cua 1 ₫́i tương ₫c lp vơi ₫ơi s́ng cua ph̀n tư
tao ra no.
 ₫́i tương phai t̀n tai khi con t nh́t 1 tham khao ₫́n no
trong h th́ng.
 ₫́i tương phai bị xoa khi khng con tham khao nao ₫́n
no, v tai thơi ₫i̉m nay ₫́i tương la rac. Vic xac ₫ịnh
chnh xac 1 ₫́i tương co phai la rac hay khng la 1 vic
phưc tap code ưng dung khng ₫ươc phep lam, ₫y la
cng vic cua h th́ng thng qua module 'garbage
collection'.
 vưng b̀n khng phai la vĩnh hăng, mưc ₫ co th̉ la 1
session cua may ao (JVM) hay lu dai (thng qua ₫ĩa
cưng, CDROM).
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
13
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 hnh hương ₫́i tương quan nim th́ giơi (hay chương trnh)
bao g̀m cac ₫́i tương s́ng chung va tương tac vơi nhau.
~ Cac ₫ăc ₫i̉m chnh cua hương ₫́i tương :
 Bao ₫ong : m̃i ₫́i tương bao g̀m dư liu va tac vu. Cac tac vu thi́t

lp nn hanh vi cua ₫́i tương. Cac ₫́i tương ₫ươc phn loai băng
class.
 Cac ₫́i tương tương tac vơi nhau băng cach gơi thng ₫ip.
 giưa cac class/₫́i tương co th̉ t̀
n tai quan h bao gp, thưa k́, t̉ng
quat hoa.
 Tnh ₫a hnh : k́t qua cua sư ki̉m tra ki̉u dưa vao m́i quan h
'conformity'.
 Tnh vưng b̀n : ₫́i tương t̀n tai khi con t nh́t 1 tham khao ₫́n no.
Chương 1: Cac khai nim cơ ban cua m hnh hương ₫́i tương
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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̀ cac ngn ngư OOP
Trương Đai hoc Bach 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
ĐHBach 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ơ khai niïm class.

2. Cho phep Đa thưa kḯ.
3. Dung 'abstract class' ₫ï̉ ₫ịnh nghĩa interface.
4. Tềm vưc truy xuết cac thanh phền.
5. Đa hònh co chon loc nhơ 'virtual function'
6. Chỉ hö̃ trơ cac ₫ö́i tương tam.
7. Override method khi thưa kḯ.
8. Co thï̉ ₫ịnh nghĩa function overloaded.
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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ơ khai niïm class
1. Dung class ₫̉ ₫ịnh nghĩa ki̉u cho cac bi́n, thuc tnh
⇒ ₫́i tương co th̉ chưa vt ly ₫́i tương khac hay chưa tham
khao ₫́n ₫́i tương khac.
2. Đa thưa k́ trong ₫ịnh nghĩa class ⇒ 1 class co th̉ chưa nhi̀u
class con trung nhau ⇒ dung "virtual base class" ₫̉ t́i ưu hoa
b nhơ ₫́i tương.
Chương 2: Th du v̀ cac ngn ngư OOP
15
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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ơ khai nim "abstract class" ₫̉ ₫ịnh nghĩa class chỉ chưa
thng tin interface nhưng khng cho phep dung class nay ₫̉

₫ị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;
};
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 thanh viïn
4. T̀m vưc truy xu́t thng tin trong ₫́i tương :
private : thng tin bị che d́u hoan toan.
protected : chỉ che d́u bn ngoai nhưng cho phep cac ₫́i
tương con, chau, chăt... truy xu́t.
public : cho phep t́t ca moi nơi truy xu́t.
Friend class
: la class ma m̃i function cua no ₫̀u co th̉ truy
xu́t tư do m̃i thanh ph̀n cua class hin tai.
Friend function : la function co th̉ truy xu́t tư do m̃i thanh
ph̀n cua class hin tai.
Co th̉ han ch́ t̀m vưc cua thanh vin cua class cha khi thưa

k́.
Chương 2: Th du v̀ cac ngn ngư OOP
16
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 chon loc
5. Định nghĩa 'virtual function' n́u mu́n ap dung tnh ₫a hnh
trong vic gơi thng bao yu c̀u function nay thưc thi.
T́t ca cac 'virtual function' ₫ươc quan ly trong 1 danh sach
"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̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 32
Cac ₫ö́i tương ₫ï̀u tam thơi
6. Cac ₫́i tương chỉ t̀n tai tam thơi trong khng gian process.
Tham khao ₫́n ₫́i tương thưc ch́t la pointer cuc b.
chương trnh phai tư vi́t code cho hoat ₫ng save/restore ₫́i
tương n́u mu́n lưu giư/dung lai ₫́i tương.
VC++ h̃ trơ hoat ₫ng save/restore ₫́i tương nhơ kha năng

'Serialization'.
7. Co quy̀n 'override' b́t ky toan tư hay function nao cua class
cha.
8. Cho phep ₫ịnh nghĩa cac ham 'overloaded' : cung tn nhưng
'signature' khac nhau.
Chương 2: Th du v̀ cac ngn ngư OOP
17
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 34
Cếu truc 1 chương trònh Dialog based ₫ơn gian
InitInstance()
DoModal()
CProgramApp
CProgramDlg
Chương 2: Th du v̀ cac ngn ngư OOP
18
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 35
Cếu truc 1 chương trònh SDI ₫ơn gian
InitInstance()
CProgramApp
CSingleDocTemplate
CMainFrame
CProgramView
CProgramDoc
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m

Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 36
Cếu truc 1 chương trònh MDI ₫ơn gian
InitInstance()
CProgramApp
CMultiDocTemplate
CChildFrame
CProgramView
CProgramDoc
Chương 2: Th du v̀ cac ngn ngư OOP
19
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 dang cua type) va class.
2. Hö̃ trơ Đơn thưa kḯ.
3. Dung 'abstract class' ₫ï̉ ₫ịnh nghĩa interface.
4. Tềm vưc truy xuết cac thanh phền.
5. Hö̃ trơ package
6. Đa hònh ₫ềy ₫u.
7. Chỉ hö̃ trơ ₫ö́i tương tam trong session JVM
8. Override function khi thưa kḯ.
9. Co thï̉ ₫ịnh nghĩa function overloaded.
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m

Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 38
1. Chu y́u dung class ₫̉ ₫ịnh nghĩa ki̉u cho cac bi́n, thuc
tnh.
Co th̉ dung interface ₫̉ ₫ịnh nghĩa ki̉u cho cac bi́n, thuc
tnh. Đ́itương chỉ co th̉ chưa tham khao ₫́n ₫́i tương khac.
2. Phai goi ham tao ₫́i tương 1 cach tương minh, nhưng khng
₫ươc xoa ₫́i tương.
class C1 extends RootClass {...}
C1 o1; // o1 chưa tham khao ₫́n ₫́i tương C1
o1 = New C1;
3. Interface chỉ ₫ươc dung trong trương hơp ₫ăc bit va khng
tương ₫ương vơi abstract type.
4. Đơn thưa k́ trong ₫ịnh nghĩa class ⇒ m́i quan h thưa k́
giưa cac class kha ₫ơn gian.
Hö̃ trơ Class va Interface
Chương 2: Th du v̀ cac ngn ngư OOP
20
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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ơ khai nim "abstract class" ₫̉ ₫ịnh nghĩa class chưa
thng tin interface va khng cho phep 'instanciate' ₫́i tương.
Ban chỉ co th̉ dung class 'abstract class' ₫̉ ₫ăc ta ki̉u cho
cac bi́n hoăc ₫ịnh nghĩa cac 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 cac hin thưc bn trong,
nhưng thương chỉ co chưa cac 'abstract function'.
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 cac thanh phền
6. T̀m vưc truy xu́t cac thanh ph̀n trong ₫́i tương :
private : thanh ph̀n bị che d́u hoan toan.
protected : che d́u bn ngoai nhưng cho phep cac ₫́i tương
con, chau, chăt... truy xu́t.
public : cho phep t́t ca moi nơi truy xu́t.
friendly : cho phep moi ph̀n tư trong package truy xu́t. Đy
la t̀m vưc default va khng co tư khoa t̀m vưc tương minh.
Chương 2: Th du v̀ cac ngn ngư OOP
21
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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ị quan ly t̀m vưc cua java, co th̉ chưa nhi̀u
class.
package graphics;
public class Circle extends Graphic implements Draggable {
. . .
}
T́t ca moi ph̀n tư ₫ươc ₫ịnh nghĩa trong 1 file source ₫̀u
thuc 1 package : tn ₫ươc qui ₫ịnh bơi phat bi̉u package hay
la package default.
Nhi̀u file source co th̉ thuc cung 1package (dung cung tn
trong phat bi̉u package).
Hö̃ trơ package
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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 cac public function ₫ươc quan ly trong 1 danh sach
"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̀ cac ngn ngư OOP
22
Bö mön Cöng nghï phền mï̀m

Khoa CNTT
ĐHBach Khoa Tp.HCM
Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 43
Cac ₫ö́i tương ₫ï̀u 'tam thơi'
9. Cac ₫́i tương chỉ t̀n tai tam thơi trong 1session chay JVM.
Ban co th̉ tao ra cac ₫́i tương mơi ma khng c̀n xoa no.
Đ́i tương se t̀n tai mt khi con tham khao ₫́n no. Module
Garbage Collection trong JVM se chịu trach nhim phat hin
₫́i tương 'rac' va xoa no ra khoi b nhơ JVM.
10.Co quy̀n 'override' b́t ky function nao cua class cha.
11.Cho phep ₫ịnh nghĩa cac ham 'overloaded' : cung tn nhưng
'signature' khac nhau.
Chương 2: Th du v̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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̀ cac ngn ngư OOP
23
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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̀ cac ngn ngư OOP
12.34.25
AlarmClock
GUIClock
wakeup()
<<chưa>>
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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ï̀ cac 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̀ cac ngn ngư OOP
24
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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ï̀ cac 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̀ cac ngn ngư OOP
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐHBach 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ï̀ cac 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̀ cac ngn ngư OOP

×