Bài giảng Đặc tả hình thức - Chương 5: Đặc tả hàm cung cấp cho người học các kiến thức: Tổng quan về hàm, đặc tả hàm không tường minh, đặc tả hàm tường minh, đặc tả đệ quy và sử dụng hàm phụ, một số cấu trúc điều khiển. Mời các bạn cùng tham khảo.
Trang 1Chương 5: Đặc tả hàm
PGS.TS Vũ Thanh Nguyên
T rường Đại học Công Nghệ Thông Tin, ĐHQG-HCM
Khoa Công Nghệ Phần Mềm
Trang 3Tổng Quan Về Hàm
Hàm là một khái niệm trừu tượng toán học: là ánh xạ giữa haitập giá trị
function_name: domain → range, ở đó
function_name: tên của hàm
domain: miền xác định của tập giá trị mà ở đó hàm có thểứng dụng
range: phạm vi xác định của tập giá trị mà ở đó hàm chứađựng kết quả của ứng dụng hàm
giữa domain và range cách nhau bằng →
Nếu miền xác định có từ 2 giá trị trở lên, cần dùng dấu
gcd: N1xN1 → N1
Trang 4square(i) ≜ i*i
Hàm xác định giá trị tuyệt đối
abs: Z → N
abs(i) ≜ if i<0 then –i else i
Trang 5Tổng Quan Về Hàm
Hàm chia hết
divides: N1 N → B
divides(i,j) ≜ j mod i = 0
Sử dụng toán tử dạng infix i divides j
Trang 8Các phép tổng quát trên ngôn ngữ VDM
Trang 9Đặc tả hàm
Ví dụ:
Hàm luỹ thừa có thể được xác định bằng phương pháp
tường minh bằng hàm exponent_x như sau:
Trang 10Đặc tả hàm
Ví dụ:
Hàm luỹ thừa củng có thể được xác định bằng phương
pháp không tường minh như sau:
EXPONENT(x:Z, n:N)y:Z
pre true
post y=xn
Trang 11Đặc tả hàm không tường minh
Đặc tả hàm không tường minh (implicit definition):
Đặc tả hàm không tường minh mô tả cái được tính toánthay vì định nghĩa trực tiếp vấn đề, chúng ta không phải chỉ
ra kết quả được tính toán như thế nào
Có nhiều nguyên nhân để chúng ta phải đặc tả không tườngminh Có lẽ nguyên nhân rõ ràng nhất là đặc tả thưởngngắn gọn hơn so với định nghĩa cụ thể
Đặc tả không tường minh thường có ý nghĩa chính xác vớibài toán mong muốn hơn so với đặc tả tường minh (hay càiđặt)
Trang 12Đặc tả hàm không tường minh
Đặc tả hàm không tường minh (implicit definition):
Vấn đề ý nghĩa nhất là có một đặc tả bao trùm từ cài ngắngọn nhất đến cái được đem mô tả để cài đặt
Toàn bộ miền này trở nên rõ ràng hơn khi đối tượng dữ liệuđược áp dụng trong đặc tả
Một trong những thuận lợi của tìm kiếm một đặc tả là nó cóthể mô tả đầy đủ miền giá trị bao trùm cho cài đặt
Đặc tả không tường minh là cách lưu trữ lại yêu cầu chứcnăng mà không cần bận tâm đến phương thức cụ thể củatính toán Tính chất khác của đặc tả là nó có thể mô tả cácthuộc tính của kết quả cần thiết sao cho người dùng dễ hiểunhất
Trang 13Đặc tả hàm không tường minh
Đặc tả hàm không tường minh (implicit definition):
Đặc tả không tường minh phải thỏa toàn bộ các tính chất
mà người dùng mong muốn trả về kết quả đúng nhất từ đặctả
Trang 14Đặc tả hàm không tường minh
Đặc tả hàm không tường minh (implicit definition):
Phát biểu trạng thái hệ thống trước và sau khi thực hiệnhàm
Không cần nêu ra các bước để thực hiện xử lý trong hàm
tên_hàm (thamsố1: Kiểu1 , thamsố2: Kiểu2 …) kq: Kiểukq
pre Vị từ pre-condition
post Vị từ post-condition
Trang 15Đặc tả hàm không tường minh
Định nghĩa tên hàm, tên và kiểu của các tham số đầu vào, tên
và kiểu của kết quả trả về (tham số đầu ra)
Vị từ Pre-condition và Post-condition là biểu thức điều kiệnlogic, có thể có giá trị là true hoặc false
Biểu thức điều kiện có thể chứa một hoặc nhiều vị từ Các
từ được liên kết bởi các phép liên kết logic, lượng từ và cóthể chứa đựng hàm, tham số, hằng số và biến
Xác định Vị từ Pre-condition để phát biểu điều kiện về giá trịcủa các tham số đầu vào
Xác định Vị từ Post-condition để phát biểu mối quan hệ giữacác tham số đầu vào với kết quả trả về của hàm
Trang 16Đặc tả hàm không tường minh
Các phép liên kết logic của vị từ Pre-condition và condition
Trang 17Đặc tả hàm không tường minh
Theo cấu trúc chuẩn của đặc tả hàm không tường minh:
Mỗi hàm có tối đa 1 kết quả trả về
Các tham số đầu vào đều là dạng read-only (tham trị)
Vấn đề: Làm cách nào đặc tả hàm cần trả về nhiều nội dungthông tin?
Giải pháp: Định nghĩa kiểu cấu trúc để chứa tất cả các thành phần thông tin sẽ trả về (Chương 6)
Giải pháp khác???
Trang 18Đặc tả hàm không tường minh
Hàm được gọi là không tường minh vì vị từ post-conditionkhông có sự giải thích cách thực hiện thuật toán không thể
tự động tính được giá trị đầu ra từ vị từ post-condition đối vớicác giá trị đầu vào được cho
Trang 19Đặc tả hàm không tường minh
Các ưu điểm của đặc tả hàm không tường minh
Sự miêu tả trực tiếp các tính chất mà người sử dụng quantâm
Mô tả một tập các kết quả có thể bởi vị từ post-condition
Giá trị tường minh (giá trị true hoặc false) của vị từ condition
pre- Ít xem xét tới đặc tả thuật toán
Dự kiến cho tên của kết quả
Trang 20Đặc tả hàm không tường minh
Trang 21Đặc tả hàm không tường minh
Ví dụ: hàm tính ước số chung lớn nhất bằng phương phápkhông tường minh sử dụng lượng từ như sau:
gcd (i:N1, j:N1) r:N1
pre true
post is-common-divisor (i,j,r)
¬ s N1 is-common-divisor (i,j,s) s>r
Trang 22Đặc tả hàm không tường minh
Ví dụ: tính căn bật hai của một số nguyên
Trang 23Đặc tả hàm không tường minh
Ví dụ: Hàm trả về vị trí xuất hiện đầu tiên của chuỗi pt trong chuỗi cx, hoặc trả về 0 nếu chuỗi pt không xuất hiện trong cx ?
Thảo luận:?
Trang 24Đặc tả hàm không tường minh
Ví dụ: Hàm kiểm tra s có là chuỗi con của t hay không?
Trang 25Đặc tả hàm không tường minh
Ví dụ: Hàm kiểm tra chuỗi p có phải là prefix của chuỗi s trong chuỗi t hay không?
is-prefix (p: String, s: String, t: String) r: B
Trang 26Đặc tả hàm không tường minh
Ví dụ: Hàm trả về vị trí xuất hiện đầu tiên của chuỗi pt trong chuỗi cx, hoặc trả về 0 nếu chuỗi pt không xuất hiện trong cx
location (pt: String, cx: String) r: ℕ
pre pt [] cx []
post ( p String is-shortes-prefix(p, pt, cx) r = (1 + len p))
(r = 0)
Trang 27Đặc tả hàm tường minh
Đặc tả hàm tường minh (explicit definition)
Đặc tả có sử dụng các cấu trúc điều khiển
Thể hiện cách cài đặt hàm
Lưu ý:
Trong đặc tả không tường minh, mọi giá trị thỏa Vị từ condition đều có thể được chấp nhận là kết quả phù hợpcủa hàm
Post- Trong đặc tả tường minh xác định một giá trị cụ thể phùhợp với yêu cầu của hàm
Trang 28Đặc tả hàm tường minh
function_name : input_type → output_type
function_name (input_parameter) ≜ expression
hay
tên-hàm : Tập-nguồn1 Tập-nguồn2 … Tập-đích
tên-hàm (tham-số1, tham-số2, …) ≜ đặc-tả-dạng-giải-thuật
Ở đó chứa đựng tham số, hằng số, hàm, vị từ, hàm xác định bởi người sử dụng
Trang 30Mối Quan Hệ Giữa Hàm Tường Minh
Và Không Tường Minh
Trang 31Cấu trúc điều khiển if-then-else
Trang 32Cấu trúc điều khiển if-then-else
Ví dụ: hàm tính giai thừa bằng phương pháp tường minh
factorial : N → N
factorial(n) ≜
if n ≥ 1then n factorial(n-1)else 1
Trang 33Cấu trúc điều khiển if-then-else
Trang 34Cấu trúc cases
Cú pháp:
cases index:
( value1, value2 result1,
value3, value4, value5 result2,
Trang 37end
Trang 40Đặc tả đệ quy
Đối với đặc tả hàm tường minh thì kỹ thuật đặc tả đệ quy cũngđược áp dụng Đối với kỹ thuật này chúng ta cần xác địnhđược điều kiện dừng cho hàm cục bộ Kỹ thuật này cũng được
áp dụng đối với đặc tả hàm không tường minh
Trang 44Khai báo biến tạm bằng let-in
Trong quá trình đặc tả các hàm cục bộ, chúng ta có thể sửdụng giá trị của một biểu thức lặp đi lặp lại nhiều lần Trongđặc tả hàm đa số các ngôn ngữ đều hỗ trợ ký pháp let in để đặc
tả một biến tạm và biến này được xem như là một định danh
để thay thế giá trị của biểu thức được sử dụng trong hàm cụcbộ
Trang 45Khai báo biến tạm bằng let-in
cos (sin(x) – 1) / (sin(x) – 1)
Ta có thể đặt biến tạm y và viết lại như sau:
Trang 48in mk-Celsius ((v-32)*5/9) else t
Trang 50Khai báo biến tạm bằng let-in
Trang 51Khai báo biến tạm bằng let-in