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

PHÂN TÍCH & THIẾT KẾ HƯỚNG ĐỐI TƯỢNG DÙNG UML - SỐNG VỚI HỘI CHỨNG DOWN

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


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
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 1

Nöi dung mön hoc
1.

2.
3.

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).
n lai qui tr nh phat tri ̉n ph ̀n m ̀m hơp nh ́t.
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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Slide 2

1


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
Mön 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
ĐH Bach Khoa Tp.HCM

Slide 3

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Ï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
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 4

2


Nưi dung
1.1 Tư lêp trịnh co cếu truc ₫ḯn OOP
1.2 Đứi tương, thc tđnh, tac vu.
1.3 Abstract type va class.
1.4 Tñnh bao ₫ong.
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 quat hoa.
1.9 Tđnh vưng bï̀n.
Bư mưn Cưng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 5

Tư lêp trònh co cếu truc ₫ḯn OOP
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).
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM


Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 6

3


Tư lêp trònh co cếu truc ₫ḯn OOP
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 ́t dư
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
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 7

Tư lêp trònh co cếu truc ₫ḯn OOP
Chương tr nh = c ́u truc dư li u + giai thu t

module
(package)
entry 'start'

global data
local data
of module

local data
of function

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 8

4


Tư lêp trònh co cếu truc ₫ḯn OOP
Chương tr nh = t p cac ₫ ́i tương tương tac nhau
₫ ́i tương
(object)
entry

local data
of object


local data
of operation

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 9

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.
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML

Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 10

5


Đö́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.
Implementation

(class)
Interface
(abstract type)

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 11

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.
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 12

6


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.
Bö mön Cưng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 13

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
}
Bö mön Cöng nghï phền mï̀m

Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 14

7


Tñnh bao ₫ong (encapsulation)
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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 15


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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
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;
};
class Line extends Geometry {
int xPos2, yPos2;
// other attributes...
public Draw(Graphics g) {
// cac l nh ve ₫oan thăng
}
}

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 17

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.
Goc nh n ngư nghĩa

Goc nh n hi n
thưc

O2

O2


O1

O1
O3

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

O3

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
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;
};
class Group : public Geometry {
public:
Group( );
~Group( );
virtual void Draw( Window *pWnd ); // override
private:
// pointer container
Geometry **ppGeo;
int
geoCount;
};
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 19

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.
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 20

10


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o vao p1
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.

Bö mön Cưng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 21

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 ⇔ A chư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.
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 22


11


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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 23

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).
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 24

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 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.
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 1: Cac khai ni m cơ ban cua m h nh hương ₫ ́i tương
Slide 25

Trương Đai hoc Bach Khoa Tp. Hừ Chđ Minh
Khoa Cưng Nghï Thưng Tin

Chương 2

THĐ DU VÏ NGƯN NGƯ OOP
Visual C++
Java

Bư mưn Cưng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 26

13


2.1 Ngön ngư Visual C++

1.
2.
3.
4.
5.
6.
7.
8.

Chỉ hö̃ trơ khai niïm class.
Cho phep Đa thưa kḯ.
Dung 'abstract class' ₫ï̉ ₫ịnh nghĩa interface.
Tềm vưc truy xuết cac thanh phền.
Đa hònh co chon loc nhơ 'virtual function'
Chỉ hö̃ trơ cac ₫ö́i tương tam.
Override method khi thưa kḯ.
Co thï̉ ₫ịnh nghĩa function overloaded.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 27

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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 28

14


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;
};
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 29

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 ́.
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 30


15


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

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 31

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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
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 {....};
....
Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 33

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Cếu truc 1 chương trịnh Dialog based ₫ơn gian
InitInstance()

DoModal()

CProgramDlg
CProgramApp
Bư mưn Cưng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML

Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 34

17


Cếu truc 1 chương trịnh SDI ₫ơn gian
InitInstance()
CMainFrame

CProgramView

CProgramDoc

CSingleDocTemplate

CProgramApp
Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 35

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Cếu truc 1 chương trịnh MDI ₫ơn gian
InitInstance()
CChildFrame

CProgramView


CProgramDoc

CMultiDocTemplate

CProgramApp
Bư mưn Cưng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 36

18


2.2 Ngön ngư Java
1.
2.
3.
4.
5.
6.
7.
8.
9.

Hö̃ trơ 'interface' (1 dang cua type) va class.
Hö̃ trơ Đơn thưa kḯ.

Dung 'abstract class' ₫ï̉ ₫ịnh nghĩa interface.
Tềm vưc truy xuết cac thanh phền.
Hö̃ trơ package
Đa hịnh ₫ềy ₫u.
Chỉ hữ trơ ₫ứi tương tam trong session JVM
Override function khi thưa kḯ.
Co thï̉ ₫ịnh nghĩa function overloaded.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 37

Hö̃ trơ Class va Interface
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. Đ ́i tươ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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 38

19


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'.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 39

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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 40

20


Hö̃ trơ package
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).
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 41

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

Bö mön Cöng nghï phền mï̀m
Khoa CNTT

ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 42

21


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.

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 43

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) {...}
}
}
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 44

22


Thđ du vï̀ chương trịnh Java
GUIClock
12.34.25

<<chưa>>


AlarmClock

wakeup()

Bư mưn Cưng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 45

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;
}

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML

Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 46

23


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;
}
}
Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mưn Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 47

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;
}

Bö mön Cöng nghï phền mï̀m
Khoa CNTT
ĐH Bach Khoa Tp.HCM

Mön Phân tích & Thiết kế hướng ₫ối tượng dùng UML
Chương 2: Th du v ̀ cac ng n ngư OOP
Slide 48

24


×