Phương pháp hình thức đặc tả hệ thống hướng đối tượng dựa trên mô hình rCOS

1) Tính nhất quán ngang của mô hình: Nhiều khung nhìn khác nhau của các hệ con khác

nhau trong một hệ thống đòi hỏi phải tương thích với nhau về cú pháp và ngữ nghĩa.

2) Tính nhất quán dọc của mô hình: Khi biến đổi và phát triển một mô hình qua các

bước làm mịn, đòi hỏi các mô hình nhận được ở mỗi bước phải nhất quán và có ngữ nghĩa phù

hợp với nhau;

3) Tính lần vết được của mô hình: Khi chuyển từ một mô hình của một khung nhìn này

sang mô hình theo một khung nhìn khác, hay từ bước làm mịn này sang bước sau phải được chỉ

dẫn cho phép lần ngược lại mô hình loại trước hay mô hình ở bước trước, cũng như có thể lần

xuôi đến các mô hình của bước sau, và đảm bảo sự phù hợp giữa các mô hình đó.

4) Tích hợp được các mô hình: Mô hình của các khung nhìn khác nhau cần phải tích hợp

đảm bảo sự nhất quán và đồng bộ toàn hệ thống trước khi có sản phNm phần mềm cuối cùng.

pdf 9 trang kimcuc 17760
Bạn đang xem tài liệu "Phương pháp hình thức đặc tả hệ thống hướng đối tượng dựa trên mô hình rCOS", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Phương pháp hình thức đặc tả hệ thống hướng đối tượng dựa trên mô hình rCOS

Phương pháp hình thức đặc tả hệ thống hướng đối tượng dựa trên mô hình rCOS
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 95
PHƯƠNG PHÁP HÌNH THỨC ĐẶC TẢ HỆ THỐNG 
HƯỚNG ĐỐI TƯỢNG DỰA TRÊN MÔ HÌNH rCOS 
Nguyễn Mạnh Đức (Trường ĐH Sư phạm - ĐH Thái Nguyên)- 
 Đặng Văn Đức (Viện Công nghệ thông tin - Viện KH&CN Việt Nam)- 
