Trường Đại học Công Nghệ Thông Tin, ĐHQG-HCM Khoa Công Nghệ Phần Mềm

Chương 7 Kiểu ánh xạ

23-02-2023

TS. Vu Thanh Nguyen

1

TS. Vũ Thanh Nguyên

Nội dung

23-02-2023

TS. Vu Thanh Nguyen

2

 Ánh xạ  Các hàm và thao tác trên ánh xạ  Đặc tả sử dụng ánh xạ

Kiểu ánh xạ

 Ví dụ: { “TH301” ↦ “Đặc tả hình thức”,

23-02-2023

TS. Vu Thanh Nguyen

3

“TH402” ↦ “Công cụ và Môi trường phát triển phần mềm”, “TH403” ↦ “Xây dựng phần mềm hướng đối tượng”, …}

Kiểu ánh xạ

 Tích Descarte:

 Nhắc lại:

A  B = {(a, b) | (a  A)  (b B)}

 Ánh xạ và tích Descarte:

 Cho A = {a1, a2, a3, a4, …}, B = {b1, b2, b3, …} {(a1, b1), (a2, b2), (a3, b1), (a4, b3)}  A  B

 Khi đó, ta có ánh xạ từ A vào B sau:

{a1↦ b1, a2 ↦ b2, a3 ↦ b1, a4 ↦ b3}

23-02-2023

TS. Vu Thanh Nguyen

4

Ánh xạ

 Đơn ánh: Mỗi phần tử trong tập nguồn tương ứng với tối đa 1

phần tử (ảnh) trong tập đích

 Toàn ánh: Mỗi phần tử trong tập nguồn đều có ảnh trong tập

đích

 Song ánh: Mỗi phần tử trong tập đích có duy nhất một tiền

ảnh trong tập nguồn

Tập nguồn

Tập đích

Ảnh

Tiền ảnh

23-02-2023

TS. Vu Thanh Nguyen

5

Định nghĩa kiểu ánh xạ

m

 Định nghĩa kiểu ánh xạ: A  B  Ví dụ 1: m f : ℤ  ℤ

 Ví dụ 2:

Acc-system::

m

m

custs: Name  Acc-no accs: Acc-no  Account

 Ví dụ 3:

m

thuộc-khoa: SINH-VIÊN  KHOA

 Ví dụ 4:

m

23-02-2023

TS. Vu Thanh Nguyen

6

phân-công: NHÂN-VIÊN  PHÒNG-BAN

Định nghĩa ánh xạ

 Định nghĩa ánh xạ thông qua tính chất:

{x ↦ y | Vị từ liên quan đến x và y}

 Ví dụ:

{p ↦ q | (p = 1  q = TRUE)  (p = 0  q = FALSE)}

23-02-2023

TS. Vu Thanh Nguyen

7

chính là {1 ↦ TRUE, 0 ↦ FALSE}

Hàm và thao tác trên ánh xạ

 Hàm Domain (dom)

m dom: A  B  A-set dom(m) ≝ { a |  b  B  ( (a ↦ b)  m)}

 Ý nghĩa: tập các phần tử trong tập nguồn A có ảnh trong tập

đích B

 Hàm Range (rng)

m

rng: A  B  B-set rng (m) ≝ { b |  a  A  ( (a ↦ b)  m)}

 Ý nghĩa: tập các phần tử trong tập đích B có tiền ảnh trong tập

23-02-2023

TS. Vu Thanh Nguyen

8

nguồn A

Hàm và thao tác trên ánh xạ

 Ví dụ:

23-02-2023

TS. Vu Thanh Nguyen

9

vowel {‘A’ ↦ 65, ‘E’ ↦ 69, ‘I’ ↦ 73, ‘O’ ↦ 79, ‘U’ ↦ 85} dom (vowel) = {‘A’, ‘E’, ‘I’, ‘O’, ‘U’} rng (vowel) = {65, 69, 73, 79, 85} vowel(‘A’) = 65 vowel(‘U’) = 85

Toán tử cập nhật †

m

m

m

 Cho m và n là 2 ánh xạ cùng kiểu _†_ : A  B  A  B  A  B m†n ≝

