chương 6 kiểu đối tượng phức

15
1 Chương 6 Kiểu đối tượng phức ThS. Trần Minh Triết Đại học Khoa học Tự nhiên, ĐHQG-HCM Khoa Công Nghệ Thông Tin

Upload: jacob-ruiz

Post on 01-Jan-2016

62 views

Category:

Documents


0 download

DESCRIPTION

Đại học Khoa học Tự nhiên, ĐHQG-HCM Khoa Công Nghệ Thông Tin. Chương 6 Kiểu đối tượng phức. ThS. Trần Minh Triết. Nội dung. Định nghĩa kiểu đối tượng phức Khởi tạo đối tượng phức Ràng buộc trên kiểu dữ liệu Cập nhật đối tượng phức. Đặc tả kiểu đối tượng phức. Cú pháp: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chương 6 Kiểu đối tượng phức

1

Chương 6 Kiểu đối tượng phức

ThS. Trần Minh Triết

Đại học Khoa học Tự nhiên, ĐHQG-HCM

Khoa Công Nghệ Thông Tin

Page 2: Chương 6 Kiểu đối tượng phức

2

Nội dung

Định nghĩa kiểu đối tượng phức Khởi tạo đối tượng phức Ràng buộc trên kiểu dữ liệu Cập nhật đối tượng phức

Page 3: Chương 6 Kiểu đối tượng phức

3

Đặc tả kiểu đối tượng phức

Cú pháp:

Tên-kiểu-đối-tượng-phức ::

Tên-field1: Kiểu1

Tên-field2: Kiểu2

Tên-fieldn: Kiểun

Page 4: Chương 6 Kiểu đối tượng phức

4

Đặc tả kiểu đối tượng phức

Ví dụ:

Phân-số ::

tử-số : ℤ

mẫu-số : ℤ

Khách-hàng ::

họ-tên : String

địa-chỉ : String

điện-thoại: String

Page 5: Chương 6 Kiểu đối tượng phức

5

Đặc tả kiểu đối tượng phức

Ví dụ:

Date ::

day : {d ℕ1 | d 31}

month : {m ℕ1 | m 12}

year : {y ℕ1 | y 1900}

Ví dụ:

Date ::

day : {1, 2, …, 31}

month : {1, 2, …, 12}

year : {y ℕ1 | y 1900}

Page 6: Chương 6 Kiểu đối tượng phức

6

Đặc tả kiểu đối tượng phức

Ví dụ:Điểm ::

x : ℝ y : ℝ

Tam-giác ::A : ĐiểmB : ĐiểmC : Điểm

Hình-tròn ::tâm : Điểmbán-kính : ℝ

Page 7: Chương 6 Kiểu đối tượng phức

7

Tạo đối tượng phức

Hàm mk-TênKiểuĐốiTượngPhức dùng để tạo đối tượng phức thuộc kiểu tương ứng

Ví dụ:mk-Phân-số: ℤ ℤ Phân-sốmk-Phân-số (5, 10) sẽ tạo ra 1 đối tượng phân số có tử-số là 5 và mẫu-số là 10 Điểm

Page 8: Chương 6 Kiểu đối tượng phức

8

Tạo đối tượng phức

Ví dụ:

mk-Điểm: ℝ ℝ Điểm

mk-Tam-giác: Điểm Điểm Điểm Tam-giác

mk-Tam-giác (mk-Điểm(0,0), mk-Điểm (1,0), mk-Điểm(0, 1)) sẽ tạo ra tam giác có các điểm là A(0,0), B(1, 0) và C(0,1)

mk-Hình-tròn: Điểm ℝ Hình-tròn

mk-Hình-tròn (mk-Điểm(100,100), 200) sẽ tạo ra 1 đối tượng hình tròn có tâm (100,100) và bán kính 200

Page 9: Chương 6 Kiểu đối tượng phức

9

Ràng buộc trên kiểu dữ liệu

Ràng buộc trên kiểu dữ liệu Điều kiện về miền giá trị của các thuộc tính trong kiểu dữ

liệu Điều kiện về mối liên quan về giá trị của các thuộc tính

trong kiểu dữ liệu Ví dụ: mk-Date (29, 2, 2007) !!! Ràng buộc trên kiểu dữ liệu

