Trường Đại học Công Nghệ Thông Tin, ĐHQG-HCM Khoa Công Nghệ Phần Mềm
Chương 3 Mô hình hóa dữ liệu Kiểu tập hợp
1
Giảng viên: PGS.TS. Vũ Thanh Nguyên
Kiểu dữ liệu trong VDM
integer
values: {-32768,…, 32767}
operations: +, - , *, div, mod, =, <>, >, <, >=, <=
2
Các kiểu dữ liệu đơn giản được định nghĩa sẵn: ℕ, ℕ1, ℤ, ℝ, ℚ, B, Char
Các tập hợp được định nghĩa sẵn
ℤ = {…, -2, -1, 0, 1, 2, …} ℕ = {0, 1, 2, 3, …} ℕ1 = {1, 2, 3, …} ℝ ℚ B = {true, false}
Tập số nguyên Tập số tự nhiên Tập số nguyên dương Tập số thực Tập số hữu tỉ Tập boolean Tập ký tự (gồm chữ cái hoa/thường, số, phép toán, dấu câu)
3
Char = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘+’, ‘-’, ‘=‘, ‘<‘, ‘>’, ‘*’, ‘/’, ‘(‘, ‘)’, ‘[‘, ‘]’, ‘{‘, ‘}’, ‘.’, ‘,’, ‘?’, ‘!’, …}
Mô hình hóa dữ liệu
Technical-Staff
values: {PROJECT-MANAGER, TEAM-LEADER, ANALYST, DESIGNER, PROGRAMMER, TESTER}
operations:
Technical-Staff = {PROJECT-MANAGER, TEAM-LEADER, ANALYST, DESIGNER, PROGRAMMER, TESTER}
4
Kiểu tập hợp
Cho trước kiểu dữ liệu T Cần định nghĩa kiểu dữ liệu, trong đó, mỗi thể hiện là 1 tập
hợp các phần tử thuộc kiểu dữ liệu T
Ký hiệu: T-set
Ví dụ 1:
Mode = {READ, WRITE, EXECUTE} FileMode = Mode-set FileMode = { {}, {READ}, {WRITE}, {EXECUTE}, {READ, WRITE}, {READ, EXECUTE}, {EXECUTE, WRITE}, {READ, WRITE, EXECUTE} }
Ví dụ 2:
5
Intset = ℤ-set
Kiểu tập hợp
Ví dụ 3:
6
Pupils = { Patrick, Christa, Emma, Pete, Frank, Lisa, Richard, David, Daniel, John, Helen, Pauline, Mark, Mike, Elisabeth} School-trip = Pupils-set
Kiểu tập hợp
Câu hỏi: Có thể sử dụng kiểu tập hợp cho các trường hợp nào
7
sau đây: Hành khách trên 1 chuyến xe buýt Bệnh nhân trong phòng chờ khám bệnh trong 1 buổi Thí sinh được nhận giải thưởng trong 1 kỳ thi
Mô hình hóa các operation
Một operation có thể có hai tác dụng Thay đổi nội dung biến bên ngoài Trả về giá trị thông qua tham số kết quả
Biến được truy xuất dạng read-only (rd) Biến được truy xuất dạng read-write (wr) Không có dạng truy xuất write-only trong VDM
Đối với các biến bên ngoài:
Ví dụ: ext ext
8
rd wr size: ℕ a, b: ℕ, rd x: ℤ
Đặc tả operation
Tên_Operation (thamsố1: Kiểu1, thamsố2: Kiểu2…) kq: Kiểukq ext
9
wr BiếnRead_Write: Kiểu, rd BiếnRead_Only: Kiểu Vị từ pre-condition pre post Vị từ post-condition
Đặc tả operation
Ví dụ
x: ℝ
MULT (heso: ℝ) wr ext x < 16384 pre ⃐ x = heso x post
10
trip: School-trip ↼ ADD-TO-TRIP (new-on-trip: School-trip) ext pre post wr new-on-trip trip trip = trip new-on-trip
Đặc tả operation
Ví dụ
↼
dấu có nghĩa là post (post condition - điều kiện sau) chỉ đến giá trị của toán hạng (biến) có dấu móc ưu tiên thực hiện
Đối với trường hợp khi biến được truy xuất chỉ xác định
11
dạng read (rd), dấu móc có thể bỏ qua.
Đặc tả operation
Ví dụ
SHOW () r: N ext rd reg: N ↼ post r = reg
SHOW () r: N ext rd reg: N post r = reg
12
Đặc tả operation
Ví dụ
SHOW () r: N ext wr reg: N ↼ post r = reg r = reg
Dạng tổng quát
OP (p:Tp) r: Tr ext rd v1: T1, wr v2: T2, pre …p…v1…v2… ↼ post …p…v1…v2…r…v2…
13
Đặc tả operation
Ví dụ
ADD ( i : N) ext wr reg: N post reg = reg + i ↼
14
Đặc tả operation
15
Bức tranh của đặc tả operation
Đặc tả operation
FACT
Các phần đặc tả của một chương trình
ext wr n:N, wr fn:N ↼ post fn = n!
Nó được thực hiện bởi một đoạn sau đây của chương trình fn := 1;
16
while n≠0 do (fn := fn*n; n:=n-1)
Đặc tả operation
Người thiết kế chương trình có thể chia đặc tả chương
trình FACT ra làm 2 phần là INIT và LOOP INIT
LOOP
ext wr fn:N post fn = 1
ext wr n:N,
wr fn : N
17
post fn = fn * n↼ ↼
Đặc tả operation
While n ≠0 do BODY BODY
Ở bước tiếp theo, người thiết kế chương trình có thể chia đặc tả chương trình LOOP thành các phần nhỏ hơn như
ext wr n:N, wr fn:N
↼↼ ↼
18
pre n>0
post fn*n! = fn*n! n

