Chuong 5

Màu nền
Font chữ
Font size
Chiều cao dòng

CHƯƠNG V: NGÔN NGỮ ĐẶC TẢ Z

Các nội dung chính của chương:

V.1 Giới thiệu. 2

V.2 Các thành phần của ngôn ngữ. 2

V.2.1 Logic toán học. 2

V.2.1.1 Logic mệnh đề. 2

V.2.1.2 Logic vị từ. 2

V.2.2 Lý thuyết tập hợp. 4

V.2.3 Hàm và quan hệ. 5

V.2.3.1 Quan hệ 2 ngôi5

V.2.3.2 Miền xác định và miền giá trị5

V.2.3.3 Hàm.. 5

V.2.3.4 Hàm riêng phần. 5

V.2.3.5 Hàm toàn phần. 5

V.3 Giản đồ (schemas). 6

V.3.1 Giới thiệu chung. 6

V.3.2 Định nghĩa. 6

V.3.3 Toán tử đặt tên. 7

V.3.4 Giản đồ tương đương. 7

V.3.5 Một số ghi chú. 7

V.3.6 Giản đồ được sử dụng như 1 kiểu dữ liệu. 8

V.3.7 Giản đồ được sử dụng trong các khai báo. 9

V.3.8 Giản đồ được sử dụng trong các biểu thức lượng từ. 10

V.3.9 Giản đồ được sử dụng như 1 vị từ. 10

V.3.10 Dạng chuẩn của 1 giản đồ. 10

V.3.11 Đặt lại tên các thành phần trong giản đồ. 11

V.4 Các phép toán trên giản đồ. 12

V.4.1 Phép nối liền (Conjunction). 12

V.4.2 Phép đổi tên (Decoration). 13

V.4.3 Phép nối rời (Disjunction). 14

V.4.4 Phép phủ định (Negation). 14

V.4.5 Phép lượng từ hóa. 15

V.5 Bài tập áp dụng. 15

V.1 Giới thiệu

Ký pháp Z, hay còn được gọi là ngôn ngữ Z được xây dựng dựa trên lý thuyết tập hợp và logic toán học. Đây là một ngôn ngữ toán học chặt chẽ, được sử dụng chủ yếu trong đặc tả hình thức để đặc tả các yêu cầu chức năng của 1 hệ thống, đặc biệt là hệ thống phần mềm.

Ngôn ngữ Z không được thiết kế để mô tả các yêu cầu phi chức năng của hệ thống, ví dụ như công dụng, hiệu năng, kích thước hay độ tin cậy của hệ thống. Ngôn ngữ cũng không được thiết kế cho các đặc tả theo thời gian hay xử lý song song. Muốn làm được điều này, ta phải kết hợp Z cùng với các công cụ khác nữa.

V.2 Các thành phần của ngôn ngữ

V.2.1   Logic toán học

V.2.1.1 Logic mệnh đề

Các khái niệm về logic mệnh đề cũng như hệ thống ký hiệu của logic mệnh đề trong ký pháp Z hoàn toàn giống với ngôn ngữ toán học thông thường.

Có 5 phép toán mệnh đề trong ngôn ngữ Z được liệt kê trong bảng dưới đây, với độ ưu tiên giảm dần từ trên xuống dưới :

Phép toán

Ý nghĩa

Ø

Phủ định

Ù

Tuyển

Ú

Hội

Þ

Kéo theo

Û

Tương đương

Ý nghĩa của mỗi phép toán đã được trình bày trong Chương 2 (Các cơ sở của đặc tả). Do vậy, phần này xin được phép không nhắc lại chi tiết nữa.

V.2.1.2 Logic vị từ

Các khái niệm và định nghĩa của logic vị từ cũng hoàn toàn giống như trong toán học, ngoại trừ ký hiệu có khác biệt.

a)     Cú pháp chung của 1 vị từ sử dụng lượng từ:

         Q x : A | p · q

