Bài giảng Đặc tả hình thức - Chương 6: Kiểu đối tượng phức bao gồm các 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. Mời các bạn cùng tham khảo.
Trường Đại học Công Nghệ Thông Tin, ĐHQG-HCM Khoa Công Nghệ Phần Mềm Chương 6: Kiểu đối tượng phức PGS.TS Vũ Thanh Nguyên PGS.TS Vũ Thanh Nguyên 4/5/2019 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 kiểu liệu Cập nhật đối tượng phức 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt Đặc tả kiểu đối tượng phức Trong trình phát triển ứng dụng, kiểu liệu hỗ trợ hệ thống không đủ sức mạnh để đặc tả toán phức tạp Đối với khái niệm ngơn ngữ lập trình sử dụng cấu trúc liệu để mô tả đối tượng đặc tả hình thức có khái niệm tương tự đối tượng phức Với đối tượng phức xử lý nhiều thơng tin so với đối tượng có sẵn 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt Đặ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/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt Đặc tả kiểu đối tượng phức Ở đó: ký hiệu :: đọc ”is composed of” mà định nghĩa tương đương khả sau: Name :: … 4/5/2019 Name = compose Name of … end Lưu ý: ký hiệu :: thường sử dụng so với compose CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt Đặc tả kiểu đối tượng phức Ví dụ: xác đinh kiẻu liệu Datec Datec :: day : {1,…,366} year : N Datec = compose Datec of day : {1,…,366} year : N end 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt Đặc tả kiểu đối tượng phức Ví dụ: xác đinh kiẻu liệu Fahrenheit Celsius Fahrenheit = compose Fahrenheit of v : R end hay Celsius = compose Celsius of v : R end 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt Đặc tả kiểu đối tượng phức Ví dụ: Phân-số :: tử-số : ℤ mẫu-số : ℤ Phân-số = compose Phân-số of tử-số : ℤ mẫu-số : ℤ end 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt Đặc tả kiểu đối tượng phức Ví dụ: Khách-hàng :: họ-tên : String địa-chỉ : String điện-thoại: String Khách-hàng = compose Khách-hàng of họ-tên : String địa-chỉ : String điện-thoại: String end 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt Đặc tả kiểu đối tượng phức Ví dụ: Date = compose Date of day : {d ℕ1 | d 31} month : {m ℕ1 | m 12} year : {y ℕ1 | y 1900} end Ví dụ: Date = compose Date of day : {1, 2, …, 31} month : {1, 2, …, 12} year : {y ℕ1 | y 1900} end 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 10 Đặc tả kiểu đối tượng phức Ví dụ: Điểm :: x:ℝ y:ℝ Tam-giác :: A : Điểm B : Điểm C : Điểm Hình-tròn :: tâm : Điểm bán-kính : ℝ 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 11 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) tạo đối tượng phân số có tử-số mẫu-số 10 Điểm 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 12 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)) tạo tam giác có điểm A(0,0), B(1, 0) 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) tạo đối tượng hình tròn có tâm (100,100) bán kính 200 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 13 Ràng buộc kiểu liệu Ràng buộc kiểu liệu Điều kiện miền giá trị thuộc tính kiểu liệu Điều kiện mối liên quan giá trị thuộc tính kiểu liệu Ví dụ: mk-Date (29, 2, 2007) !!! Ràng buộc kiểu liệu Tính chất bất biến (invariant) thuộc tính nhằm đảm bảo tính hợp lệ thơng tin đối tượng 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 14 Ràng buộc kiểu liệu Hàm kiểm tra ràng buộc kiểu 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 = là-năm-nhuận(d.year) d.day {1,…, 29}) (d.month = (là-năm-nhuận(d.year)) d.day {1,…, 28}) 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 15 Ràng buộc kiểu liệu Ví dụ: cho kiểu liệu Mảng-tăng Mảng-tăng :: ds : ℝ* số-pt : ℕ Ràng buộc: mảng có tối đa 1000 phần tử, phần tử ds ln có thứ tự tăng số-pt với số phần tử 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 len s 1000 i, j inds s i > j s(i) s(j) n = len s 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 16 Ràng buộc kiểu liệu Ví dụ: cho kiểu liệu Mảng-tăng Mảng-tăng :: ds : ℝ* số-pt-không-âm-phân-biệt : ℕ Ràng buộc: phần tử ds ln có thứ tự tăng số-ptkhông-âm-phân-biệt số lượng phần tử không âm phân biệt 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} 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 17 Cập nhật đối tượng phức Phương án 1: Tạo đối tượng với thông tin cập nhật thông tin sẵn có ⃐ ⃐ Ví dụ: d = mk-Date (1, d.month, d.year) cập nhật lại giá trị ngày 1, nguyên giá trị tháng năm Phương án 2: sử dụng hàm để cập nhật thuộc tính đối tượng phức ⃐ date ↦ 1) cập nhật lại giá trị ngày 1, Ví dụ: d = (d, nguyên giá trị tháng năm 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 18 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ố mẫu số 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) 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 19 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ố mẫu số 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) 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 20 Cập nhật đối tượng phức Ví dụ: Sơ đồ phép tốn Datec 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 21 Cập nhật đối tượng phức Ví dụ: Hàm cung cấp khả tạo giá trị kết hợp (phức) mà khác biệt trường dt = mk-Datec(17,1927) (dt, day ↦ 29) = mk-Datec(29,1927) (dt, year ↦ 1937) = mk-Datec(17,1937) 4/5/2019 CuuDuongThanCong.com PGS.TS Vũ Thanh Nguyên https://fb.com/tailieudientucntt 22 ... 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) 4/5/2019... 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)... Đ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)) tạo tam giác có điểm A(0,0), B(1, 0) C(0,1) mk -Hình- tròn: Điểm ℝ Hình- tròn mk -Hình- tròn