{ a ↦ b |

(( a  dom n)  (b = n(a)))

 ((a  (dom m – dom n))  (b = m(a))} hoặc { a ↦

(if a  dom n then n(a) else m(a) |

23-02-2023

TS. Vu Thanh Nguyen

10

a  (dom m  dom n) }

Toán tử cập nhật †

 Kết quả của m † n là tập hợp tất cả các bộ trong n và các bộ

trong m không có tiền ảnh/khóa trong dom(n)

23-02-2023

TS. Vu Thanh Nguyen

11

 Ví dụ: { 2 ↦ 4, 1 ↦ 3} † {3 ↦ 5, 1 ↦ 2} = {1 ↦2, 2 ↦ 4, 3 ↦ 5} { 3 ↦ 5, 1 ↦ 2} † {2 ↦ 4, 1 ↦ 3} = {1 ↦3, 2 ↦ 4, 3 ↦ 5}

Giả sử m1 = {a ↦ 1, c ↦ 3, d ↦ 1}, m2 = {b ↦ 4, c ↦ 5} m1†m2 = {a ↦ 1,b ↦ 4, c ↦ 5,d ↦ 1} m2†m1 = {a ↦ 1,b ↦ 4, c ↦ 3,d ↦ 1}

m†{} = m = {}†m

23-02-2023

TS. Vu Thanh Nguyen

12

Toán tử chọn các bộ theo tập khóa ⊲

m

m

_⊲_ : A-set  A  B  A  B s ⊲ m ≝

{ a ↦ m(a) | a  (dom m  s ) }

 Ý nghĩa: chọn lại những bộ trong ánh xạ có giá trị khóa cho

23-02-2023

TS. Vu Thanh Nguyen

13

trước

Toán tử chọn các bộ theo tập khóa ⊲

23-02-2023

TS. Vu Thanh Nguyen

14

 Ví dụ: { 2, 3, 4} ⊲ {1 ↦ 3, 4 ↦ 7, 3 ↦ 3} = {4 ↦ 7, 3 ↦ 3} { a, d, e} ⊲ m1 = {a ↦ 1, d ↦ 1} {} ⊲ m = {} s ⊲ {} = {}

_ Toán tử xóa bộ dựa vào tập khóa ⊲

m

m

_

_

_⊲_ : A-set  A  B  A  B s ⊲ m ≝

{ a ↦ m(a) | a  (dom m – s ) }

 Ý nghĩa: Xóa bỏ các bộ trong ánh xạ có giá trị khóa cho

_

_

23-02-2023

TS. Vu Thanh Nguyen

15

trước

_

_

_

_ Toán tử xóa bộ dựa vào tập khóa ⊲

23-02-2023

TS. Vu Thanh Nguyen

16

Ví dụ: { 2, 3, 4} ⊲ {1 ↦ 3, 4 ↦ 7, 3 ↦ 3} = {1 ↦ 3} { a, d, e} ⊲ m1 = {c ↦ 3} {} ⊲ m = m ma†mb = (dom mb – ma)  mb

Đặc tả với kiểu ánh xạ

m

m

23-02-2023

TS. Vu Thanh Nguyen

17

 Ví dụ: m Mã-HP  Tên-HP m Mã-GV  Mã-HP-set Mã-GV  Giảng-Viên Mã-SV  Sinh-Viên

Đặc tả với kiểu ánh xạ

 Ví dụ: Mã-HP = Char* Mã-SV = Char* HọTên = Char* Sinh-Viên ::

mã-SV: Mã-SV họ-tên: HọTên

Lớp ::

23-02-2023

TS. Vu Thanh Nguyen

18

mã-HP: Mã-HP mã-Lớp: ℕ1 học-kỳ: {1, 2, 3, 4} năm-học: ℕ1

Đặc tả với kiểu ánh xạ

m

= Sinh-Viên  Lớp-set

Đăng-ký Danh-sách-lớp= Lớp

m  Sinh-Viên-set

23-02-2023

TS. Vu Thanh Nguyen

19

Đặc tả với kiểu ánh xạ

 Ví dụ: Đặc tả hàm trả về các lớp mà sinh viên sv đã và đang

đăng ký học

DSĐăngKýHọc : Sinh-Viên  Đăng-ký  Đăng-ký DSĐăngKýHọc (sv, ds-đăng-ký) ≜

{sv} ⊲ ds-đăng-ký

DSLớpĐăngKýHọc : Sinh-Viên  Đăng-ký  Lớp-set DSLớpĐăngKýHọc (sv, ds-đăng-ký) ≜

23-02-2023

TS. Vu Thanh Nguyen

20

if (sv  dom ds-đăng-ký) then else ds-đăng-ký(sv) {}

Đặc tả với kiểu ánh xạ

  Ví dụ: Đăng ký cho 1 sinh viên học 1 lớp ĐĂNG-KÝ-HỌC (sv: Sinh-Viên, lớp: Lớp) wr đk: Đăng-ký ext ↼ ({sv} ⊲ đk = {}) (lớp  ({sv} ⊲ đk)(sv))

pre post

(đk = đk † { sv ↦ ({sv} ⊲ đk )(sv)  {lớp}) }  ({sv} ⊲ đk  {}))

↼ ↼

23-02-2023

TS. Vu Thanh Nguyen

21

 (đk = đk  { sv ↦ {lop})  ({sv} ⊲ đk = {}))

Đặc tả với kiểu ánh xạ

wr (sv  dom(đk))  ((sv  dom(đk))  (lớp  đk(sv)))

 Ví dụ: Đăng ký cho 1 sinh viên học 1 lớp ĐĂNG-KÝ-HỌC (sv: Sinh-Viên, lớp: Lớp) đk: Đăng-ký ext ↼ pre post

((đk = đk † { sv ↦ đk(sv)  {lớp}})  (sv  dom(đk)))

↼ ↼

23-02-2023

TS. Vu Thanh Nguyen

22

 ((đk = đk  { sv ↦ {lop})  (sv  dom(đk)))