Trong đó:

         Q : lượng từ ($ hoặc ").

      x : biến ràng buộc.

         A : tập các giá trị của x.

         p : ràng buộc trên biến.

         q : vị từ.

$ x : A | p · q  được phát biểu như sau: “Tồn tại 1 giá trị x thuộc về tập A, sao cho x thỏa p thì ta có q”.

" x : A | p · q  được phát biểu như sau: “Với mọi giá trị x thuộc về tập A, sao cho x thỏa p thì ta có q”.

Ta có các phát biểu tương đương như sau:

Ví dụ 1: Vị từ “Tồn tại 1 số tự nhiên x lớn hơn 5” được viết như sau trong ký pháp Z:

Như vậy, ký hiệu thuộc về 1 tập hợp trong Z là dấu hai chấm (:), thay vì là dấu Î như trong toán học.

Ký hiệu “sao cho” sử dụng dấu gạch đứng ( | ), và ký hiệu “thì” sử dụng dấu chấm tròn (·).

Ví dụ 2: Tương tự như thế đối với lượng từ “với mọi” ". “Với mọi y thuộc về tập số tự nhiên, y lớn hơn hay bằng 0”.

b)     “Tồn tại ít nhất 2 giá trị thỏa điều kiện” được biểu diễn như sau:

“Tồn tại duy nhất 1 giá trị thỏa điều kiện” được biểu diễn như sau:

Ví dụ 3: Phát biểu “có duy nhất 1 quyển sách trên bàn” được biểu diễn dưới dạng vị từ như sau:

 có nghĩa là quyển sách x nằm trên bàn.

c)     Ký pháp-m:

Để xác định đối tượng duy nhất trong tập hợp thỏa điều kiện, ngôn ngữ Z dùng 1 ký pháp được gọi là ký pháp-m, cụ thể như sau:

và được đọc là: “có duy nhất 1 giá trị x thuộc về tập A sao cho p”.

Khi ta ký hiệu:  tức là y là giá trị duy nhất thuộc tập A sao cho p đúng.

Ví dụ 4: Ta nói “2 là số duy nhất thuộc về tập số tự nhiên thỏa 4+n=6”

V.2.2   Lý thuyết tập hợp

Cũng tương tự như trong phần Logic toán học đã trình bày ở trên, các khái niệm trong lý thuyết tập hợp của ngôn ngữ Z hoàn toàn giống với ngôn ngữ toán học thông thường.

1.      Tập hợp được biểu diễn dưới dạng liệt kê :

S == {a, b, c}

2.      Tập hợp được biểu diễn dưới dạng vị từ :

S == {x :X | p(x)}

3.      Tập hợp rỗng :

S == Æ

4.      Để biểu diễn phát biểu : ‘giá trị x thuộc về tập S’, ta dùng ký hiệu :

x Î S

5.      Để biểu diễn phát biểu : ‘giá trị x không thuộc thuộc về tập S’, ta dùng ký hiệu :

x Ï S ÛØ(x Î S)

6.      Các phép toán trên tập hợp

a.            Giao :    A Ç B = {x :U | xÎA Ù xÎB}

b.            Hợp : A È B = {x :U | xÎA Ú xÎB}

c.            Hiệu : A \ B = {x :U | xÎA Ù xÏB}

d.            Tập con :

e.            Tập chứa trong :

f.             Tập bằng nhau :

g.           

h.           

7.      Tập tất cả các tập con của 1 tập hợp (Power set)

Ký hiệu : P X

Ví dụ : X == {1, 2}

P X = {Æ, {1}, {2}, {1, 2}}

8.      Tích Decartes của 2 hay nhiều tập hợp.

V.2.3   Hàm và quan hệ

V.2.3.1 Quan hệ 2 ngôi

Nếu X, Y là các tập hợp, ta ký hiệu : X«Y là tập tất cả các quan hệ 2 ngôi giữa X và Y.

Ta có: X«Y == P(X´Y)

Mỗi phần tử của X«Y là một bộ có thứ tự (x, y) trong đó x được lấy từ tập X và y được lấy từ tập Y

V.2.3.2 Miền xác định và miền giá trị

Miền xác định của 1 quan hệ được ký hiệu là dom, là tập hợp tất cả các giá trị x thuộc về tập X sao cho x có ảnh y thuộc Y qua R.

            dom R

hay ta có thể biểu diễn theo 1 cách khác như sau:

            dom R

Miền giá trị của quan hệ được ký hiệu là ran, là tập hợp tất cả các giá trị của y thuộc về tập Y sao cho y là ảnh của 1 giá trị x thuộc tập X qua R.

            ran R

hay ta có thể biểu diễn theo 1 cách khác như sau:

            ran R

V.2.3.3 Hàm

Xét quan hệ R trên 2 tập hợp X và Y, nếu mỗi phần tử thuộc tập X có nhiều nhất 1 ảnh y thuộc tập Y qua R thì ta nói quan hệ R là 1 hàm đi từ tập X đến tập Y. Hàm được phân chia thành 2 loại chính: hàm riêng phần và hàm toàn phần.

V.2.3.4 Hàm riêng phần

