ÐỊNH NGHĨA CHƯƠNG TRÌNH CON

Một phần của tài liệu NGÔN NGỮ LẬP TRÌNH (Trang 89)

Chương trình con là một phép toán trừu tượng được định nghĩa bởi người lập trình.

Chương trình con có các đặc tính như sau:

• Mỗi chương trình con có một điểm vào duy nhất.

Chương trình gọi tạm ngừng việc thực hiện trong quá trình thực hiện chương trình con. • Ðiều khiển luôn được trả về chương trình gọi khi sự thực hiện chương trình con

kết thúc.

Khi nói đến chương trình con, chúng ta quan tâm đến hai khía cạnh: sự định nghĩa chương trình con và lời gọi thực hiện chương trình con.

Ðịnh nghĩa chương trình con là một đoạn chương trình nguồn được viết ra bởi người lập trình.

Ðặc tả chương trình con

Sự đặc tả chương trình con bao gồm: • Tên của chương trình con

• Số lượng các tham số, thứ tự của chúng và kiểu dữ liệu của mỗi một tham số . • Số lượng các kết quả, thứ tự của chúng và kiểu dữ liệu của mỗi một kết quả. • Hoạt động được thực hiện bởi chương trình con.

Chương trình con biểu diễn một hàm toán học, là một ánh xạ từ tập hợp các tham số đến tập hợp các kết quả. Chương trình con trả về một kết quả duy nhất trong tên chương trình con thường được gọi là một hàm. Cú pháp điển hình đặc tả hàm được quy định trong ngôn ngữ lập trình Pascal:

Function Ten_ham(Danh sách các tham số cùng với kiểu dữ liệu tương ứng): Kiểu kết quả trả về

Ví dụ Function FN(x:real; y:integer) : real

Ðặc tả này xác định hàm FN : REAL x INTEGER -> REAL

Nếu chương trình con trả về nhiều hơn một kết quả hoặc không có kết quả trả về trong tên chương trình con thường được gọi là thủ tục (procedure hoặc subroutine). Cú pháp điển hình đặc tả thủ tục được quy định trong ngôn ngữ lập trình Pascal:

Procedure Ten_thu_tuc(Danh sách các tham sốcùng với kiểu dữ liệu tương ứng) Ví dụ Procedure SUB(X:real; Y:Integer; Var Z:Real; Var U:boolean);

Trong sự đặc tả này, tham số có tên đứng sau VAR biểu thị một kết quả hoặc một tham số có thể bị thay đổi. Cú pháp của sự đặc tả này trong Ada là:

Procedure SUB(X: IN Real; Y: IN Integer; Z: IN OUT Real; U: OUT Boolean) Thủ tục này khai báo một chương trình con với sự xác định:

SUB : Real x Integer x Real -> Real x Boolean

Các từ IN, OUT và IN OUT phân biệt ba trường hợp sau đây: IN chỉ định một tham số không thể bị thay đổi bởi cương trình con, IN OUT chỉ định một tham số có thể bị thay đổi và OUT chỉ định một kết quả.

Mặc dù chương trình con biểu diễn một hàm toán học nhưng nó cũng có các vấn đề tương tự như đối với các phép toán nguyên thuỷ:

- Chương trình con có thể có các tham số ẩn trong dạng biến không địa phương mà nó tham chiếu.

- Chương trình con có thể có kết quả ẩn (hiệu ứng lề) được trả về thông qua sự thay đổi các biến không địa phương hoặc thông qua việc thay đổi các tham số IN-OUT của nó. - Chương trình con có thể nhạy cảm với tiền sử (tự sửa đổi), vì vậy kết qủa của nó không chỉ phụ thuộc vào tham số được cho tại lần gọi đó mà còn phụ thuộc vào toàn bộ lịch sử các lần gọi trước đó. Nhạy cảm với tiền sử có thể do dữ liệu địa phương vẫn còn giữ lại giữa các lần gọi của chương trình con hoặc thông qua sự thay đổi mã riêng của nó (ít phổ biến hơn).

Cài đặt chương trình con

Các phép toán nguyên thuỷ được cài đặt bằng cách dùng cấu trúc dữ liệu và các phép toán được cung cấp bởi máy tính ảo bên dưới ngôn ngữ lập trình. Chương trình con biểu diễn một phép toán được xây dựng bởi người lập trình và do đó chương trình con được cài đặt bằng cách dùng cấu trúc dữ liệu và các phép toán được cung cấp bởi chính bản thân ngôn ngữ lập trình đó. Sự cài đặt được xác định bởi thân chương trình con, bao gồm cả việc khai báo dữ liệu cục bộ xác định cấu trúc dữ liệu được dùng cho chương trình con và các lệnh xác định hành động sẽ làm khi chương trình con thực hiện.

Sự khai báo và các lệnh thường được bao gói, người sử dụng chương trình con không thể truy xuất được tới dữ liệu cục bộ và các lệnh bên trong chương trình con. Người sử dụng chỉ có thể gọi chương trình con với một tập hợp các tham số và nhận lại các kết quả đã được tính toán. Cú pháp của Pascal đối với chương trình con là điển hình:

FUNCTION FN(x:REAL; y:INTEGER):REAL ; (Mô tả) VAR

m : ARRAY[1..10] OF REAL; (Khai báo các đối n : INTEGER; tượng dữ liệu cục bộ)

BEGIN

. (Dãy các lệnh xác định . hành động của chương . trình con)

Thông thường trong chương trình con có thể có các chương trình con khác biểu thị các phép toán được định nghĩa bởi người lập trình dùng cho chỉ chương trình con chứa chúng. Những chương trình con "cục bộ" này được bao gói, nghĩa là chúng không thể được gọi tới từ bên ngoài chương trình con chứa chúng.

Kiểm tra kiểu cũng là một vấn đề quan trọng đối với chương trình con. Mỗi lần gọi chương trình con đòi hỏi các tham số có kiểu đúng như đã được xác định trong sự đặc tả chương trình con. Kiểu của kết quả được trả về của chương trình con cũng phải được biết đến. Vấn đề kiểm tra kiểu tương tự như đối với các phép toán nguyên thuỷ. Kiểm tra kiểu có thể được thực hiện một cách tĩnh trong quá trình dịch, nếu đã có sự khai báo kiểu cho các tham số và kết quả của mỗi một chương trình con. Mặt khác kiểm tra kiểu có thể là động trong quá trình thực hiện chương trình. Sự chuyển đổi kiểu ẩn các tham số để đổi chúng thành các kiểu đúng cũng có thể được cung cấp một cách tự động bởi sự cài đặt ngôn ngữ.

Một phần của tài liệu NGÔN NGỮ LẬP TRÌNH (Trang 89)