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

Tài liệu Mô hình đại số quan hệ của hệ thống hướng đối tượng. potx

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 (228.81 KB, 10 trang )

Ta
.
p ch´ı Tin ho
.
c v`a Diˆe
`
u khiˆe

n ho
.
c, T.21, S.3 (2005), 261—270
M
ˆ
O H
`
INH DA
.
I S
ˆ
O
´
QUAN H
ˆ
E
.
CU

A H
ˆ
E
.


TH
ˆ
O
´
NG HU
.
´
O
.
NG
D
ˆ
O
´
I TU
.
O
.
.
NG
NGUY
ˆ
E
˜
N MA
.
NH D
´
U
.

C
1
, NGUY
ˆ
E
˜
N V
˘
AN VY
.
2
, D
˘
A
.
NG V
˘
AN D
´
U
.
C
3
1
Khoa To´an, Tru
.
`o
.
ng
Da

.
i ho
.
c Su
.
pha
.
m -
Da
.
i ho
.
c Th´ai Nguyˆen
2
Tru
.
`o
.
ng
Da
.
i ho
.
c Cˆong nghˆe
.
- Da
.
i ho
.
c Quˆo

´
c gia H`a Nˆo
.
i
3
Viˆe
.
n Cˆong nghˆe
.
thˆong tin
Abstract. This article presents semantics of object oriented system with classes, visibility, dynamic
binding and recursive methods. The class declarations and commands are served as designs in terms
of pre- and post conditions; the relations of components in system This approach shows clearer
relations of components in object oriented system, possibility of using tools and cheecking method to
improve the refinement for further development of systems. The algebraical laws are expanded for
design specification of object oriented programs.
T´om t˘a
´
t. B`ai b´ao tr`ınh b`ay ng˜u
.
ngh˜ıa cu

a hˆe
.
thˆo
´
ng hu
.
´o
.

ng
dˆo
´
i tu
.
o
.
.
ng v´o
.
i c´ac l´o
.
p, t´ınh tru
.
.
c quan,
liˆen kˆe
´
t
dˆo
.
ng v`a c´ac phu
.
o
.
ng th´u
.
c
dˆe
.

quy. C´ac khai b´ao l´o
.
p v`a c´ac lˆe
.
nh nhu
.
l`a c´ac thiˆe
´
t kˆe
´
du
.
.
a trˆen
tiˆe
`
n
diˆe
`
u kiˆe
.
n, hˆa
.
u diˆe
`
u kiˆe
.
n v`a c´ac mˆo
´
i quan hˆe

.
cu

a c´ac th`anh phˆa
`
n trong hˆe
.
thˆo
´
ng C´ach tiˆe
´
p
cˆa
.
n n`ay s˜e cho thˆa
´
y r˜o r`ang mˆo
´
i quan hˆe
.
cu

a c´ac th`anh phˆa
`
n trong hˆe
.
thˆo
´
ng hu
.

´o
.
ng
dˆo
´
i tu
.
o
.
.
ng, v`a
c´ac kha

n˘ang su
.

du
.
ng c´ac cˆong cu
.
v`a c´ach th´u
.
c kiˆe

m tra
dˆe

ca

i tiˆe

´
n d˘a
.
c ta

hˆe
.
thˆo
´
ng du
.
o
.
.
c ph´at triˆe

n
sau n`ay. Nh`o
.
d´o c´ac luˆa
.
t da
.
i sˆo
´
d˜a du
.
o
.
.

c ph´at triˆe

n ´ap du
.
ng cho viˆe
.
c
d˘a
.
c ta

chu
.
o
.
ng tr`ınh hu
.
´o
.
ng
dˆo
´
i
tu
.
o
.
.
ng.
1. GI

´
O
.
I THI
ˆ
E
.
U
Thiˆe
´
t kˆe
´
v`a ph´at triˆe

n hˆe
.
thˆo
´
ng phˆa
`
n mˆe
`
m v´o
.
i ngˆon ng˜u
.
hu
.
´o
.

ng
dˆo
´
i tu
.
o
.
.
ng l`a rˆa
´
t ph´u
.
c
ta
.
p [1, 5]. Nhiˆe
`
u nh`a nghiˆen c´u
.
u chı

ra su
.
.
cˆa
`
n thiˆe
´
t ph´at triˆe


n cˆong cu
.
h`ınh th´u
.
c h´oa l`am nˆe
`
n
ta

ng cho viˆe
.
c ph´at triˆe

n phˆa
`
n mˆe
`
m hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng. B`ai b´ao n`ay s˜e t`ım hiˆe


u c´ach th´u
.
c lˆa
.
p
tr`ınh du
.
.
a trˆen l´y thuyˆe
´
t cu

a Hoare v`a He [2], d`ung v`ao viˆe
.
c xˆay du
.
.
ng mˆo
.
t c´ach
d´ung d˘a
´
n c´ac
chu
.
o
.
ng tr`ınh hu
.

´o
.
ng
dˆo
´
i tu
.
o
.
.
ng. L´y thuyˆe
´
t lˆa
.
p tr`ınh
du
.
o
.
.
c vˆa
.
n du
.
ng
dˆe

tr`ınh b`ay ng˜u
.
ngh˜ıa

cu

a ngˆon ng˜u
.
lˆa
.
p tr`ınh hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng v´o
.
i c´ac l´o
.
p, t´ınh r˜o r`ang, liˆen kˆe
´
t
dˆo
.
ng, c´ac phu
.
o

.
ng
th´u
.
c
dˆe
.
quy v`a t´ınh dˆe
.
quy. Dˆe

cho do
.
n gia

n, nh˜u
.
ng g`ı liˆen quan
dˆe
´
n c´ac di
.
nh ngh˜ıa biˆe
´
n,
tham chiˆe
´
u t´o
.
i c´ac kiˆe


u
du
.
o
.
.
c bo

qua ([2, 6]).
O
.

dˆay, viˆe
.
c khai b´ao l´o
.
p v`a c´ac lˆe
.
nh xem nhu
.
l`a c´ac thiˆe
´
t kˆe
´
. V´o
.
i c´ach tiˆe
´
p cˆa

.
n n`ay,
c´ac lˆe
.
nh biˆe

u thi
.
quan hˆe
.
nhi
.
phˆan thˆong qua tra
.
ng th´ai cu

a c´ac biˆe
´
n, c´ac
dˆo
´
i tu
.
o
.
.
ng v`a c´ac
l´o
.
p. C´ac biˆe

´
n cu

a c´ac kiˆe

u d˜u
.
liˆe
.
u nguyˆen thu

y vˆa
˜
n nhˆa
.
n c´ac gi´a tri
.
tu
.
o
.
ng ´u
.
ng v´o
.
i kiˆe

u cu

a

ch´ung. Trong khi
d´o, tra
.
ng th´ai c´ac dˆo
´
i tu
.
o
.
.
ng
du
.
o
.
.
c biˆe

u diˆe
˜
n b˘a
`
ng bˆo
.
c´ac gi´a tri
.
cu

a thuˆo
.

c
t´ınh v´o
.
i t´ınh
dˆe
.
quy. Phu
.
o
.
ng th´u
.
c
du
.
o
.
.
c coi nhu
.
l`a thiˆe
´
t kˆe
´
v´o
.
i tˆa
.
p c´ac tham sˆo
´