Nguyễn Văn Vỵ (Trường ĐH Công nghệ- ĐH Quốc gia Hà Nội) 
1. Đặt vấn đề 
Thiết kế và phát triển hệ thống phần mềm với ngôn ngữ hướng đối tượng đã được thừa 
nhận là rất phức tạp [1, 4]. Nhiều nhà nghiên cứu đã chỉ ra sự cần thiết phát triển công cụ hình 
thức hoá làm cơ sở cho việc phát triển phần mềm hướng đối tượng. Bài báo này sẽ trình bày một 
qui trình làm mịn mô hình UML dựa trên lý thuyết lập trình thống nhất của Hoare và He [2], sử 
dụng vào việc xây dựng một cách đúng đắn các chương trình hướng đối tượng. 
Trong tiến trình phát triển thống nhất RUP (rational unified process) dựa trên ngôn ngữ 
UML (unified modeling language) [1, 4, 7], một số mô hình loại khác nhau của UML đã được 
sử dụng để biểu diễn các mô hình nghiệp vụ, mô hình phân tích, mô hình thiết kế và mô hình 
triển khai trong pha khác nhau để phát triển hệ thống. Thí dụ, biểu đồ ca sử dụng biểu diễn mô 
hình nghiệp vụ (khung nhìn nghiệp vụ), biểu đồ lớp biểu diễn mô hình phân tích (khung nhìn 
tĩnh), biểu đồ công tác và biểu đồ trạng thái biểu diễn hành vi (khung nhìn hành vi) RUP sử 
dụng đồng thời nhiều khung nhìn trong việc mô hình hoá hệ thống cho phép người phát triển có 
thể phân chia mô hình hệ thống thành một số khung nhìn khác nhau để làm trực quan và quản lý 
chúng theo những cách riêng. Mỗi khung nhìn đơn sẽ tập trung vào một khía cạnh riêng biệt ở 
một giai đoạn, để phân tích và hiểu rõ các đặc trưng khác nhau của mô hình hệ thống. Tuy 
nhiên, mô hình hệ thống với nhiều khung nhìn phải đối mặt với các khó khăn về sự khác nhau 
của nhiều khung nhìn ở những thời điểm khác nhau của tiến trình phát triển. Một số vấn đề đã 
được đặt ra cần giải quyết [12]: 
1) Tính nhất quán ngang của mô hình: Nhiều khung nhìn khác nhau của các hệ con khác 
nhau trong một hệ thống đòi hỏi phải tương thích với nhau về cú pháp và ngữ nghĩa. 
2) Tính nhất quán dọc của mô hình: Khi biến đổi và phát triển một mô hình qua các 
bước làm mịn, đòi hỏi các mô hình nhận được ở mỗi bước phải nhất quán và có ngữ nghĩa phù 
hợp với nhau; 
3) Tính lần vết được của mô hình: Khi chuyển từ một mô hình của một khung nhìn này 
sang mô hình theo một khung nhìn khác, hay từ bước làm mịn này sang bước sau phải được chỉ 
dẫn cho phép lần ngược lại mô hình loại trước hay mô hình ở bước trước, cũng như có thể lần 
xuôi đến các mô hình của bước sau, và đảm bảo sự phù hợp giữa các mô hình đó. 
4) Tích hợp được các mô hình: Mô hình của các khung nhìn khác nhau cần phải tích hợp 
đảm bảo sự nhất quán và đồng bộ toàn hệ thống trước khi có sản phNm phần mềm cuối cùng... 
Nhiều nghiên cứu về tính chất và hình thức thể hiện của các mô hình UML [10, 12] đã 
được tiến hành trong những năm gần đây. Tuy nhiên, phần lớn các nghiên cứu chỉ liên quan tới 
hình thức của từng loại biểu đồ riêng rẽ và tính nhất quán của các mô hình loại 1 hoặc loại 2. 
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 96 
Nhìn lại tiến trình phát triển hệ thống phần mềm theo hướng đối tượng theo RUP ta thấy, 
bắt đầu của tiến trình phát triển với khung nhìn nghiệp vụ, có chứa mô hình lớp khái niệm, và 
cho đến khi kết thúc tiến trình trước khi chuyển sang mã nguồn, chúng ta lại nhận được biểu đồ 
lớp thiết kế của hệ thống phần mềm. Nếu ta chỉ sử dụng một khung nhìn duy nhất được biểu 
diễn bằng các biểu đồ lớp, ta sẽ khắc phục được tính đa khung nhìn của tiến trình phát triển ở 
trên. Vấn đề duy nhất còn cần phải giải quyết ở đây là: làm sao xây dựng được các phép biến 
đổi và các quy tắc kiểm tra sự đúng đắn của chúng, khi đó bằng một loạt các phép biến đổi đúng 
đắn, ta có thể chuyển biểu đồ lớp khái niệm ban đầu thành biểu đồ lớp thiết kế cuối cùng của 
phần mềm hệ thống (hình vẽ dưới đây) [16, 17]. 
Lúc này, các khung nhìn khác của tiến trình RUP sẽ được sử dụng như các công cụ trợ giúp 
cho việc xác định các phép biến đổi cụ thể để tận dụng được thế mạnh của các khung nhìn này. Vấn 
đề cuối cùng đặt ra được giải quyết bằng công cụ hình thực hóa dựa trên các quan hệ đại số. 
Nhìn trến sơ đồ ta thấy, để đạt đến biểu đồ lớp thiết kê cuối cùng, chúng ta cần đến các 
phép biến đổi sau: thêm lớp (có thể kế thừa), thêm thuộc tính, thêm phương thức, thay đổi đặc 
trưng của thuộc tính, của phương thức, thay đổi liên kết giữa các lớp và các biến đổi tương ứng 
trong mỗi phương thức. 
2. Cơ sở của các phép biến đổi 
Một biểu diễn của chương trình lệnh được coi như một thiết kế (design) xác định bởi 
cặp (α, P) [2, 3], ở đây α biểu thị tập các biến đã biết trong thiết kế, được gọi là bảng ký 
kiệu của thiết kế; P là các toán tử xác định quan hệ giữa các giá trị ban đầu của các biến và 
các giá trị kết quả của nó, ta ký hiệu quá trình biến đổi như sau: p(x) ├ R(x, x’), cụ thể hơn 
như sau: 
p(x) ├ R(x, x’) def
 ok ∧ p(x) ⇒ ok’∧ R(x, x’) 