Một hàm riêng phần từ tập X đến tập Y là 1 quan hệ trên tập X và tập Y, biến mỗi giá trị xÎX thành nhiều nhất một giá trị yÎY. Ký hiệu:

V.2.3.5 Hàm toàn phần

V.3 Giản đồ (schemas)

V.3.1   Giới thiệu chung

Trong ngôn ngữ Z có 2 thành phần ngôn ngữ chính : ngôn ngữ toán và ngôn ngữ giản đồ. Ngôn ngữ toán học được sử dụng trong nhiều phần khác nhau của giai đoạn thiết kế : đặc tả các đối tượng, đặc tả các ràng buộc và mối quan hệ giữa chúng, v.v... Trong khi đó, ngôn ngữ giản đồ được dùng để tạo nên các bảng mô tả, kết hợp, đóng gói các phần thông tin khác nhau, đồng thời đặt tên cho chúng để sử dụng lại cho các mục đích khác.

Việc định nghĩa và đặt tên, cũng như khả năng tái sử dụng 1 thành phần, 1 đối tượng nào đó là hết sức cần thiết cho quá trình đặc tả. Nó giúp cho các đặc tả ngắn gọn, chính xác, tránh trùng lắp và rõ ràng, dễ hiểu.

V.3.2   Định nghĩa

Giản đồ (schema) là cú pháp của Z cho phép người đặc tả định nghĩa 1 khái niệm, 1 yếu tố mới gồm nhiều thành phần thông tin khác nhau, có ràng buộc với nhau, giống như khái niệm cấu trúc trong các ngôn ngữ lập trình; đồng thời đặt tên cho cấu trúc này.

Một giản đồ bao gồm 2 phần : phần khai báo các biến và phần vị từ diễn tả các ràng buộc trên những biến này. Ta có thể biểu diễn một giản đồ theo 1 trong 2 dạng sau :

§  Theo chiều ngang :

[khai báo | ràng buộc]

§  Theo chiều dọc :

khai báo

ràng buộc

                        Ví dụ :

hay :

V.3.3   Toán tử đặt tên

Nhằm mục đích đặt tên cho 1 giản đồ, tiện cho việc sử dụng lại sau này, ngôn ngữ Z cung cấp 1 toán tử riêng, được ký hiệu là : , để thuận lợi cho việc soạn thảo, ký hiệu này được viết lại thành ^=

Tên ^= [khai báo | ràng buộc]

Tên

khai báo

ràng buộc

Ví dụ :

hay :

V.3.4   Giản đồ tương đương

Hai giản đồ được gọi là tương đương nhau nếu chúng có cùng các biến và có cùng ràng buộc giống nhau trên các biến này.

Ví dụ : 2 giản đồ sau đây là tương đương :

V.3.5   Một số ghi chú

vĐể giản đồ đơn giản và dễ đọc hơn, ta có thể thực hiện ngắt các khai báo ra thành nhiều dòng khác nhau, mỗi khai báo trên 1 dòng và giản lược các dấu chấm phẩy ( ; ) ngăn cách. Khi đó phép nối giữa các dòng này mặc nhiên là phép nối liền - Ù (conjunction)

Ví dụ : giản đồ trong ví dụ ở phần trên

có thể được biểu diễn lại như sau :

vNếu 1 giản đồ đơn giản chỉ khai báo các biến mà không nêu ra ràng buộc cụ thể trên các biến này thì ta có thể bỏ phần vị từ bên dưới đi. Ví dụ :

Khi đó, giản đồ sẽ tương đương với giản đồ sau :

V.3.6   Giản đồ được sử dụng như 1 kiểu dữ liệu

Trong ngôn ngữ Z, một kiểu dữ liệu có thể là 1 tập cho trước (N, Z, Q, R, ...), 1 tập Power set, 1 kiểu tự do hoặc là 1 tích Decartes của nhiều tập hợp. Ngoài ra, ta có thể sử dụng giản đồ như 1 kiểu dữ liệu, sau khi đã đặt tên cho giản đồ đó bằng phép toán đặt tên ^=.

Ví dụ ta có giản đồ :

Như vậy khi khai báo :

            s : SchemaOne

tức là s là một biến, 1 phần tử thuộc kiểu SchemaOne, s sẽ bao gồm 2 thành phần: a là 1 số nguyên và c là 1 tập con gồm các số nguyên.

Ví dụ 2 : Ta định nghĩa kiểu dữ liệu Date, bao gồm 2 thông tin là (tháng, ngày) như sau :