, bˆo
.
l´o
.
p.
Tra
.
ng th´ai bao gˆo
`
m thˆong tin mˆoi tru
.
`o
.
ng cˆa
`
n thiˆe
´
t
dˆe

hˆo
˜
tro
.
.
cho viˆe
.
c kiˆe

m tra t´ınh x´ac

di
.
nh
d´ung(well definedness) cu

a d˘a
.
c ta

. Trong tru
.
`o
.
ng ho
.
.
p chung, chu
.
o
.
ng tr`ınh
du
.
o
.
.
c mˆo h`ınh h´oa
b˘a
`
ng thiˆe

´
t kˆe
´
c´o da
.
ng WF

D. O
.

dˆay, WF thiˆe
´
t lˆa
.
p t´ınh x´ac di
.
nh d´ung cu

a chu
.
o
.
ng tr`ınh
262
NGUY
ˆ
E
˜
N MA
.

NH D
´
U
.
C, NGUY
ˆ
E
˜
N V
˘
AN VY
.
,
D
˘
A
.
NG V
˘
AN D
´
U
.
C
v`a thiˆe
´
t kˆe
´
D d´ong vai tr`o nhu
.

d˘a
.
c ta

h`anh vi cu

a n´o. H`anh vi n`ay kˆe
´
t ho
.
.
p kiˆe

u
dˆo
.
ng v`a co
.
cˆa
´
u kiˆe

m tra v´o
.
i ng˜u
.
ngh˜ıa r˜o r`ang hu
.
´o
.

ng
d˘a
.
c ta

truyˆe
`
n thˆo
´
ng. Thˆong qua c´ac th`anh phˆa
`
n
dˆe

chı

r˜o t´ınh chˆa
´
t cu

a l´o
.
p v`a ´y ngh˜ıa c´ac phu
.
o
.
ng th´u
.
c cu


a ch´ung. C˜ung nhu
.
c´ac lˆe
.
nh, khai
b´ao c´ac l´o
.
p biˆe

u thi
.
quan hˆe
.
nhi
.
phˆan thˆong qua c´ac tra
.
ng th´ai. Mˆo
˜
i khai b´ao cung cˆa
´
p c´ac
thˆong tin ng˜u
.
ca

nh vˆe
`
cˆa
´

u tr´uc cu

a l´o
.
p v`a quan hˆe
.
cu

a ch´ung v´o
.
i nh˜u
.
ng l´o
.
p kh´ac.
Trong b`ai b´ao n`ay, ch´ung tˆoi
du
.
a ra mˆo
.
t c´ach xˆay du
.
.
ng
d˘a
.
c ta

lˆogic c´ac chu
.

o
.
ng tr`ınh
hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng nhu
.
l`a su
.
.
mo
.

rˆo
.
ng cu

a c´ac chuˆa

n lˆogic trong [2]. Tru

.
´o
.
c hˆe
´
t x´et mˆo h`ınh
t´ınh to´an cu

a hˆe
.
thˆo
´
ng.
2. M
ˆ
O H
`
INH T
´
INH TO
´
AN
Mˆo
.
t chu
.
o
.
ng tr`ınh lˆe
.

nh
du
.
o
.
.
c x´ac
di
.
nh b˘a
`
ng c˘a
.
p
(α, P )
, trong d´o:
• α
biˆe

u thi
.
tˆa
.
p c´ac biˆe
´
n d˜a biˆe
´
t trong chu
.
o

.
ng tr`ınh.
• P
l`a tˆa
.
p to´an tu
.

x´ac
di
.
nh quan hˆe
.
gi˜u
.
a c´ac gi´a tri
.
kho
.

i ta
.
o cu

a c´ac biˆe
´
n trong chu
.
o
.

ng
tr`ınh v`a c´ac gi´a tri
.
kˆe
´
t th´uc cu

a n´o v`a c´o da
.
ng
p(x)  R(x, x

)
, cu
.
thˆe

ho
.
n nhu
.
sau:
p(x)  R(x, x) df ok

p(x) ⇒ ok
 ∧
R(x, x

),
trong d´o,

p(x)
du
.
o
.
.
c go
.
i l`a tiˆe
`
n
diˆe
`
u kiˆe
.
n v`a pha

i c´o gi´a tri
.
true tru
.
´o
.
c khi chu
.
o
.
ng tr`ınh b˘a
´
t

dˆa
`
u.
R(x, x

)
go
.
i l`a hˆa
.
u diˆe
`
u kiˆe
.
n nhˆa
.
n du
.
o
.
.
c sau khi chu
.
o
.
ng tr`ınh kˆe
´
t th´uc.
x
v`a

x

biˆe

u diˆe
˜
n
gi´a tri
.
kho
.

i
dˆa
`
u v`a kˆe
´
t th´uc cu

a biˆe
´
n
x
trong chu
.
o
.
ng tr`ınh.
ok
v`a

ok

l`a c´ac biˆe
´
n lˆogic mˆo ta

tra
.
ng th´ai h`anh vi ban
dˆa
`
u v`a cuˆo
´
i cu

a chu
.
o
.
ng tr`ınh: nˆe
´
u chu
.
o
.
ng tr`ınh
du
.
o
.

.
c k´ıch hoa
.
t ho
.
.
p
th´u
.
c
ok
l`a true, nˆe
´
u viˆe
.
c thu
.
.
c hiˆe
.
n chu
.
o
.
ng tr`ınh cuˆo
´
i c`ung th`anh cˆong
ok

l`a true. Ngu

.
o
.
.
c la
.
i
ch´ung l`a false. K´y hiˆe
.
u
df
du
.
o
.
.
c hiˆe

u l`a “
du
.
o
.
.
c
di
.
nh ngh˜ıa”.
Dˆe


h`ınh th´u
.
c h´oa h`anh vi cu

a chu
.
o
.
ng tr`ınh hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng, mˆo h`ınh t´ınh to´an trong
b`ai n`ay c´o c´ac
d˘a
.
c tru
.
ng nhu
.
sau
dˆay:

1. Mˆo
.
t chu
.
o
.
ng tr`ınh hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng hoa
.
t
dˆo
.
ng khˆong chı