Trong đó: p(x) được gọi là tiền điều kiện và phải có giá trị true – tức là đúng đắn trước 
khi chương trình bắt đầu. R(x, x’) gọi là hậu điều kiện nhận được sau khi chương trình thực 
hiện. x và x’ biểu diễn giá trị khởi đầu và kết thúc của biến x trong chương trình. ok và ok’ là 
các biến logic mô tả trạng thái hành vi ban đầu và cuối của chương trình: nếu chương trình được 
kích hoạt hợp thức ok là true, nếu việc thực hiện chương trình cuối cùng thành công ok’ là true, 
ngược lại chúng là false. 
biểu đồ lớp 
khái niệm 
miền lĩnh 
vực 
biểu đồ lớp 
thiết kế phần 
mềm hệ 
thống 
phép 
BĐ1 
biểu đồ 
lớp được 
làm mịn 1 
phép 
BĐ2 
phép 
BĐn 
mô hình 
nghiệp vụ 
khung 
nhìn 1 
mô hình 
phân tích 
khung 
nhìn 2 
mô hình 
thiết kế 
khung 
nhìn k 
Ý tưởng cho phương pháp giải quyết vấn đề 
Tiến 
trình 
RUP 
Phương 
pháp 
mới 
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 97
2.1. Mô tả hệ thống hướng đối tượng 
Một hệ thống hoặc chương trình hướng đối tượng S có dạng cdecls ● P , ở đây: cdecls là 
phần khai báo một số hữu hạn các lớp; P được gọi là phương thức chính và có dạng (glb, c), 
trong đó glb là tập hữu hạn các biến chung và kiểu dữ liệu của chúng, còn c là các lệnh. P có thể 
dược hiểu như là phương thức chính nếu S được tạo bởi ngôn ngữ giống như Java. Phần khai 
báo lớp cdecls là thứ tự của các khai báo lớp cdecl1; ...; cdeclk,. Ở đây mỗi khai báo lớp cdecli 
có dạng như sau: 
[private] class N [extends M] { 
pri : T1 t1 = a1 ..., Tm tm = am; 
pro : U1 u1 = b1 ..., Un un = bn; 
pub : V1 v1 = d1 ..., Vk vk = dk; 
meth : m1 (T11 x11, T12 y12, T13 z13) { c1 }; 
 ... ; 
 mℓ (Tℓ1 xℓ1, Tℓ2 yℓ2, Tℓ3 zℓ3) { cℓ } 
} 
trong đó: 
1. Mỗi lớp có thể được khai báo private hoặc là public, ngầm định là public. Chỉ các lớp có 
kiểu public hoặc kiểu cơ sở mới được sử dụng trong các khai báo biến chung glb. 
2. N và M là các tên lớp khác nhau và M được gọi là lớp cha của N. 
3. Phần pri khai báo các thuộc tính private của lớp, bao gồm kiểu và các giá trị khởi tạo. 
Tương tự, các phần pro và pub khai báo các thuộc tính protected và public của lớp. 
4. Phần method khai báo các phương thức của lớp N, trong đó m1, m2, ..., mℓ là các phương 
thức, ở đây (Ti1 xi1), (Ti2 yi2), (Ti3 zi3) và ci biểu diễn các tham biến giá trị, các tham biến kết 
quả, các tham biến giá trị kết quả và phần thân của phương thức mi. Phương thức có thể được 
chỉ ra bởi biểu diễn m(paras){c}, trong đó paras là các tham biến và c là thân lệnh của m. 
Khi viết các luật làm mịn, ký pháp sau được sử dụng để chỉ sự khai báo lớp N: N [M, pri, 
pro, pub, op]. Trong đó, M là tên lớp cha của N; pri, pro và pub là các tập thuộc tính private, 
protected và public của N; còn op là tập các phương thức của N. Ta có thể chỉ đưa ra các tham 
số liên quan cần thiết chẳng hạn như: nếu sử dụng N[op] để chỉ lớp N với tập các phương thức 
op, N[pro, op] chỉ lớp N với các thuộc tính protected là pro và tập các phương thức là op. 
2.2. Mô tả biểu thức 
Biểu thức trong ngôn ngữ hướng đối tượng có thể xuất hiện vế bên phải của các lệnh 
gán, xác định theo các qui tắc như sau [2, 5]: 
e ::= x | null | self | e.a | e is C | C(e) | f(e) 
Trong đó x là biến đơn, null là kiểu đối tượng đặc biệt, lớp đặc biệt NULL là lớp con 
của mọi lớp và null là duy nhất, self được sử dụng để chỉ đối tượng hoạt động trong phạm vi 
hiện tại, e.a là thuộc tính a của e, e is C là kiểu kiểm thử (test), C(e) là biểu thức có kiểu theo 
khuôn mẫu, f(e) là phép toán gắn liền với các kiểu nguyên thuỷ. 
2.3. Mô tả các lệnh 
Phần này xét các lệnh hỗ trợ việc xây dựng chương trình hướng đối tượng tiêu biểu [2, 5]. 
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 98 
c ::= skip | chaos | var T x = e | end x bỏ qua| không xác định khai báo | kết thúc khai báo 
 c; c | cbc | c ⊓ c | b*c tuần tự| chọn theo điều kiện| không tiền định| lặp 
 le.m(e, v, u) | le:=e | C.new(x) gọi phương thức | gán| tạo đối tượng mới. 