Trước hết, ta có định nghĩa 1 kiểu dữ liệu tự do để mô tả các tháng, bao gồm 12 giá trị hằng riêng lẻ như sau :

Sau đó ta định nghĩa kiểu Date :

V.3.7   Giản đồ được sử dụng trong các khai báo

Một giản đồ, sau khi được định nghĩa và đặt tên, có thể được sử dụng trong bất kỳ 1 khai báo nào. Kết quả là các biến có trong giản đồ sẽ có mặt trong khai báo đó, cùng với những ràng buộc tương ứng đã quy định trên giản đồ.

Xét ví dụ sau, với giản đồ SchemaTwo, gần giống với SchemaOne nhưng có thêm 1 số ràng buộc, tập c phải khác rỗng, đồng thời a phải là 1 phần tử của c.

Khi đó tập hợp :

sẽ bao gồm tất cả các tập con c Ì Z và c có chứa phần tử số 0. Ta có thể biểu diễn tập hợp này theo cách thông thường, không sử dụng giản đồ như sau :

hoặc cũng có thể biểu diễn theo 1 cách khác, sử dụng 1 đối tượng thuộc kiểu SchemaTwo :

Ví dụ 2 : Trở lại giản đồ mô tả kiểu Date ở trên :

Nếu ta có thể định nghĩa tập các tháng có 31 ngày như sau :

hay nói 1 cách khác, đó là tập :

V.3.8   Giản đồ được sử dụng trong các biểu thức lượng từ

Như đã khẳng định, một giản đồ có thể được sử dụng như 1 kiểu dữ liệu nên nó có thể xuất hiện trong các biểu thức lượng từ. Ví dụ :

hay

Vị từ

còn có thể được phát biểu theo 1 cách khác như sau :

V.3.9   Giản đồ được sử dụng như 1 vị từ

Xét giản đồ SchemaThree như sau :

Ta có thể phát biểu :

để diễn tả rằng bất kỳ số nguyên a và tập số c nào thỏa ràng buộc trong SchemaThree thì cũng thỏa ràng buộc trong SchemaTwo.

Phát biểu trên tương đương với phát biểu sau :

Như vậy, ta nhận thấy toàn bộ phần khai báo của 2 giản đồ đã được lược bỏ, chỉ có phần ràng buộc là được giữ lại.

V.3.10   Dạng chuẩn của 1 giản đồ

Khi định nghĩa 1 giản đồ, phần khai báo của giản đồ bản thân nó đã chứa sẵn 1 số ràng buộc nhất định. Chính vì vậy, khi sử dụng giản đồ như 1 vị từ thì các ràng buộc này cũng dễ bị "bỏ quên", do phần khai báo của giản đồ đã được giản lược (xem phần trên).

Vì vậy, để tránh gây nhầm lẫn, ta nên chuyển giản đồ về một dạng mới sao cho tất cả các ràng buộc đều nằm ở phần ràng buộc bên dưới. Một giản đồ theo dạng này được gọi là giản đồ chuẩn, và thao tác chuyển toàn bộ ràng buộc xuống phần dưới của giản đồ được gọi là chuẩn hóa giản đồ.

Ví dụ : Xét giản đồ sau :

Thoạt nhìn, ta có thể nghĩ giản đồ này tương đương với giản đồ SchemaTwo, tuy nhiên, ngay trên bản thân kiểu số tự nhiên N đã có ràng buộc rồi. Do vậy, ta chuẩn hóa nó lại như sau :

Ví dụ 2 : Xét giản đồ Date ở trên :

Ta chuẩn hóa giản đồ này lại như sau :

V.3.11   Đặt lại tên các thành phần trong giản đồ

Trong quá trình đặc tả, đôi khi cần phải đặt lại tên các thành phần trong 1 giản đồ. Bằng cách này ta có thể tạo nên 1 giản đồ mới có cùng kết cấu và ràng buộc với giản đồ cũ nhưng có các thành phần với tên và ý nghĩa khác đi.

Cú pháp để đổi tên 1 giản đồ :

Nếu Schema là 1 giản đồ, ta ký hiệu :

là giản đồ được tạo nên bằng cách đổi tên thành phần tên là old trong Schema thành new.

Ví dụ : trong giản đồ SchemaTwo, nếu thay a bằng q và c bằng s, ta có :

                        khi đó, giản đồ kết quả sẽ tương đương với giản đồ :

Tương tự như vậy, nếu muốn định nghĩa kiểu dữ liệu StartDate từ kiểu dữ liệu Date, ta có thể làm như sau :