v´o
.
i c´ac biˆe
´
n (chung v`a

di
.
a
phu
.
o
.
ng) m`a c`on ca

c´ac
dˆo
´
i tu
.
o
.
.
ng.
Dˆe

da

m ba

o truy cˆa
.
p c´ac biˆe
´
n, mˆo h`ınh cˆa
`

n thˆem tˆa
.
p c´ac
biˆe
´
n thuˆo
.
c t´ınh bˆo

sung v`ao tˆa
.
p c´ac biˆe
´
n chung v`a riˆeng
d˜a biˆe
´
t trong chu
.
o
.
ng tr`ınh.
2. Do cˆa
´
u tr´uc cu

a l´o
.
p con, mˆo
.
t

dˆo
´
i tu
.
o
.
.
ng c´o thˆe

n˘a
`
m trong l´o
.
p con bˆa
´
t k`y cu

a mˆo
.
t tˆo

ch´u
.
c
du
.
o
.
.
c khai b´ao. Nhu

.
o
.

kˆe
´
t qua

, h`anh vi cu

a phu
.
o
.
ng th´u
.
c
d´o s˜e phu
.
thuˆo
.
c v`ao kiˆe

u hiˆe
.
n
ta
.
i cu


a n´o.
Dˆe

hˆo
˜
tro
.
.
co
.
cˆa
´
u liˆen kˆe
´
t
dˆo
.
ng cu

a phu
.
o
.
ng th´u
.
c go
.
i, mˆo h`ınh s˜e lu
.
u gi˜u

.
vˆe
´
t cu

a
kiˆe

u
dˆo
.
ng cho mˆo
˜
i dˆo
´
i tu
.
o
.
.
ng. Kha

n˘ang n`ay l`a ph`u ho
.
.
p v´o
.
i c´ac biˆe

u th´u

.
c v`a c´ac lˆe
.
nh trong
pha
.
m vi m`a mˆo
˜
i biˆe
´
n ´u
.
ng v´o
.
i mˆo
.
t ba

n ghi ho
.
.
p th´u
.
c.
3. C˜ung nhu
.
trong c´ac ngˆon ng˜u
.
lˆe
.

nh, mˆo
.
t tra
.
ng th´ai cu

a biˆe
´
n l`a gi´a tri
.
du
.
o
.
.
c ta
.
o ra ta
.
i
mˆo
.
t th`o
.
i
diˆe

m. Mˆo
.
t dˆo

´
i tu
.
o
.
.
ng c´o thˆe

ch´u
.
a nhiˆe
`
u thuˆo
.
c t´ınh cu

a n´o, v`a gi´a tri
.
c´ac thuˆo
.
c t´ınh
thu
.
`o
.
ng
du
.
o
.

.
c biˆe

u diˆe
˜
n bo
.

i bˆo
.
h˜u
.
u ha
.
n l`a c´ac mˆa

u tin cu

a kiˆe

u hiˆe
.
n ta
.
i cu

a
dˆo
´
i tu

.
o
.
.
ng v`a
nh˜u
.
ng gi´a tri
.
cu

a c´ac thuˆo
.
c t´ınh
d´o (c´o t´ınh dˆe
.
quy).
V`ı chu
.
o
.
ng tr`ınh hu
.
´o
.
ng
dˆo
´
i tu
.

o
.
.
ng
du
.
o
.
.
c biˆe

u diˆe
˜
n bo
.

i quan hˆe
.
hai ngˆoi
(α, P ), α
l`a tˆa
.
p
c´ac biˆe
´
n mˆo ta

mˆoi tru
.
`o

.
ng trong
d´o chu
.
o
.
ng tr`ınh
du
.
o
.
.
c thi h`anh,
α
c´o thˆe

du
.
o
.
.
c chia 3 phˆa
`
n
nhu
.
sau:
1. Phˆa
`
n th´u

.
nhˆa
´
t cung cˆa
´
p c´ac thˆong tin ng˜u
.
ca

nh l´o
.
p v`a c´ac quan hˆe
.
cu

a ch´ung:

cname: Tˆa
.
p c´ac l´o
.
p
d˜a du
.
o
.
.
c khai b´ao.

superclass: H`am bˆo

.
phˆa
.
n m`a ´anh xa
.
t`u
.
l´o
.
p t´o
.
i l´o
.
p cha cu

a n´o, t´u
.
c l`a
superclass(M ) =
N,
v´o
.
i
N
l`a l´o
.
p cha cu

a l´o
.

p
M. N
du
.
o
.
.
c go
.
i l`a l´o
.
p cha cu

a
M,
nˆe
´
u tˆo
`
n ta
.
i ho
.
h˜u
.
u ha
.
n
M
ˆ

O H
`
INH DA
.
I S
ˆ
O
´
QUAN H
ˆ
E
.
CU

A H
ˆ
E
.
TH
ˆ
O
´
NG HU
.
´
O
.
NG
D
ˆ

O
´
I TU
.
O
.
.
NG
263
{N
i
|0  i  n}
sao cho l´o
.
p
M = N
0
v`a
N = N
n
v`a
superclass(N
i
) = N
i+1
v´o
.
i mo
.
i

0  i < n.
2. Phˆa
`
n th´u
.
2 mˆo ta

chi tiˆe
´
t cˆa
´
u tr´uc cu

a mˆo
˜
i l´o
.
p: v´o
.
i mˆo
˜
i l´o
.
p
N ∈
cname, n´o bao gˆo
`
m:

attribute(

N
): tˆa
.
p c´ac thuˆo
.
c t´ınh (du
.
o
.
.
c khai b´ao ho˘a
.
c kˆe
´
th`u
.
a) cu

a l´o
.
p
N
{a
1
: U
1
, c
1
, , a
m

: U
m
, c
m
}
trong d´o
U
i
v`a
c
i
d´ong vai tr`o l`a kiˆe

u v`a gi´a tri
.
kho
.

i
dˆa
`
u cu

a thuˆo
.
c t´ınh ai trong l´o
.
p
N
, v`a

s˜e tham chiˆe
´
u bo
.

i c´ac h`am type(
N.a
i
)
v`a initial
(N.a
i
)
(s˜e du
.
o
.
.
c tha

o luˆa
.
n sau).

meth(
N
): Tˆa
.
p c´ac phu
.

o
.
ng th´u
.
c
du
.
o
.
.
c khai b´ao ho˘a
.
c kˆe
´
th`u
.
a bo
.

i
N :
{m
1
→ (x
1
: T
1,1
, y
1
: T

1,2
, z
1
: T
1,3
, D
1
),

m
k
→ (x
k
: T
k,1
, y
k
: T
k,2
, z
k
: T
k,3
, D
k
)}
trong d´o, phu
.
o
.

ng th´u
.
c
m
i
c´o
x
i
, y
i
v`a
z
i
tu
.
o
.
ng ´u
.
ng l`a gi´a tri
.
, kˆe
´
t qua

v`a gi´a tri
.
tham sˆo
´
kˆe

´
t
qua

. H`anh vi cu

a phu
.
o
.
ng th´u
.
c
m
i
du
.
o
.
.
c biˆe

u diˆe
˜
n bo
.

i thiˆe
´
t kˆe

´
D
i
.
3. Phˆa
`
n th´u
.
3 nhˆa
.
n biˆe
´
t c´ac biˆe
´
n m`a ch´ung su
.

du
.
ng
du
.
o
.
.
c bo
.

i chu
.

o
.
ng tr`ınh:

alphabet: Tˆa
.
p c´ac biˆe
´
n chung d˜a biˆe
´
t trong chu
.
o
.
ng tr`ınh:
{x
1
: T
1
, , x
n
: T
n
}.
O
.

dˆay
T
i

biˆe

u diˆe
˜
n kiˆe

u cu

a biˆe
´
n
x
i
,
c´o thˆe

l`a mˆo
.
t trong sˆo
´
kiˆe

u d˜u
.
liˆe
.
u
do
.
n gia


n (Boolean: B, sˆo
´
nguyˆen: int, sˆo
´
thu
.
.
c:
R
, xˆau: string), ho˘a
.
c tˆen l´o
.
p v`a
du
.
o
.
.
c tham chiˆe
´
u bo
.

i h`am type(
x
i
).


locvar: Tˆa
.
p c´ac biˆe
´
n di
.
a phu
.
o
.
ng trong pha
.
m vi
{v
1
: T
1
, , v
m
: T
m
}.

visibleattr: Tˆa
.
p c´ac thuˆo
.
c t´ınh tu
.
`o

.
ng minh trong l´o
.
p hiˆe
.
n ta
.
i, t´u
.
c l`a tˆa
´
t ca

thuˆo
.
c t´ınh
d˜a du
.
o
.
.
c khai b´ao thuˆo
.
c miˆe
`
n private, protected v`a public (
d˜a khai b´ao ho˘a
.
c kˆe
´

th`u
.
a) cu

a l´o
.
p.
Dˆe

thuˆa
.
n lo
.
.
i, ch´ung ta th`u
.
a nhˆa
.
n c´o 4 tˆa
.
p tˆen kh´ac nhau: tˆen biˆe
´
n, tˆen l´o
.
p, tˆen thuˆo
.
c t´ınh
v`a tˆen phu
.
o

.
ng th´u
.
c. Tra
.
ng th´ai mˆo h`ınh liˆen kˆe
´
t c´ac biˆe
´
n trong c´ac tˆa
.
p alphabet v`a locvar
v´o
.
i c´ac gi´a tri
.
hiˆe
.
n th`o
.
i cu

a ch´ung. Nˆe
´
u biˆe
´
n l`a
dˆo
´
i tu

.
o
.
.
ng th`ı gi´a tri
.
cu

a n´o s˜e l`a mˆo
.
t bˆo
.
gi´a
tri
.
cu

a c´ac thuˆo
.
c t´ınh v´o
.
i kiˆe

u hiˆe
.
n ta
.
i:
{myclass → M} ∪ {a → value | a ∈ attribue(M )}.
3. BI

ˆ
E

U TH
´
U
.
C
Mˆo
.
t biˆe

u th´u
.
c c´o thˆe

c´o mˆo
.
t trong c´ac da
.
ng nhu
.
sau [2, 3]:
e ::= x | null | new N | e is N | (N)e | e.a | (e; a : f) | f(e) | self.
Dˆe

x´ac di
.
nh t´ınh ho
.

.
p lˆe
.
cu

a biˆe

u th´u
.
c
e
, ta du
.
a ra x´ac nhˆa
.
n
D(e)
, n´o l`a d´ung trong
tru
.
`o
.
ng ho
.
.
p m`a biˆe

u th´u
.
c

e
c´o thˆe

du
.
o
.
.
c
di
.
nh gi´a th`anh cˆong.
Mˆo
.
t biˆe
´
n
x
du
.
o
.
.
c go
.
i l`a x´ac
di
.
nh d´ung nˆe
´

u n´o d˜a biˆe
´
t trong chu
.
o
.
ng tr`ınh.
D(x) df x ∈ (alphabet ∪ locvar).
K´y hiˆe
.
u null biˆe

u diˆe
˜
n mˆo
.
t dˆo
´
i tu
.
o
.
.
ng x´ac
di
.
nh d´ung.
D(null) df true, type(null) df NULL,
o
.


dˆay NULL l`a tˆen l´o
.
p
d˘a
.
c biˆe
.
t. Ta quy u
.
´o
.
c r˘a
`
ng
NULL  N
v´o
.
i mo
.
i
N ∈ cname.
Biˆe

u th´u
.
c
newN
l`a x´ac di
.

nh d´ung nˆe
´
u l´o
.
p
N
d˜a du
.
o
.
.
c khai b´ao.
D(newN) df N ∈ cname.
N´o chı

ra mˆo
.
t dˆo
´
i tu
.
o
.
.
ng m´o
.
i cu

a l´o
.

p
N
d˜a du
.
o
.
.
c ta
.
o ra.
type(newN) df N,
newN df
{myclass → N} ∪ U {a ∈ attribute (N)) | a → initial(N.a)}.
264
NGUY
ˆ
E
˜
N MA
.
NH D
´
U
.
C, NGUY
ˆ
E
˜
N V
˘

AN VY
.
,
D
˘
A
.
NG V
˘
AN D
´
U
.
C
Kiˆe

u thu
.

nghiˆe
.
m (test)
e
is
N
l`a biˆe

u th´u
.
c (lˆogic) x´ac

di
.
nh d´ung khi
N
d˜a du
.
o
.
.
c khai b´ao
v`a
e
l`a dˆo
´
i tu
.
o
.
.
ng x´ac
di
.
nh d´ung
D(e is N ) df (N ∈ cname)

D(e)

(type(e) ∈ cname),
type(e is N ) df
B

Gi´a tri
.
cu

a biˆe

u th´u
.
c
du
.
o
.
.
c x´ac
di
.
nh r˜o b˘a
`
ng gi´a tri
.
cu

a
e
l`a dˆo
´
i tu
.
o

.
.
ng cu

a l´o
.
p
N
hay
khˆong.
(e is N ) df (e = null)

(e(myclass)  N).
Kiˆe

u t´ınh gˆo
.
p (cast)
(N)e
b˘a
`
ng
e
nˆe
´
u n´o l`a dˆo
´
i tu
.
o

.
.
ng kh´ac null trong l´o
.
p con cu

a
N
D((N)e) df D(e is N)

(e = null)

(e(myclass)  N), (N)e df e.
Kiˆe

u cu

a
(N)e
l`a l´o
.
p
N : type((N )e) df N.
Thuˆo
.
c t´ınh lu
.
.
a cho
.

n
e.a
l`a x´ac di
.
nh d´ung khi
e
l`a dˆo
´
i tu
.
o
.
.
ng kh´ac null, v`a l`a thuˆo
.
c t´ınh
hiˆe

n nhiˆen t`u
.
l´o
.
p hiˆe
.
n ta
.
i
D(e.a) df D(e)

(type(e) ∈ cname)


(e = null)

(e(myclass).a) ∈ visibleattr,
e.a df
e(a), type(e.a) df type(e(myclass).a).
Thuˆo
.
c t´ınh cˆa
.
p nhˆa
.
t
(e; a : f)
l`a x´ac di
.
nh d´ung v´o
.
i
diˆe
`
u kiˆe
.
n l`a
e.a
l`a hiˆe

n hiˆe
.
n v`a kiˆe


u
cu

a
f
l`a kiˆe

u con cu

a
e.a
D(e; a : f) df D(e.a)

D(f)

(type(f)  type(e(myclass).a)).
Kiˆe

u cu

a
(e; a : f)
l`a l´o
.
p cu

a
e,
v`a gi´a tri

.
cu

a n´o c´o thˆe

thu nhˆa
.
n du
.
o
.
.
c t`u
.
gi´a tri
.
cu

a
e
b˘a
`
ng c´ach thay dˆo

i gi´a tri
.
cu

a thuˆo
.

c t´ınh
a
cho gi´a tri
.
cu

a
f
type(e; a : f) df
type(e), (e; a : f) df e ⊕ {a → f }.
V´ı du
.
sau x´ac di
.
nh d´ung cu

a biˆe

u th´u
.
c c`ai
d˘a
.
t:
D(e and f ) df D(e)

(type(e) = B)

D(f )


(type(f ) = B).
Biˆe
´
n self c´o thˆe

chı

du
.
o
.
.
c tham kha

o trong
di
.
nh ngh˜ıa cu

a c´ac phu
.
o
.
ng th´u
.
c, v`a
du
.
o
.

.
c coi
nhu
.
l`a biˆe
´
n
di
.
a phu
.
o
.
ng trong mˆo h`ınh cu

a ch´ung tˆoi:
D(self) df self ∈ locvar.
4. C
´
AC L
ˆ
E
.
NH
Phˆa
`
n n`ay xem x´et c´ac lˆe
.
nh hˆo
˜

tro
.
.
viˆe
.
c xˆay du
.
.
ng chu
.
o
.
ng tr`ınh hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng tiˆeu biˆe

u
[3].
c ::= |skip | chaos | c  b  c | cΠc | c; c | b ∗ c | varx : T | endx | le := e | o.m(e).
O

.

dˆay
b
l`a biˆe

u th´u
.
c lˆogic,
c
l`a lˆe
.
nh,
e
l`a mˆo
.
t biˆe

u th´u
.
c,
le
l`a c´o thˆe

xuˆa
´
t hiˆe
.
n o
.


vˆe
´
tr´ai cu

a
ph´ep g´an v`a c´o da
.
ng
le ::= x|le.a
v´o
.
i
x
l`a biˆe
´
n do
.
n c`on
a
l`a thuˆo
.
c t´ınh cu

a dˆo
´
i tu
.
o
.

.
ng.
skip (bo

qua): skip khˆong l`am g`ı, v`a cuˆo
´
i c`ung l`a th`anh cˆong:
skip df ∅ : (true  true).
chaos (khˆong x´ac di
.
nh): chaos h`anh vi cu

a n´o khˆong x´ac di
.
nh tru
.
´o
.
c
du
.
o
.
.
c:
chaos df ∅ : (false  true).
conditional (diˆe
`
u kiˆe
.

n): Cho
P
v`a
Q
l`a c´ac thiˆe
´
t kˆe
´
.
P  b  Q
chu
.
o
.
ng tr`ınh thu
.
.
c hiˆe
.
n
P
nˆe
´
u gi´a tri
.
b
l`a true, ngu
.
o
.

.
c la
.
i thu
.
.
c hiˆe
.
n
Q.
M
ˆ
O H
`
INH DA
.
I S
ˆ
O
´
QUAN H
ˆ
E
.
CU

A H
ˆ
E
.

TH
ˆ
O
´
NG HU
.
´
O
.
NG
D
ˆ
O
´
I TU
.
O
.
.
NG
265
P  b  Q df
(D(b)

type(b) = B) → (P

b ∨ Q

¬b).
Cho

{P i | 1  i  n}
l`a mˆo
.
t ho
.
cu

a thiˆe
´
t kˆe
´
. Su
.
.
luˆan phiˆen if
{(b
i
→ P
i
) | 1  i  n}fi,
v´o
.
i viˆe
.
c cho
.
n
P
i
dˆe


thu
.
.
c hiˆe
.
n nˆe
´
u
b
i
l`a true. Khi mo
.
i
b
i
l`a false th`ı khˆong x´ac di
.
nh (chaos).
non-determinism (khˆong tiˆe
`
n
di
.
nh): Cho
P
v`a
Q
l`a c´ac thiˆe
´

t kˆe
´
. K´y hiˆe
.
u
P ΠQ
biˆe

u diˆe
˜
n
cho chu
.
o
.
ng tr`ınh
du
.
o
.
.
c thu
.
.
c hiˆe
.
n
P
ho˘a
.

c
Q,
nhu
.
ng s˜e khˆong
du
.
o
.
.
c cho
.
n tru
.
´o
.
c:
P ΠQ df P V Q.
composition (cˆa
´
u th`anh): Cho
P
v`a
Q
l`a c´ac thiˆe
´
t kˆe
´
, th`anh phˆa
`

n cˆa
´
u tr´uc cu

a ch´ung:
P ; Q
, mˆo ta

chu
.
o
.
ng tr`ınh c´o thˆe

du
.
o
.
.
c thu
.
.
c hiˆe
.
n
P
tru
.
´o
.

c, khi
P
kˆe
´
t th´uc th`ı
Q
s˜e b˘a
´
t dˆa
`
u,
tra
.
ng th´ai kˆe
´
t th´uc cu

a
P
l`a ph`u ho
.
.
p cho tra
.
ng th´ai b˘a
´
t
dˆa
`
u cu


a
Q.
P (s, s

); Q(s, s

) df ∃m • P (s, m)

Q(m, s

).
iteration (l˘a
.
p): Cho
P
l`a mˆo
.
t thiˆe
´
t kˆe
´
,
b
l`a mˆo
.
t diˆe
`
u kiˆe
.

n, k´y hiˆe
.
u
b ∗ P
: ngh˜ıa l`a
P
du
.
o
.
.
c
thu
.
.
c hiˆe
.
n ch`u
.
ng n`ao
b
c`on l`a true tru
.
´o
.
c mˆo
˜
i lˆa
`
n l˘a

.
p:
b ∗ P df µX • (P ; X)  b  skip.
assignment (g´an): Lˆe
.
nh g´an c´o da
.
ng
le := e,
o
.

dˆay
le
l`a mˆo
.
t trong c´ac da
.
ng sau dˆay: biˆe
´
n
x
cu

a chu
.
o
.
ng tr`ınh, thuˆo
.

c t´ınh
le.a
cu

a dˆo
´
i tu
.
o
.
.
ng
le,
dˆo
´
i tu
.
o
.
.
ng v´o
.
i kiˆe

u khuˆon mˆa
˜
u
(N)le.
Khai b´ao biˆe
´

n: Mˆo
.
t c´ach h`ınh th´u
.
c, viˆe
.
c khai b´ao v`a kˆe
´
t th´uc khai b´ao biˆe
´
n
v
du
.
o
.
.
c x´ac
di
.
nh bo
.

i:
var v : T df v ∈ (alphabet ∪ locvar) ⇒ locvar : (true  locvar

= locvar ∪ {v : T },
end v df
v ∈ locvar ⇒ locvar : (true  locvar


= {v}  locvar),
o
.

dˆay
{v}  locvar
biˆe

u diˆe
˜
n tˆa
.
p locvar sau khi d˜a loa
.
i bo

biˆe
´
n
v.
Diˆe
`
u d´o gia

i th´ıch r˘a
`
ng:
nh˜u
.
ng r`ang buˆo

.
c trong tˆa
.
p locvar khˆong cho ph´ep
di
.
nh ngh˜ıa la
.
i biˆe
´
n trong pha
.
m vi cu

a n´o.
Method call (phu
.
o
.
ng th´u
.
c go
.
i): Cho
v, r
v`a
vr
l`a danh s´ach c´ac biˆe

u th´u

.
c. Chu
.
o
.
ng tr`ınh
O.m(v, r, vr)
g´an c´ac tham biˆe
´
n hiˆe
.
n ta
.
i
v
v`a
vr
c´ac gi´a tri
.
ch´ınh th´u
.
c v`a gi´a tri
.
tham biˆe
´
n
kˆe
´
t qua


trong phu
.
o
.
ng th´u
.
c
m
cu

a dˆo
´
i tu
.
o
.
.
ng
O
v`a sau d´o thu
.
.
c hiˆe
.
n c´ac lˆe
.
nh trong phˆa
`
n thˆan
cu


a phu
.
o
.
ng th´u
.
c
m.
Sau khi n´o kˆe
´
t th´uc, c´ac gi´a tri
.
kˆe
´
t qua

v`a gi´a tri
.
tham sˆo
´
kˆe
´
t qua

cu

a
m
du

.
o
.
.
c tra

la
.
i cho c´ac tham biˆe
´
n hiˆe
.
n ta
.
i l`a
v
v`a
vr.
O.m(v, r, vr) df
(D(O)

type(O) ∈ cname

m ∈ meth(O(myclass))) ⇒
if{(O(myclass) = N →







var self : N, x, T 1, y : T2, z : T 3;
self, x, z := O, v, r, vr;
N.m
O, v, r, vr := self, y, z;
end self, x, y, z;






N  type(O) ∧ m ∈ meth(N)}fi.
O
.

dˆay:
• x, y
v`a
z
l`a gi´a tri
.
, kˆe
´
t qua

v`a gi´a tri
.
tham biˆe
´

n kˆe
´
t qua

trong phu
.
o
.
ng th´u
.
c
m
cu

a
l´o
.
p
O(myclass); T 1, T 2
v`a
T 3
l`a c´ac kiˆe

u cu

a ch´ung;
N.m
d´ong vai tr`o thiˆe
´
t kˆe

´
liˆen kˆe
´
t v´o
.
i
phu
.
o
.
ng th´u
.
c
m
cu

a l´o
.
p
N.

self gi´a tri
.
tham sˆo
´
kˆe
´
t qua

tu

.
`o
.
ng minh
du
.
o
.
.
c su
.

du
.
ng quy cho
dˆo
´
i tu
.
o
.
.
ng c´o phu
.
o
.
ng
th´u
.
c hoa

.
t
dˆo
.
ng hiˆe
.
n ta
.
i r`ang buˆo
.
c v´o
.
i
dˆo
´
i tu
.
o
.
.
ng
O.
266
NGUY
ˆ
E
˜
N MA
.
NH D

´
U
.
C, NGUY
ˆ
E
˜
N V
˘
AN VY
.
,
D
˘
A
.
NG V
˘
AN D
´
U
.
C
5. KHAI B
´
AO L
´
O
.
P

5.1. Khai b´ao l´o
.
p
Bank
name
address
withdraw(ID, amount)
getBalance(ID, res)
newAcount(name, amount)
Account
aID: int
balance: int
withdraw(amount)
getBalance()
CA
withdraw(amount)
SA
withdraw(amount)
Bank
name
address
withdraw(ID, amount)
getBalance(ID, res)
newAcount(name, amount)
Bank
name
address
withdraw(ID, amount)
getBalance(ID, res)
newAcount(name, amount)

Account
aID: int
balance: int
withdraw(amount)
getBalance()
Account
aID: int
balance: int
withdraw(amount)
getBalance()
CA
withdraw(amount)
CA
withdraw(amount)
SA
withdraw(amount)
SA
withdraw(amount)
H`ınh 1. Hˆe
.
thˆo
´
ng Bank
Trong phˆa
`
n n`ay s˜e xem x´et chi tiˆe
´
t viˆe
.
c khai b´ao l´o

.
p, t´ınh x´ac
di
.
nh d´ung cu

a ch´ung [2].
Mˆo
.
t chu
.
o
.
ng tr`ınh hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng c´o thˆe

du
.
o

.
.
c chı

ra bo
.

i da
.
ng cdecls
•P.
N´o b˘a
´
t dˆa
`
u b˘a
`
ng
phˆa
`
n khai b´ao mˆo
.
t sˆo
´
l´o
.
p tiˆe
´
p sau l`a khˆo
´

i lˆe
.
nh
P
biˆe

u diˆe
˜
n phu
.
o
.
ng th´u
.
c main cu

a chu
.
o
.
ng
tr`ınh. Viˆe
.
c khai b´ao l´o
.
p cdecls c´o thˆe

theo ngˆon ng˜u
.
tu

.
.
a Java nhu
.
sau:
[private] class
N
[extends
M
]
pri :
t
1
: T
1
, , t
i
: T
i
;
pro:
u
1
: U
1
, , u
j
: U
j
;

pub:
v
1
: V
1
, , v
k
: V
k
;
meth:
m
1
(x
11
: T
11
, y
12
: T
12
, z
13
: T
13
){P
1
};

m


(x
1
: T
1
, y
2
: T
2
, z
3
: T
3
){P

};
end
N
O
.

dˆay,
N
l`a tˆen l´o
.
p
du
.
o
.

.
c khai b´ao v`a
M
l`a l´o
.
p cha cu

a n´o. Nˆe
´
u khˆong c´o private th`ı l´o
.
p
N
du
.
o
.
.
c khai b´ao ngˆa
`
m
di
.
nh kiˆe

u public. Phˆa
`
n pri di
.
nh ngh˜ıa c´ac c´ac thuˆo

.
c t´ınh riˆeng (private)
cu

a l´o
.
p
N.
Phˆa
`
n pro di
.
nh ngh˜ıa c´ac thuˆo
.
c t´ınh du
.
o
.
.
c ba

o vˆe
.
(protected) cu

a
N
. Phˆa
`
n pub

di
.
nh ngh˜ıa c´ac thuˆo
.
c t´ınh chung (public) cho l´o
.
p N. Phˆa
`
n meth khai b´ao c´ac phu
.
o
.
ng th´u
.
c
cu

a l´o
.
p
N,
trong d´o
m
1
, m
2
, , m

l`a c´ac phu
.

o
.
ng th´u
.
c, o
.

dˆay
(x
i1
: T
i1
), (y
i2
: T
i2
), (z
i3
: T
i3
)
v`a
p
i
biˆe

u diˆe
˜
n gi´a tri
.

, kˆe
´
t qua

, gi´a tri
.
tham biˆe
´
n kˆe
´
t qua

v`a phˆa
`
n thˆan cu

a phu
.
o
.
ng th´u
.
c
m
i
.
V´ı du
.
: X´et hˆe
.

thˆo
´
ng Bank do
.
n gia

n
du
.
o
.
.
c minh ho
.
a bo
.

i biˆe

u
dˆo
`
l´o
.
p UML [7] trong h`ınh
v˜e 1. Account l`a l´o
.
p a

o c´o hai l´o

.
p con l`a Current Account (CA) v`a Saving Account (SA).
Viˆe
.
c khai b´ao l´o
.
p Account
du
.
o
.
.
c chı

ra bo
.

i declAccount nhu
.
sau:
class Account
pro: aID: int, balance: int;
meth:
getBalance(0,
b
: int, 0)
{ b := balance };
withdraw(x : int, 0, 0) { balance  x  balance’ = balance - x};
M
ˆ

O H
`
INH DA
.
I S
ˆ
O
´
QUAN H
ˆ
E
.
CU

A H
ˆ
E
.
TH
ˆ
O
´
NG HU
.
´
O
.
NG
D
ˆ

O
´
I TU
.
O
.
.
NG
267
end Account
Viˆe
.
c khai b´ao declCA cu

a CA nhu
.
sau:
class CA extends Account
meth: withdraw(x: int, 0, 0) { balance := balance - x};
end CA
Viˆe
.
c khai b´ao declSA cu

a SA nhu
.
sau:
class SA extends Account
meth: withdraw(x: int, 0, 0) { skip  (balance < x) (balance := balance -x)};
end SA

Viˆe
.
c khai b´ao declBank cu

a Bank nhu
.
sau:
class Bank
pri: name: string, address: string, ac: Account, y: Account, A: set(Account)
meth: getBalance(aID: int, b: int, 0) {skip  (∃!ac ∈ A)  ac.aID = aID 
if { y.aID = aID → y. getBalance(b)|y ∈ A}f i};
withdraw(aID: int, x: int, 0) {skip  (∃!ac ∈ A)  ac.aID = aID 
if {y.aID = aIDy.withdraw (x)|y ∈ A}f i};
newAccount(a: int b: boolean, 0) {
var x : Account;
(x := new CA(a); )  b  (x := new SA(a); )
A := A ∪ {x}};
end Bank
Viˆe
.
c khai b´ao l´o
.
p cdecl go
.
i l`a x´ac
di
.
nh d´ung, du
.
o

.
.
c chı

ra bo
.

i WD(cdecl) khi tho

a m˜an
c´ac
diˆe
`
u kiˆe
.
n sau dˆay [2, 3]: a) N v`a M l`a kh´ac biˆe
.
t. b) Tˆen c´ac thuˆo
.
c t´ınh l`a kh´ac nhau. c)
Nh˜u
.
ng gi´a tri
.
kho
.

i
dˆa
`

u cu

a c´ac thuˆo
.
c t´ınh trong ch´ung ph`u ho
.
.
p v´o
.
i c´ac kiˆe

u d˜u
.
liˆe
.
u tu
.
o
.
ng
´u
.
ng. d) Tˆen cu

a c´ac phu
.
o
.
ng th´u
.

c l`a kh´ac nhau. e) C´ac tham sˆo
´
cu

a mo
.
i phu
.
o
.
ng th´u
.
c l`a
kh´ac nhau.
Su
.
.
khai b´ao l´o
.
p cdecl
dˆe

bˆo

sung thˆong tin cˆa
´
u tr´uc cu

a l´o
.

p N v`ao tra
.
ng th´ai tiˆe
´
p theo
v`a vai tr`o cu

a n´o
du
.
o
.
.
c thu nhˆa
.
n bo
.

i thiˆe
´
t kˆe
´
.
cdecl df
W D(cdecl) 









alphabet

= alphabet

cname

= {N }

superclass

= {N → M }

pri’ = {N → {t
1
: T
1
, c
1
, , (t
i
: T
i
, c
i
)}

pro


= {N → {u
1
: U
1
, d
1
, , u
j
: U
j
, d
j
}}

pub

= {N → {v
1
: V
1
, e
1
, , v
k
: V
k
, e
k
}}


meth

= {N → {(m
1
→ (x
11
: T
11
, y
12
: T
12
, z
13
: T
13
, p
1
), ,
(m

→ (x
1
: T
1
, y
2
: T
2

, z
3
: T
3
, p

)}}








O
.

dˆay c´ac biˆe
´
n lˆogic pri, pro, pub d˜a du
.
o
.
.
c gi´o
.
i thiˆe
.
u o

.

c´ac thuˆo
.
c t´ınh
d˜a khai b´ao cu

a
l´o
.
p N, t`u
.
c´ac tˆa
.
p gi´a tri
.
cu

a attribute(N) thu nhˆa
.
n
du
.
o
.
.
c ho`an to`an quan hˆe
.
v´o
.

i l´o
.
p cha
trong sˆo
´
c´ac l´o
.
p
d˜a khai b´ao. H`anh vi dˆo
.
ng cu

a c´ac phu
.
o
.
ng th´u
.
c c´o thˆe

khˆong
du
.
o
.
.
c h`ınh
th´u
.
c h´oa tru

.
´o
.
c khi quan hˆe
.
phu
.
thuˆo
.
c gi˜u
.
a c´ac l´o
.
p theo l´y thuyˆe
´
t. Nhu
.
kˆe
´
t qua

, biˆe
´
n lˆogic
meth(N ) liˆen kˆe
´
t mˆo
˜
i phu
.

o
.
ng th´u
.
c m
i
t´o
.
i thˆan p
i
cu

a n´o d´ung ho
.
n l`a ´y ngh˜ıa cu

a n´o,
diˆe
`
u
d´o s˜e du
.
o
.
.
c t´ınh to´an o
.

cuˆo
´

i phˆa
`
n khai b´ao.
268
NGUY
ˆ
E
˜
N MA
.
NH D
´
U
.
C, NGUY
ˆ
E
˜
N V
˘
AN VY
.
,
D
˘
A
.
NG V
˘
AN D

´
U
.
C
Tiˆe
´
p tu
.
c v´ı du
.
trˆen: Dˆe
˜
r`ang thˆa
´
y r˘a
`
ng ca

declAccount v`a declCA dˆe
`
u l`a x´ac di
.
nh d´ung
d˘a
´
n. Ng˜u
.
ngh˜ıa cu

a declAccount

du
.
o
.
.
c chı

ra bo
.

i thiˆe
´
t kˆe
´
sau:
declAccount = true 


cname

= {Account}

pro

= {Account → {aID : int, balance : int}}

meth

= {Account → {getBalance → (0, b : int, 0, b := balance),
withdraw → (x : int, 0, 0, balance  x  balance − x)}}



Ng˜u
.
ngh˜ıa cu

a declCA l`a nhu
.
sau:
declCA = true 


cname

= {CA}

superclass

= {CA → Account}

meth

= {Account →
{withdraw → (x : int, 0, 0, balance := balance − x)}}


Ng˜u
.
ngh˜ıa cu


a declSA l`a nhu
.
sau:


cname

= {SA}

superclass

= {SA → Account}

declSA = true  meth

= {Account →
{withdraw → (x : int, 0, 0, skip  (balance < x)  balance := balance − x}; }}


5.2. Th`anh phˆa
`
n cˆa
´
u tr´uc cu

a l´o
.
p
Sau dˆay ta xem x´et th`anh phˆa
`

n cˆa
´
u tr´uc cu

a l´o
.
p khai b´ao c˜ung nhu
.
quan hˆe
.
cu

a c´ac
th`anh phˆa
`
n
d´o v´o
.
i nhau. Phˆa
`
n khai b´ao cdecls cu

a chu
.
o
.
ng tr`ınh l`a su
.
.
cˆa

´
u th`anh cu

a mˆo
.
t
sˆo
´
l´o
.
p:
cdecls ≡ cdecl
1
; cdecl
2
; ; cdecl
k
Th`anh phˆa
`
n cˆa
´
u tr´uc l´o
.
p khai b´ao
do
.
n gia

n l`a thˆem v`ao nˆo
.

i dung cho mˆoi tru
.
`o
.
ng hiˆe
.
n
ta
.
i α
d˜a ph´at sinh bo
.

i c´ac th`anh phˆa
`
n cu

a l´o
.
p khai b´ao
d˜a cung cˆa
´
p m`a khˆong pha

i di
.
nh
ngh˜ıa la
.
i l´o

.
p trong pha
.
m vi cu

a n´o. N´o c´o thˆe

du
.
o
.
.
c x´ac
di
.
nh bo
.

i kˆe
´
t ho
.
.
p song song nhu
.
sau [2]: (cdecl1; cdecl2) df cdecl1
M
cdecl2. O
.


dˆay X(m, m

)
M
Y (m, m

) du
.
o
.
.
c cho bo
.

i
th`anh cˆong th´u
.
c:
(X(m, m

1
)

Y (m, m

2
)); M(m
1
, m
2

, m

)
v`a thiˆe
´
t kˆe
´
M kˆe
´
t ho
.
.
p v´o
.
i c´ac
da
.
i lu
.
o
.
.
ng ra m1 v`a m2 cu

a X v`a Y t´o
.
i
da
.
i lu

.
o
.
.
ng ra m cu

a
cˆa
´
u tr´uc song song
du
.
o
.
.
c x´ac
di
.
nh bo
.

i:
(cname1 ∩ cname2 = ∅) 











alphabet

= alphabet1 ∪ alphabet2

cname

= cname1 ∪ cname2

superclass

= superclass1 ∩ superclass2

pri

= pri
1
∪ pri
2

pro

= pro
1
∪ pro
2

pub


= pub
1
∪ pub
2

meth

= meth1 ∪ meth2










V´ı du
.
: Tiˆe
´
p tu
.
c v´ı du
.
o
.


trˆen, ta thˆa
´
y r˘a
`
ng khˆong c´o viˆe
.
c khai b´ao la
.
i l´o
.
p trong phˆa
`
n
khai b´ao cu

a hˆe
.
thˆo
´
ng Bank. Tru
.
´o
.
c hˆe
´
t, ta t´ınh declAccount v`a declCA:
M
ˆ
O H
`

INH DA
.
I S
ˆ
O
´
QUAN H
ˆ
E
.
CU

A H
ˆ
E
.
TH
ˆ
O
´
NG HU
.
´
O
.
NG
D
ˆ
O
´

I TU
.
O
.
.
NG
269
declAccount; declCA = true 






cname

= {Account, CA}

superclass

= {CA → Account}

pro

= {Account{aID : int, balance : int}}

meth

= {Account{getBalance(0, b : int, 0, b := balance)},
withdraw → (x : int, 0, 0, b ≥ x  balance


:= balance − x)},
CA → {withdraw → (x : int, 0, 0, balance := balance − x)}}






Viˆe
.
c t´ınh khai b´ao khai b´ao declSA cu

a SA ho`an to`an tu
.
o
.
ng tu
.
.
nhu
.
trˆen, t`u
.
d´o ta s˜e
t´ınh declAccount; declCA; declSA nhu
.
sau:
declAccount; declCA; declSA = true 









cname

= {Account, CA, SA}

superclass

= {CA → Account, SA → Account}

pro

= {Account{aID : int, balance : int}}

meth

= {Account → {getBalance → (0, b : int, 0, b := balance),
withdraw → (x : int, 0, 0, b ≥ x  balance

:= balance − x)},
CA → {withdraw → (x : int, 0, 0, balance := balance − x)}
SA → {withdraw → (x : int, 0, 0, skip  (balance < x)  balance := balance − x)}}









Tiˆe
´
p tu
.
c ta t´ınh
du
.
o
.
.
c declAccount; declCA; declSA; declsBank nhu
.
sau:
declAccount; declCA; declSA; declsBank = true 




























cname

= {Account, CA, SABank}

superclass

= {CA → Account, SA → Account}

pri

= {Bank → cname : string, address : string, A : set(Account)}

pro


= {Account → {aID : int, balance : int}}

meth

= {Account → {getBalance → (0, b : int, 0, b := balance),
withdraw → (x : int, 0, 0, bx  balance

:= balance − x)},
CA → {withdraw → (x : int, 0, 0, balance := balance − x)}
SA → {withdraw → (x : int, 0, 0, skip  (balancex)  balance := balance − x)},
Bank → {getBalance → (aID : int, b : int, 0{skip  (∃!ac ∈ A)  ac.aID = aID 
if{y.aID = aID → y.getBalance(b)|y ∈ A}f i)},
withdraw → {(aID : int, x : int, 0, {skip  (∃!ac ∈ A)  ac.aID = aID 
if{y.aID = aID → y.withdraw(x)|y ∈ A}f i)},
newAccount → {(a : int, b : Boolean, 0,
var x : Account;
x := new CA(a)  b  x := new SA(a); A := A ∪ {x}
endx)}; }




























T`u
.
mˆo h`ınh tu
.
o
.
ng tu
.
.
nhu
.
trˆen, He Jifeng v`a c´ac cˆo
.
ng su
.

.
d˜a c´o nh˜u
.
ng ca

i tiˆe
´
n t´ınh to´an
cho cho hˆe
.
thˆo
´
ng
dˆo
´
i tu
.
o
.
.
ng rCOS cu

a ho
.
[4].
6. M
ˆ
O
.
T S

ˆ
O
´
K
ˆ
E
´
T QUA

Trˆen dˆay, ch´ung tˆoi d˜a tr`ınh b`ay ng˜u
.
ngh˜ıa c´ac quan hˆe
.
da
.
i sˆo
´
cho d˘a
.
c ta

hˆe
.
thˆo
´
ng
hu
.
´o
.

ng
dˆo
´
i tu
.
o
.
.
ng, v`a
d˜a xem x´et to´an tu
.

chu
.
o
.
ng tr`ınh trong ngˆon ng˜u
.
hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.

ng l`a
mˆo
.
t c´ach mˆo ta

ch´ınh x´ac giˆo
´
ng nhu
.
ba

n sao trong ngˆon ng˜u
.
lˆe
.
nh. Do
d´o hˆa
`
u hˆe
´
t c´ac luˆa
.
t
da
.
i sˆo
´
d˜a du
.
o

.
.
c ph´at triˆe

n cu

a ngˆon ng˜u
.
lˆenh dˆe
˜
d`ang
du
.
o
.
.
c ´ap du
.
ng trong viˆe
.
c thiˆe
´
t kˆe
´
c´ac
270
NGUY
ˆ
E
˜

N MA
.
NH D
´
U
.
C, NGUY
ˆ
E
˜
N V
˘
AN VY
.
,
D
˘
A
.
NG V
˘
AN D
´
U
.
C
chu
.
o
.

ng tr`ınh hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng. V´ı du
.
nhu
.
diˆe
`
u kiˆe
.
n, t´ınh khˆong tiˆe
`
n di
.
nh v`a tr`ınh tu
.
.
trong
hˆe
.

thˆo
´
ng l`a c´ac
dˆo
´
i tu
.
o
.
.
ng giˆo
´
ng nhu
.
c´ac luˆa
.
t co
.
ba

n
du
.
o
.
.
c thiˆe
´
t kˆe
´

cho c´ac ngˆon ng˜u
.
lˆe
.
nh.
7. NH
ˆ
A
.
N X
´
ET V
`
A K
ˆ
E
´
T LU
ˆ
A
.
N
Mˆo h`ınh quan hˆe
.
da
.
i sˆo
´
du
.

o
.
.
c ph´at triˆe

n du
.
.
a v`ao mˆo
.
t ngˆon ng˜u
.
hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng. Viˆe
.
c
xu
.


l´y kˆe
´
t ho
.
.
p kiˆe

u
dˆo
.
ng v`a kiˆe

m tra tra
.
ng th´ai v´o
.
i ng˜u
.
ngh˜ıa giˆo
´
ng nhu
.
hu
.
´o
.
ng
d˘a
.
c ta


truyˆe
`
n thˆo
´
ng. C´ac to´an tu
.

chu
.
o
.
ng tr`ınh
du
.
o
.
.
c xu
.

l´y ch´ınh x´ac nhu
.
l`a ba

n sao trong ngˆon
ng˜u
.
r`ang buˆo
.

c. Do
d´o, hˆa
`
u hˆe
´
t c´ac luˆa
.
t da
.
i sˆo
´
du
.
o
.
.
c ph´at triˆe

n cho ngˆon ng˜u
.
lˆe
.
nh vˆa
˜
n c´o
thˆe

´ap du
.
ng

du
.
o
.
.
c cho
d˘a
.
c ta

thiˆe
´
t kˆe
´
chu
.
o
.
ng tr`ınh hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.

ng. C´ac co
.
so
.

t´ınh to´an
cho hˆe
.
thˆo
´
ng hu
.
´o
.
ng
dˆo
´
i tu
.
o
.
.
ng trong b`ai n`ay c˜ung c´o thˆe

du
.
o
.
.
c su

.

du
.
ng
dˆe

h`ınh th´u
.
c h´oa
liˆen kˆe
´
t c´ac mˆo h`ınh ca su
.

du
.
ng (use case) v`a mˆo h`ınh l´o
.
p trong UML. N´o c˜ung c´o thˆe

su
.

du
.
ng nhu
.
l`a co
.

so
.

cho viˆe
.
c ca

i tiˆe
´
n t´ınh to´an cho tiˆe
´
n tr`ınh ph´at triˆe

n cu

a chu
.
o
.
ng tr`ınh
hu
.
´o
.
ng
dˆo
´
i tu
.
o

.
.
ng.
C´ac
d˘a
.
c ta

trong ngˆon ng˜u
.
n`ay dˆe
˜
d`ang
du
.
o
.
.
c viˆe
´
t v`a hiˆe

u tu
.
o
.
ng tu
.
.
nhu

.
ngˆon ng˜u
.
Java
ho˘a
.
c C
++
, v`a ´y ngh˜ıa l`a ho`an to`an du
.
.
a trˆen c´ach tiˆe
´
p cˆa
.
n tra
.
ng th´ai
d˜a du
.
o
.
.
c thiˆe
´
t lˆa
.
p
d´ung.
T

`
AI LI
ˆ
E
.
U THAM KHA

O
[1] Booch, G., Rumbaugh, J. and Jacobson, I.,
The Unified Modeling Language User Guide
,
Addison-Wesley, 1999.
[2] C.A.R. Hoare and He Jifeng,
Unifing Theories of Programming
, Prentice Hall, 1998.
[3] He Jifeng, Zhiming Liu and Li Xiaohan, A Relational Model for Object-Oriented Pro-
gramming, “Technical report UNU/IIST No.231, UNU/IIST: International Institute for
software technology”, the United Nations University, Macau, May 2001.
[4] He Jifeng, Li Xiaohan and Zhiming Liu, rCOS: Refinement Caclculus for Object Sys-
tems, Technical report UNU/IIST No.322, UNU/IIST: International Institute for soft-
ware technology, the United Nations University, Macau, May 2005.
[5] Ivar Jacopson, Gray Booch and James Rumbaugh,
The Unified Software Development
Process
, Addision-Wesley, 2000.
[6] P. America, F.de Boer, Reasoning about dynamically evolving process structures,
For-
mal Aspect of Computing
(6) (1994) 269—316.
[7] Rational Rose Corp., Rational Rose 2002, />Nhˆa

.
n b`ai ng`ay 29 - 7 - 2005

×