Ở đây b là biểu thức logic, c là lệnh, e là một biểu thức, le có thể xuất hiện ở vế trái của 
phép gán và có dạng le ::= x|le.a với x là biến đơn còn a là thuộc tính của đối tượng. Đa số các 
lệnh có ý nghĩa tương tự như trong các ngôn ngữ lệnh (có thể xem chi tiết trong [2, 5]). Sau đây 
là các giải thích một số lệnh đặc trưng cho chương trình hướng đối tượng. 
Lệnh gán le := e được xác định đúng khi le và e đã được xác định đúng và kiểu của e là 
kiểu con của kiểu đã được khai báo le. Trong trường hợp lệnh gán đơn x := e, khi lệnh gán được 
xác định đúng nó chỉ thay đổi x bởi gán x bằng giá trị của e. Trong trường hợp sự thay đổi thuộc 
tính của đối tượng, le.a := e thay thuộc tính a của đối tượng le bằng giá trị e. 
 Phương thức gọi le.m(e, v, vr) xác định đúng nếu le là đối tượng không rỗng và m(x, y, 
z) là phương thức đã được khai báo trong kiểu le. Khi nó đã được xác định đúng, việc thực hiện 
các lệnh gán các giá trị của các tham số thực v và vr cho các tham số hình thức x và z của m 
của các đối tượng hoạt động le tham chiếu tới, rồi thực hiện thân của phương thức trong môi 
trường của lớp đối tượng hoạt động. Sau khi thực hiện các thân cuối cùng, giá trị của tham biến 
kết quả và tham biến giá trị kết quả y và z được trả lại hợp qui cách với các tham số thực r và vr. 
Lệnh tạo đối tượng mới C.new(x) được xác định đúng nếu C là lớp đã được khai báo. Sự 
thực hiện lệnh này sẽ tạo ra một đối tượng mới của lớp C với biến tham chiếu là x và gắn giá trị 
khởi đầu của các thuộc tính trong lớp C với giá trị các thuộc tính của x. 
3. Các phép biến đổi làm mịn mô hình hệ thống đối tượng 
3.1. Các khái niệm 
Sau đây ta xem xét một số khái niệm liên quan tới quá trình làm mịn mô hình hệ thống 
[3, 9, 11, 13, 14]: 
Định nghĩa 1 (làm mịn thiết kế): Thiết kế D2 = (α, P2) là làm mịn của thiết kế D1=(α, 
P1) được ký hiệu là: D1 ⊑ D2, nếu P2 dẫn tới P1, nghĩa là: ∀x, x’, ..., z, z’, ok, ok’: (P2 ⇒ P1). 
Ở đây x, ..., z là các biến chứa trong α.. D1≡ D2 nếu và chỉ nếu D1⊑ D2 và D2 ⊑ D1. 
Định nghĩa 2 (làm mịn dữ liệu): Cho ρ là ánh xạ α2 tới α1. Thiết kế D2 = (α2, P2) là 
làm mịn của thiết kế D1 = (α1, P1) dưới ρ, được ký hiệu là D1⊑ρ D2, nếu (ρ; P1)⊑ (ρ;P2). 
Trong trường hợp này ρ được gọi là ánh xạ làm mịn. 
Định nghĩa 3 (làm mịn hệ thống): Cho S1 và S2 là các đối tượng chương trình có cùng 
một tập các biến chung glb. S2 là làm mịn của S1, được chỉ ra bởi S1 ⊑sys S2, nếu hành vi của 
nó có thể kiểm soát và dự đoán nhiều hơn trong S1, tức là: ∀ x, x’, ok, ok’: (S2⇒ S1) 
 Ở đây x là các biến trong glb.Ý nghĩa này là hành vi mở rộng của S1, đó là các cặp tiền 
