chương 6 kiểu đối tượng phức
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 PresentationTRANSCRIPT
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
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
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
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
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}
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 : ℝ
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
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
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
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})
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
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}
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
� �
�
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)
� �
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)
� �
