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 (balancex) 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, http://www.rational.com/uml/.
Nhˆa
.
n b`ai ng`ay 29 - 7 - 2005
. 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. 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