điều kiện và hậu điều kiện của các biến chung là tập con của S2. Để phạm vi của S1 và S2 được 
làm mịn là khác nhau, ta yêu cầu chúng phải có cùng tập các biến chung và tồn tại ánh xạ làm 
mịn từ các biến của S1 tới S2 trên tập các biến chung đó. 
Định nghĩa 4 (làm mịn lớp): Cho cdecls1 và cdecls2 là hai khai báo. cdecls2 là làm 
mịn của cdecls1, đượcký hiệu lài cdecls2 ⊒class cdecls1 nếu như phần trước có thể thay thế 
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 99
phần sau trong bất kỳ hệ thống đối tượng: cdecls2 ⊒class cdecls1 def ∀P . (cdecls2• P ⊒sys 
cdecls1• P). Ở đây P đóng vai trò cho phương thức chính (glb, c). 
Phương thức chính tương ứng với chương trình ứng dụng đang sử dụng các dịch vụ Do 
đó, ở đây ta chỉ quan tâm làm mịn giữa các phần khai báo. 
3.2. Xây dựng qui trình làm mịn mô hình 
Quá trình làm mịn được thực hiện theo các luật làm mịn đã được đã được xác định [3, 10, 11]. 
3.2.1. Xây dựng hệ thống khởi tạo ban đầu 
Mô hình hệ thống khởi tạo ban đầu còn gọi là mô hình khái niệm thô, đó chính là mô 
hình lĩnh vực miềm, mô tả các khái niệm quan trọng của hệ thống qua các đối tượng của lĩnh 
vực nghiệp vụ và các liên kết giữa chúng với nhau. 
Thuật toán bổ sung các lớp vào mô hình khởi tạo: 
Công việc đầu tiên là tạo mô hình khởi tạo của hệ thống, cụ thể là bổ sung tên các lớp Ni 
đặc trưng cho các đối tượng miền lĩnh vực vào biểu đồ lớp của mô hình hệ thống có dạng: 
APP0 = N1[]; N2[]; ...; Nk[] 
và xác định những quan hệ giữa các Ni. Phép biến đổi này được thực hiện bằng thuật toán 
addClassName như sau: 
// Thuật toán addClassName- bổ sung các lớp vào mô hình 
Input: Một tên xâu cho định danh cho lớp Ni. 
Output: Lớp Ni trống (chưa có các thuộc tính hoặc phương thức). 
Format: addClassName () 
Method: 
var stop: Boolean, s: String; 
stop := false; 
while ¬ stop do { 
 read(s); 
 if {(s ””) → AdditionClassName(s)} fi; 
 read(stop); 
} 
end stop, s; 
End. 
Ở đây, cấu trúc if {(bi → Pi) | 1 ≤ i ≤ n} fi là sự thực hiện liên tiếp có điều kiện. Trong 
đó, mỗi Pi được chọn để thực hiện nếu bi là true. Khi mọi bi là false thì kết quả là chaos [2]. 
Phep bổ sung lớp này sẽ được dùng cho việc bổ sung tiếp tục các lớp sau này vào hệ thống. 
3.2.2. Xây dựng các biến đổi làm mịn mô hình khái niệm hệ thống [14, 16, 17] 
Thuật toán bổ sung các thuộc tính cho lớp: 
Khi đã có một lớp, ta cần xác định và bổ sung các thuộc tính private và định dạng các 
kiểu cho nó. (khi không giả thiết gì, thuộc tính trong lớp mặc định là private). Việc thêm một 
thuộc tính thành phần vào một lớp có thể được thực hiện theo luật bổ sung sau: 
 Ni[]; cdecls ⊑ Ni[pri ]; cdecls 
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 100
Trong đó T là một kiểu dữ liệu của thuộc tính attributeName và d là giá trị khởi đầu 
nếu cần. Với mỗi lớp, thực hiện nhiều lần luật này để bổ sung đầy đủ các thuộc tính cho nó. Quá 
trình này có thể được mô tả bẳng thuật toán hình thức như sau: 
// Thuật toán addAttributeName- bổ sung các thuộc tính vào lớp 
Input: Một lớp Ni của hệ thống, . 
Output: Lớp Ni bao gồm các thuộc tính kiểu private cần thiết. 
Format: addAttributeName () 
Method: 
var stop: Boolean, s: String; 
 stop := false; 