Khi đó, giản đồ sẽ tương đương :

Nếu ta định nghĩa thêm giản đồ FinishDate :

Khi đó, StartDate và FinishDate được xem như 2 kiểu dữ liệu khác nhau, mặc dù chúng đều có 2 thành phần và có các ràng buộc tương tự như nhau.

V.4 Các phép toán trên giản đồ

V.4.1   Phép nối liền (Conjunction)

Cho 2 giản đồ S và T được thể hiện như sau, với P và Q là 2 vị từ diễn tả các ràng buộc lên các biến tương ứng:

Ta ký hiệu :

            S Ù T

để biểu diễn phép nối liền của 2 giản đồ S và T. Kết quả sẽ là 1 giản đồ mới được tạo nên bằng cách gộp các biến trong S và T lại, đồng thời thực hiện phép nối liền trên 2 vị từ ràng buộc P và Q.

Lưu ý : Nếu trong 2 giản đồ S và T có 1 thành phần giống nhau thì thành phần này phải có kiểu giống nhau ở cả 2 giản đồ. Nếu không giản đồ S Ù T sẽ không xác định.

V.4.2   Phép đổi tên (Decoration)

Giả sử ta có giản đồ State mô tả 1 trạng thái của hệ thống, có 2 thành phần a, b với ràng buộc là P

Mỗi đối tượng s : State biểu diễn 1 trạng thái hợp lệ của hệ thống.

Để biểu diễn 1 thao tác lên 1 trạng thái nào đó, ta cần sử dụng 2 trạng thái : trạng thái trước khi thực hiện thao tác và trạng thái sau khi thực hiện thao tác đó. Để phân biệt 2 trạng thái này, ta dùng phép đặt tên để tạo nên 1 giản đồ mới, bằng cách thêm dấu nháy (’) vào sau tên giản đồ cũng như tên tất cả các biến được khai báo trong giản đồ :

Để đặc tả thao tác, ta có thể đưa cả 2 trạng thái State và State’ vào phần khai báo của giản đồ. Một giản đồ thao tác sẽ có dạng :

Ngôn ngữ Z quy định 1 cách thức biểu diễn cả 2 giản đồ State và State’, cách thức biểu diễn đó như sau :

V.4.3   Phép nối rời (Disjunction)

Cho 2 giản đồ S và T được thể hiện như sau, với P và Q là 2 vị từ diễn tả các ràng buộc lên các biến tương ứng:

Ta ký hiệu :

            S Ú T

để biểu diễn phép nối rời của 2 giản đồ S và T. Kết quả sẽ là 1 giản đồ mới được tạo nên bằng cách gộp các biến trong S và T lại, đồng thời thực hiện phép nối rời trên 2 vị từ ràng buộc P và Q.

Tương tự như trên phép nối liền, tất cả các thành phần (các biến) xuất hiện ở cả 2 giản đồ thành phần phải có cùng kiểu dữ liệu. Tất cả các ràng buộc nếu có xuất hiện ở phần khai báo đều phải được chuyển sang phần vị từ ràng buộc của mỗi giản đồ thành phần trước khi thực hiện phép nối rời.

V.4.4   Phép phủ định (Negation)

Cho giản đồ S T được thể hiện như sau, với P là vị từ diễn tả các ràng buộc lên các biến tương ứng:

khi đó giản đồ phủ định ØS sẽ có dạng :

Lưu ý : phép phủ định chỉ áp dụng cho các giản đồ đã được chuẩn hóa (tức là tất cả các ràng buộc đều phải được chuyển sang phần vị từ ràng buộc bên dưới).

Ví dụ : Giản đồ Date biểu diễn những ngày tháng hợp lệ, do đó ØDate sẽ biểu diễn tất cả những cặp (month, day) nào không phải là một ngày tháng hợp lệ.

V.4.5   Phép lượng từ hóa

Ta có thể lượng từ hóa 1 số thành phần của 1 giản đồ để tạo ra 1 giản đồ mới. Nếu Q là 1 lượng từ và dec là phần khai báo, khi đó giản đồ được lượng từ hóa sẽ có dạng :

Giản đồ này được tạo thành bằng cách bỏ đi các thành phần có trong phần khai báo dec và lượng từ hóa chúng bằng lượng từ Q trong phần vị từ ràng buộc bên dưới.

Ví dụ : cho giản đồ như sau :

Khi đó,  là giản đồ :

và  là giản đồ :

V.5 Bài tập áp dụng

Bạn đang đọc truyện trên: Truyen2U.Pro