200 likes | 692 Views
Đại học Khoa học Tự nhiên, ĐHQG-HCM Khoa Công Nghệ Thông Tin. Chương 7 Kiểu ánh xạ. ThS. Trần Minh Triết. Nội dung. Á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” ,
E N D
Đại học Khoa học Tự nhiên, ĐHQG-HCM Khoa Công Nghệ Thông Tin Chương 7 Kiểu ánh xạ ThS. Trần Minh Triết
Nội dung • Á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”, “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ạ • Nhắc lại: • Tích Descarte: 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}
Ánh xạ • Ánh xạ: 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
Định nghĩa kiểu ánh xạ m • Định nghĩa kiểu ánh xạ: A B • Ví dụ 1: f : ℤ ℤ • Ví dụ 2: Acc-system:: custs: Name Acc-no accs: Acc-no Account • Ví dụ 3: thuộc-khoa: SINH-VIÊN KHOA • Ví dụ 4: phân-công: NHÂN-VIÊN PHÒNG-BAN m m m m m
Đị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)} chính là {1 ↦ TRUE, 0 ↦ FALSE}
Hàm và thao tác trên ánh xạ • Hàm Domain (dom) 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) 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 nguồn A m m
Hàm và thao tác trên ánh xạ • Ví dụ: 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 † • Cho m và n là 2 ánh xạ cùng kiểu _†_: A B A B A B m†nû { a↦b | (( a domn) (b = n(a))) ((a (domm – domn)) (b = m(a))} • 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 mkhông có tiền ảnh/khóa trong dom(n) • 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} m m m
{ 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}
Toán tử chọn các bộ theo tập khóa ⊲ _⊲_: A-set A B A B s ⊲ mû { a↦m(a)| a (domns ) } • Ý nghĩa: chọn lại những bộ trong ánh xạ có giá trị khóa cho trước • Ví dụ: { 2, 3, 4} ⊲ {1 ↦ 3, 4 ↦ 7, 3 ↦ 3} = {4 ↦ 7, 3 ↦ 3} {} ⊲ m = {} m m
_ Toán tử xóa bộ dựa vào tập khóa ⊲ _⊲_: A-set A B A B s ⊲ mû { a↦m(a)| a (domn – s ) } • Ý nghĩa: Xóa bỏ các bộ trong ánh xạ có giá trị khóa cho trước • Ví dụ: { 2, 3, 4} ⊲ {1 ↦ 3, 4 ↦ 7, 3 ↦ 3} = {1 ↦ 3} {} ⊲ m = m m m _ _ _ _
Đặc tả với kiểu ánh xạ • Ví dụ: Mã-HPTên-HP Mã-GVMã-HP-set Mã-GVGiảng-Viên Mã-SVSinh-Viên m m m m
Đặ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 :: 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 Đăng-ký = Sinh-Viên Lớp-set Danh-sách-lớp= Lớp Sinh-Viên-set m
Đặ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ý) û if (sv domds-đăng-ký) then ds-đăng-ký(sv) else {}
Đặ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) extwrđk: Đăng-ký pre ({sv} ⊲đk = {}) (lớp ({sv} ⊲đk)(sv)) post (đk = đk† { sv↦ ({sv} ⊲đk )(sv) {lớp}) } ({sv} ⊲đk {})) (đk = đk { sv↦ {lop}) ({sv} ⊲đk = {})) ↼ ↼ ↼ ↼ ↼ ↼ ↼
Đặ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) extwrđk: Đăng-ký pre (sv dom(đk)) ((sv dom(đk)) (lớp đk(sv))) post ((đk = đk† { sv↦đk(sv) {lớp}}) (sv dom(đk))) ((đk = đk { sv↦ {lop}) (sv dom(đk))) ↼ ↼ ↼ ↼ ↼ ↼ ↼ ↼