while ¬ stop do { 
read(s); 
if {(s ””) → 
AdditionAttributeName(s)} fi; 
read(stop); 
} 
end stop, s; 
End. 
Thực hiện k lần thuật toán này để bổ sung các thuộc tính cho k lớp của hệ thống. 
Thuật toán chuyên đổi kiểu thuộc tính: 
Tiếp theo là chuyển các thuộc tính kiểu private cần thiết sang kiểu protected để được hỗ 
trợ các dịch vụ nhiều hơn. Muốn vậy, ta sẽ áp dụng luật chuyển đổi kiểu thuộc tính sau: 
Ni[pri ]; cdecls ⊑ Ni[pro ]; cdecls 
Việc chuyển thuộc tính kiểu private trong một lớp sang kiểu protected theo thuật toán sau: 
// Thuật toán priAttToproAtt, chuyển kiểu thuộc tính private thành protected 
Input: Một lớp khái niệm Ni của hệ thống ứng dụng. 
Output: Lớp Ni bao gồm các thuộc tính kiểu protected cần thiết. 
Format: priAttiToproAtt () 
Method: 
var stop: Boolean, ok: Boolean; 
stop := false; ok := false; 
while ¬ stop do { 
if {(type(Ni.AttributeName) = private) → 
{ Question (ok); 
 if {ok=true → 
 priTopro(Ni.AttributeName)}fi; 
} fi; 
 read(stop); 
} 
end stop, ok; 
End. 
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 101
Bằng cách tương tự, ta cũng có thể xây dựng các thuật toán chuyển kiểu thuộc tính protected 
sang kiểu public. Sau mỗi bước thực hiện các công việc làm mịn trên sẽ thu được một mô hình 
thống mới và ta có: Mô hình khái niệm thô ⊑ Mô hình khái niệm mịn ban đầu. 
3.2.3. Xây dựng mô hình thiết kế ban đầu cho hệ thống 
Thuật toán bổ sung các phương thức cho lớp: 
Mô hình thiết kế là mô hình gồm các lớp có chứa đầy đủ thuộc tính và phương thức. Bằng 
cách bổ sung các phương thức cho các lớp của mô hình khái niệm ta được mô hình thiết kế. Có 
thể áp dụng các luật bổ sung phương thức như sau: 
N[op]; cdecls ⊑ N[op ∪ m(paras) {c}]; cdecls 
Thuật toán bổ sung các phương thức vào một lớp có thể viết như sau: 
// Thuật toán addMethodName- bổ sung các phương thức vào lớp 
Input: Một lớp Ni của hệ thống ứng dụng. 
Output: Lớp Ni bao gồm các phương thức cần thiết. 
Format: addMethodName () 
Method: 
var stop: Boolean, s: String, paras: String; 
stop := false; 
while ¬ stop do { 
read(s, paras); 
if {(s ””) → 
 AdditionMethodName(s, paras)} fi; 
read(stop); 
} 
end stop, s, paras; 
End. 
Sau phép biến đổi này ta có: Mô hình khái niệm mịn ⊑ Mô hình thiết kế ban đầu. 
3.2.4. Làm mịn mô hình thiết kế hệ thống 
Các công việc trong phần này tuỳ thuộc nhiều vào bài toán nghiệp vụ cụ thể đặt ra. Trong 
bước này chúng ta có thể áp dụng nhiều luật làm mịn khác nhau để làm mịn dần hệ thống từ mô 
hình thô về dạng sát với mã trình có thể thực hiện được, tạo điều kiện thuận lợi cho quá trình dịch 
xuôi từ mô hình UML sang một ngôn ngữ hướng đối tượng mà nó hỗ trợ. Ở đây cần thực hiện các 
luật khác nhau để làm mịn dần cho hệ thống với các thao tác biến đổi sau đây [3, 11]: 
- Làm mịn các phần thân phương thức m(){c} trong các lớp: Áp dụng luật Extract 
Method, Move Method, Add Parameter  
- Chuyển thuộc tính từ một lớp tới lớp khác: Ápdụng luật Move Field [11], để chuyển 
thuộc tính từ một lớp sang lớp khác như sau: 
cdecl; M[b: N, a: T, op]; N[] ⊒ cdecls; M[b: N, op]; N[a: T] 
- Xây dựng các thừa kế cho các lớp: Áp dụng các luật tạo quan hệ giữa các lớp, chế tác lại 
định hướng mẫu, như Decorator, Strategy, luật thay thế điều kiện bằng tính đa hình ... 
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 102
Với mỗi hệ thống ứng dụng cụ thể, ta có thể linh hoạt áp dụng các luật làm mịn khác 
nhau đã trình bày ở trên để biến đổi dần hệ thống cho bài toán đặt ra. Khi kết thúc các phép 
biến đổi, ta sẽ có một hệ thống bao gồm các lớp thiết kế với đầy đủ thuộc tính và phương 
thức. Do quá trình biến đổi thực hiện đảm bảo tính đúng đắng, nhất quán và phù hợp, nên hệ 
thống nhận được ở dạng hình thức hóa đặc tả đúng đắn những gì ta mong muốn về hệ thống 
cần xây dựng. 
4. Kết luận 
Bài báo đã trình bầy một tiến qui trình phát triển hệ thống phần mềm hướng đối tượng 
trên cơ sở các luật và các thuật toán biến đổi làm mịn, chúng được xây dựng dựa trên tính đúng 
của luật làm mịn và tính đúng của đặc tả hình thức đã xét. Để thực hiện các biến đổi làm mịn, 
các thuật toán làm mịn tương ứng được xây dựng phục vụ cho việc phát triển các mô hình hệ 
thống từ khái niệm đến thiết kế để được mô hình thiết kế cuối cùng đặc tả hệ thống cần xây 
dựng. Chúng tôi đã xây dựng các thuật toán: addClassName, addAttributeName, MoveAtt, 
priAttToproAtt, proAttTopubAtt, MoveMethod, addMethodName, RelationShip, Inheritance1, 
Inheritance2, Polymorphism để phục vụ cho đặc tả quá trình làm mịn và tinh chế các hệ thống 
hướng đối tượng [15, 16, 17]. 
Qua quá trình làm mịn cho ta mô hình thiết kế cuối cùng có biểu diễn tương đối gần 
với chương trình ở dạng ngôn ngữ lập trình có thể thực hiện được. Điều đó làm dễ dàng cho 
việc cài đặt hệ thống bằng bất kỳ ngôn ngữ lập trình hướng đối tượng, chẳng hạn như 
C#.Net hay Java. 
Để áp dụng được các bước làm mịn cụ thể đối với mỗi bài toán, việc sử dụng các khung 
nhìn của tiến trình RUP là rất cần thiết. Nó là những những mô hình trực quan, cho ta những gợi 
ý cho việc lựa chọn các phép biến đổi cần thiết ở mỗi bước. Khi thực hiện các phép biến đổi 
này, ở đây mới nêu ra được các việc cần làm để được hệ thống cuối cùng. Tuy nhiên, mô hình 
thiết kế tối ưu hay không chưa được đề cập. Ngoài ra, thực sự chúng tôi mới đưa ra nhưng phép 
biến đổi cơ bản. Còn có nhiều phép biến đổi liên quan đến những trường hợp tinh tế cũng chưa 
đề cập đến. Đó chính là những vấn đề đặt ra cần được tiếp tục nghiên cứu để có được một sự 
hoàn thiện và khả năng triển khai hiệu quả cao  
Tóm tắt 
 Trong bài báo này trình bày những nghiên cứu bước đầu về một tiến trình hình thức để 
đặc tả quá trình phát triển một hệ thống hướng đối tượng. Xuất phát từ biểu đồ miền lĩnh vực 
nghiệp vụ, quá trình phát triển hệ thống dựa trên tiến trình RUP nhưng được thực hiện bằng 
các biến đổi hình thức trên cơ sở các quan hệ đại số và các luật để đảm bảo tính đúng đắn của 
kết quả nhận được. Các phép biến đổi bao gồm thêm lớp, thêm thuộc tính, các phương thức 
cho lớp, phát triển các lớp kế thừa, chuyển đổi đặc trưng các thuộc tính của lớp, chuyển thuộc 
tính và toán tử từ một lớp sang một lớp khác, các phép toán đặc tả một phương thức của một 
lớp... Kết quả nhận được sẽ là một đặc tả hình thức của hệ thống với các lớp với các thành 
phần của nó. Do sự đặc tả trực quan gần với mô hình UML và ngôn ngữ lệnh nên có chuyển 
kết quả cuối cùng sang biểu đồ thiết kế với các lớp bằng UML, từ đó sử dụng Rational Rose 
để chuyển thành mã lệnh. 
Key words: UML, RUP, Rational Rose, Object–Oriented, refinement, process, class, 
attribute, operation 
T¹p chÝ Khoa häc & C«ng nghÖ - Sè 1(45) Tập 2/N¨m 2008 
 103
Summary 
The formal method specsification Object-Oriented System base on relation model 
This paper presents a algebric relations – based formal refinement process for the object-
oriented software system development. Starting at the conceptual class model of one applied 
domain (in conjunction with RUP), the refinement process trasforms this model to the final 
design class model by sequent applying number of algebric relations-based formal 
transformations and relevant rules. Theses transformations include these adding classes to the 
exsiting system model, adding and changing attrributes, operations in the clasess of this model, 
and also instructions in the operations of one class... The final design class model is a design 
specificaton of the expected software system. The repesentation of this final model is closed to 
one of the object-oriented programming languages. 
Tài liệu tham khả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, Unifying Theories of Programming, Prentice Hall, 1998. 
[3] He Jifeng, Li Xiaohan and Zhiming Liu, rCOS: Refinement Calculus for Object Systems, Technical 
report UNU/IIST No.322, UNU/IIST: International Institute for software technology, the United 
Nations University, Macau, May 2005. 
[4] Ivar Jacopson, Gray Booch and James Rumbaugh, The Unified Software Development Process, 
Addision-Wesley, 2000. 
[5] J. He, Z. Liu, X. Li and S.Qin, A relational model for object-oriented designs. In Pro APLA’2004 
LNCS 3302, Taiwan, 2004, Springer. 
[6] Joshua Kerievsky, Refactoring to patterns, Addison-Wesley, 2004 
[7] Kuchten P., The Rational Unified Process – An Introduction, Addison-Wesley, 2000. 
[8] Larman, Applying UML and patterns, Prentice-Hall International, 2001. 
[9] Martin Fowler, Refactoring, improving the design of existing code, Addison-Wesley, 2000. 
[10] R.J.R. Back, L. Petre and I.P. Paltor, Formalizing UML use cases in the refinement calculus. In 
Proc. UML’99. Springer-Verlag, 1999. 
[11] Quan Long, He Jifeng, Zhiming Liu, Refactoring and pattern-directed refactoring: A formal 
perspective, Technical report UNU/IIST No.318, UNU/IIST: International Institute for software 
technology, the United Nations University, Macau, January 2005. 
[12] P. Andre, A. Romanczuk, J.C. Royer and A. Vasconcelos, Checking the consistency of UML class 
diagrams using Larch Prove. In Proc. ROOM’2000, York, UK, 2000. 
[13] Nguyễn Mạnh Đức, Nguyễn Văn Vỵ, Đặng Văn Đức (2005), “Mô hình đại số quan hệ của hệ 
thống hướng đối tượng”, Tạp chí Tin học và điều khiển học, Viện Khoa học và Công nghệ Việt 
Nam, 21 (3) tr.261-270. 
[14] Nguyễn Mạnh Đức, Đặng Văn Đức (2006), “Về một cách tinh chế mô hình lớp UML”, Tạp chí Tin 
học và điều khiển học, Viện Khoa học và Công nghệ Việt Nam, 22 (1) tr. 63-74. 
[15] Nguyễn Mạnh Đức, Đặng Văn Đức (2006), “Ứng dụng phương pháp hướng đối tượng và ngôn ngữ 
UML mô hình hoá hệ thống E-Learning”, Tạp chí Khoa học và Công nghệ, Viện Khoa học và 
Công nghệ Việt Nam, 44 (3) tr. 33-42. 
[16] Nguyễn Mạnh Đức (2007), Thiết kế hướng đối tượng và xây dựng hệ thống thông tin phức tạp, 
Luận án Tiến sĩ Toán học, Viện Công nghệ Thông tin - Viện KH&CN Việt Nam. 
[17] Đặng Văn Đức, Nguyễn Văn Vỵ, Nguyễn Mạnh Đức (2007), “Một số thuật toán tinh chế cấu trúc hệ 
thống hướng đối tượng dựa trên các luật làm mịn của rCOS”, Kỷ yếu 30 năm thành lập Viện Công 
nghệ Thông tin, Viện Công nghệ Thông tin - Viện KH&CN Việt Nam. 

File đính kèm:

  • pdfphuong_phap_hinh_thuc_dac_ta_he_thong_huong_doi_tuong_dua_tr.pdf