Tính chất bất biến (invariant) trên các thuộc tính nhằm đảm bảo tính hợp lệ của thông tin trong đối tượng

Page 10: Chương 6 Kiểu đối tượng phức

10

Ràng buộc trên kiểu dữ liệu

Hàm kiểm tra ràng buộc trên kiểu dữ liệu Ví dụ:

Date ::

day : {d ℕ1 | d 31}

month : {m ℕ1 | m 12}

year : {y ℕ1 | y 1900}

inv-Date: Date B

inv-Date (d) ≜ (d.month {1, 3, 5, 7, 8, 10, 12} d.day {1,…, 31})

(d.month {4, 6, 9, 11} d.day {1,…, 30})

(d.month = 2 là-năm-nhuận(d.year) d.day {1,…, 29})

(d.month = 2 (là-năm-nhuận(d.year)) d.day {1,…, 28})

Page 11: Chương 6 Kiểu đối tượng phức

11

Ràng buộc trên kiểu dữ liệu

Ví dụ: cho kiểu dữ liệu Mảng-tăngMảng-tăng ::

ds : *ℝ

số-pt : ℕRàng buộc: mảng có tối đa 1000 phần tử, các phần tử trong ds luôn có thứ tự tăng và số-pt bằng đúng với số phần tử trong dsinv-Mảng-tăng: Mảng-tăng B

inv-Mảng-tăng (m) ≜let s = m.ds, n = m.số-pt inlen s 1000 i, j inds s i > j s(i) s(j) n = len s

Page 12: Chương 6 Kiểu đối tượng phức

12

Ràng buộc trên kiểu dữ liệu

Ví dụ: cho kiểu dữ liệu Mảng-tăng

Mảng-tăng ::

ds : *ℝsố-pt-không-âm-phân-biệt : ℕ

Ràng buộc: các phần tử trong ds luôn có thứ tự tăng và số-pt-không-âm-phân-biệt là số lượng các phần tử không âm phân biệt trong ds

inv-Mảng-tăng: Mảng-tăng B

inv-Mảng-tăng (m) ≜let s = m.ds, n = m.số-pt in

i, j inds s i > j s(i) s(j) n = card { x elems s | x 0}

Page 13: Chương 6 Kiểu đối tượng phức

13

Cập nhật đối tượng phức

Phương án 1: Tạo ra đối tượng mới với các thông tin mới cập nhật và các thông tin sẵn có

Ví dụ: d = mk-Date (1, d.month, d.year) sẽ cập nhật lại giá trị ngày là 1, vẫn giữa nguyên giá trị tháng và năm

Phương án 2: sử dụng hàm để cập nhật thuộc tính trong đối tượng phức

Ví dụ: d = (d, date ↦ 1) sẽ cập nhật lại giá trị ngày là 1, vẫn giữa nguyên giá trị tháng và năm

� �

Page 14: Chương 6 Kiểu đối tượng phức

14

Cập nhật đối tượng phức

Ví dụ: đặc tả hàm rút gọn phân số (giả sử tử số và mẫu số đều là số tự nhiên)

RÚT-GỌN-PS

ext wr ps: Phân-số

let tử-số-cũ = ps.tử-số, mẫu-số-cũ = ps.mẫu-số in

let u = uscln (tử-số-cũ, mẫu-số-cũ) in

let tử-số-mới = tử-số-cũ / u, mẫu-số-mới = mẫu-số-cũ / u in

ps = mk-Phân-số (tử-số-mới, mẫu-số-mới)

� �

Page 15: Chương 6 Kiểu đối tượng phức

15

Cập nhật đối tượng phức

Ví dụ: đặc tả hàm rút gọn phân số (giả sử tử số và mẫu số đều là số tự nhiên)

RÚT-GỌN-PS

ext wr ps: Phân-số

let tử-số-cũ = ps.tử-số, mẫu-số-cũ = ps.mẫu-số in

let u = uscln (tử-số-cũ, mẫu-số-cũ) in

let tử-số-mới = tử-số-cũ / u, mẫu-số-mới = mẫu-số-cũ / u in

ps = (ps, tử-số ↦ tử-số-mới, mẫu-số ↦ mẫu-số-mới)

� �