Chương trình con

Chia sẻ bởi Lê Sơn Hồng | Ngày 01/05/2019 | 163

Chia sẻ tài liệu: Chương trình con thuộc Power Point

Nội dung tài liệu:

Bài giảng

LÝ THUYẾT NGÔN NGỮ LẬP TRÌNH
Chương 6
CHƯƠNG TRÌNH CON
Nội dung Chương 6
Trừu tượng hóa là một phương pháp giúp người lập trình biết cách:
- Tập trung vào những vấn đề, những thuộc tính bản chất
của chương trình
- Bỏ qua các thuộc tính không cần thiết.
- Mục đích của nó là đơn giản hóa quá trình lập trình.

Có hai loại trừu tượng hóa cơ bản trong ngôn ngữ lập trình:
- Trừu tượng hóa quá trình.
- Trừu tượng hóa dữ liệu.
Nội dung Chương 6
Trừu tượng hoá dữ liệu là việc tạo ra kiểu dữ liệu trừu tượng:
- Kiểu dữ liệu trừu tượng là một tập hợp các đối tượng dữ liệu
- Tập hợp các phép toán, thao tác trên các đối tượng dữ liệu đó.
Khi cài đặt một kiểu dữ liệu trừu tượng trên một ngôn ngữ lập trình cụ thể, chúng ta phải thực hiện hai nhiệm vụ:
- Biểu diễn kiểu dữ liệu trừu tượng bằng một cấu trúc dữ liệu hoặc một kiểu dữ liệu trừu tượng khác đã được cài đặt.
- Viết các chương trình con thực hiện các phép toán trên kiểu dữ liệu trừu tượng mà ta thường gọi là cài đặt các phép toán.
Ví dụ: các cấu trúc dữ liệu:
- Chuỗi ký tự
- Ngăn xếp.
- Hàng đợi
Nội dung Chương 6
Trừu tượng hóa quá trình:
- Phân chia chương trình thành những chương trình con.
- Mỗi chương trình con có tên, đảm nhiệm một tác vụ nào đó.
Sự phân chia này sẽ che dấu tất cả các lệnh cài đặt chi tiết trong các chương trình con. Ở cấp chiều chương trình chính, ta chỉ thấy lời gọi các chương trình con và điều này được gọi là sự đóng gói.
Ví dụ: như một chương trình quản lý sinh viên được viết bằng trừu tượng hóa :
void main()
{
Nhap();
Sap_Xep ();
Xuat();
}
Nhap, Sap_Xep, Xuat là các phép toán trừu tượng. Chúng che dấu bên trong rất nhiều lệnh phức tạp mà ở cấp chiều chương trình chính ta không nhìn thấy được
6.1. Khái niệm
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.
Thông thường khi tạo ra ngôn ngữ lập trình nào đó. Nhà sản xuất tạo sẵn các chương trình con đơn gian. Tạo thuận lợi cho người lập trình.
Các chương trình con này thường gọi các hàm có sẵn hay các thủ tục có sẵn.

6.1. Khái niệm

Các đặc tính chung của chương trình con:
Tất cả chương trình con đều chỉ có một điểm vào (entry point)
Chương trình gọi: là chương trình có chứa lời gọi để cho chương trình con thi hành.
Chương trình gọi bị tạm dừng trong thời gian chương trình con thi hành.
Khi quá trình thực thi chương trình con kết thúc, quyền điều khiển sẽ trả về chương trình gọi để thực hiện các hoạt động khác nằm sau chương trình con bị gọi này
6.1. Khái niệm
Chương trình con trả về một kết quả duy nhất trong lời gọi chương trình con thì thường được gọi là hàm (Function).
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 lời gọi chương trình con thì thường được gọi là thủ tục (procedure hoặc subroutine)
6.2. Đặc tả và cài đặt chương trình con
6.2.1. Đặc tả chương trình con
6.2.2. Cài đặt chương trình con
6.2.1. Đặ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, thứ tự các tham số và kiểu dữ liệu của mỗi tham số
Số lượng, thứ tự các kết quả trả về và kiểu dữ liệu của mỗi kết quả
Hoạt động được thực hiện bởi chương trình con

Trong C, Chỉ có một loại chương trình con gọi là hàm
6.2.1. Đặc tả chương trình con
Cú pháp điển hình đặc tả được quy định trong NNLT C:
[Kiểu dữ liệu] Tên hàm ([Danh sách các tham số])
[Khai báo kiểu dữ liệu cho các tham số];
{
[Khai báo kiểu cho các biến cục bộ];
Các câu lệnh;
[return [biểu thức];]
}
Trong đó:
Kiểu dữ liệu: nếu hàm phải trả về một giá trị thì trước hết phải khai báo kiểu dữ liệu
Tên hàm: là tên hợp lệ trong C, buộc phải có
Danh sách các tham số: là các tham số và được gọi là tham số hình thức. Có hoặc không tùy trường hợp cụ thể. Nếu có nhiều tham số thì phải có dấu phẩy (,) để phân cách chúng.
6.2.1. Đặc tả chương trình con
Khai báo kiểu cho các tham số: nếu hàm có các tham số hình thức và vẫn chưa được khai báo kiểu thì ta cần khai báo kiểu dữ liệu cho các tham số như khai báo với các biến. Nếu các tham số có cùng kiểu dữ liệu thì phải có dấu phẩy (,) để phân cách chúng.
Phần trong { }: là thân hàm. Cặp dấu { } luôn phải có. Thân hàm gồm:
Khai báo các biến cục bộ: là các biến chỉ có tác động và phạm vi ảnh hưởng đối vời hàm chứa nó.
Các câu lệnh: có thể là câu lệnh đơn hoặc câu lệnh có cấu trúc
Trong thân hàm có thể sử dụng câu lệnh return([biểu thức]); câu lệnh return có thể được dùng nhiều lần ở các vị trí khác nhau nhưng cũng có thể không được sử dụng lần nào. Giá trị của biểu thức trong câu lệnh return sẽ được gán cho hàm.
6.2.1. Đặc tả chương trình con
Ví dụ 6.1: Đặc tả chương trình con là hàm được viết bằng C/C++:
float giaithua(int n)

{
int i; float KQ;

for (KQ=1, i=1; i<=n; i++)
KQ=KQ*i;

return KQ;
}

Đặc tả này xác định hàm tính giai thừa của một số nguyên n
[Kiểu dữ liệu] Tên hàm ([DS các tham số])

[Khai báo kiểu dữ liệu cho các tham số];
{
[Khai báo kiểu cho các biến cục bộ];


Các câu lệnh;


[return [biểu thức];]
}
6.2.1. Đặc tả chương trình con
Ví dụ 6.2: Ta có đặc tả
float max3s(a, b, c)

float a, b, c;
{
float max;
if (a> b) max = a;
else max = b;
if (max < c) max = c;
return max;
}
Đặc tả này xác định hàm tìm max 3 số
[Kiểu dữ liệu] Tên hàm ([DS các tham số])

[Khai báo kiểu dữ liệu cho các tham số];
{
[Khai báo kiểu cho các biến cục bộ];


Các câu lệnh;


[return [biểu thức];]
}
6.2.1. Đặc tả chương trình con
Ví dụ 6.3: Đặc tả chương trình con là thủ tục được viết bằng Pascal:
Procedure TinhBieuthuc;
Var a,b:integer;
Begin
Readln(a);
Readln(b);
Write(a+b);
End;
Đặc tả này tính tổng biểu thức a+b
Sự đặc tả chương trình con bao gồm những thành phần nào ?
6.2.2. Cài đặt chương trình con
Các phép toán nguyên thủy đượ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 NNLT
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 nên đượ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 NNLT đó.
Sự cài đặt chương trình con được xác định bởi:
- Việc khai báo dữ liệu cục bộ xác định cấu trúc dữ liệu cho chương trình con
- Các lệnh xác định hành động sẽ làm khi chương trình con thực hiện
6.2.2. Cài đặt chương trình con
Sự khai báo và các lệnh thường được đóng gói. Do đó:
- Người sử dụng không thể truy xuất 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
Tùy thuộc vào từng NNLT mà trong một chương trình con nào đó có thể chứa các chương trình con khác. Và các chương trình con này chỉ được dùng cho chương trình con chứa chúng mà không thể được gọi tới từ bên ngoài.
Kiểm tra kiểu cũng là một vấn đề quan trọng đối với chương trình con
6.3. Phương pháp truyền tham số cho chương trình con
Phương pháp truyền tham số cho chương trình con là lộ trình mà trên đó các tham số được truyền đến và/hoặc truyền từ các chương trình con được gọi

Tham số có 2 loại:
- Tham số hình thức: là một loại đặc biệt của ĐTDL trong chương trình con. Nó được xác định lúc định nghĩa chương trình con
- Tham số thực tế: là một ĐTDL được gửi cho chương trình con bằng cách truyền cho nó lời gọi thực hiện chương trình con

6.3. Phương pháp truyền tham số cho chương trình con
float area(int x, int y, int h)
{
float v;
v=0.5*h*(x+y);
return v;
}


main()
{
int f=4.0, g=6.0, h=5.0;
float a;
a=area(f,g,h);
...
}
Đặc tả (định nghĩa CTC)

x, y, h : Tham số hình thức
f, g, h : Tham số thực
Chương trình gọi
Lời gọi chương trình con
- Các tham số hình thức nằm trong định nghĩa CTC
Các tham thực nằm trong lời gọi CTC
Tên của tham số hình thức và tham số thực có thể trùng nhau
6.3. Phương pháp truyền tham số cho chương trình con
Các tham số hình thức được khai báo trong 3 mô hình ngữ nghĩa riêng biệt sau:
- In mode: chúng có thể nhận dữ liệu từ tham số thực tế tương ứng
- Out mode: chúng có thể chuyển dữ liệu cho các tham số thực tế
- In-out mode: chúng có thể làm cả hai việc đó

6.3. Phương pháp truyền tham số cho chương trình con
Có nhiều phương pháp truyền tham số được phát triển bởi các nhà thiết kế ngôn ngữ để lập trình viên lựa chọn
- Truyền bằng giá trị
- Truyền bằng kết quả
- Truyền bằng giá trị - kết quả
- Truyền bằng tham chiếu
- Truyền bằng tên
6.3.1. Truyền bằng giá trị
Truyền bằng giá trị thực thi cho các tham số In mode.
Trong phương pháp này:
- Các tham số hình thức là tham số chỉ vào, tức là chỉ nhận giá trị vào cho chương trình con mà không trả kết quả về cho chương trình gọi.
- Tham số hình thức được xem như là một biến cục bộ của chương trình con và được cấp phát ô nhớ riêng.
- Các tham số thực là một biểu thức (một biến, một hằng, một hàm, một biểu thức thực sự)
Phương pháp thực hiện:
- Tại thời điểm gọi: giá trị của tham số thực được sao chép vào trong ô nhớ của tham số hình thức.
- Trong quá trình thực hiện: mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ riêng của nó.
- Khi kết thúc: sự thay đổi giá trị của tham số hình thức không làm ảnh hưởng đến giá trị của tham số thực.

6.3.1. Truyền bằng giá trị
Ví dụ 6.4: Xét chương trình đổi 2 số nguyên bằng ngôn ngữ giả tựa Pascal như sau:
var a, b: integer;
procedure hoanvi_2so(x: integer; y: integer);
var tg: integer;
begin
x:= 10; y:= 20;
tg: = x; x: = y; y: = tg;
….
end;
begin
a:= 50; b:= 100;
hoanvi_2so(a,b);

end.

50
100
a b
50
100
x y
10
20
x y
20
10
x y
Trước khi gọi
Tại thời điểm gọi
Trong thời điểm
CTC thực hiện
50
100
a b
Khi kết thúc
20
10
x y
6.3.2. Truyền bằng kết quả
Truyền bằng kết quả thực thi cho các tham số Out mode
Trong phương pháp này:
- Tham số hình thức: là tham số chỉ ra, tức là chỉ trả kết quả về cho chương trình gọi mà không nhận giá trị vào.
- Tham số hình thức được xem như là một biến cục bộ và được cấp phát ô nhớ riêng.
- Tham số thực là một biến, tức là một ĐTDL có ô nhớ
Phương pháp thực hiện:
- Giá trị của tham số thực không được sử dụng trong chương trình con
- Tham số hình thức có thể được gán trị như đối với một biến cục bộ
- Trong quá trình thực hiện: mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ riêng của nó, không ảnh hưởng đến tham số thực
- Khi kết thúc: giá trị cuối cùng của tham số hình thức được sao chép vào ô nhớ của tham số thực
6.3.1. Truyền bằng kết quả
Ví dụ 6.4: Xét chương trình đổi 2 số nguyên bằng ngôn ngữ giả tựa Pascal như sau:
var a, b: integer;
procedure hoanvi_2so(x: integer; y: integer);
var tg: integer;
begin
x:= 10; y:= 20;
tg: = x; x: = y; y: = tg;
….
end;
begin
a:= 50; b:= 100;
hoanvi_2so(a,b);

end.

50
100
a b
10
20
x y
10
20
x y
20
10
x y
Trước khi gọi
Tại thời điểm gọi
Trong thời điểm
CTC thực hiện
20
10
a b
Khi kết thúc
20
10
x y
6.3.2. Truyền bằng giá trị - kết quả
Truyền bằng giá trị - kết quả thực thi cho các tham số In-out mode, mà trong đó các tham số thực được sao chép lại.
Đặc điểm của phương pháp truyền giá trị - kết quả:
- Có sự kết hợp của truyền bằng giá trị và truyền bằng kết quả.
- Giá trị của tham số thực được dùng như giá trị khởi đầu của tham số hình thức tương ứng, và các tham số này sau đó hoạt động như một biến cục bộ.
- Khi truyền bằng giá trị - kết quả các tham số hình thức phải có bộ nhớ cục bộ kết hợp với chương trình con được gọi
- Tại thời điểm dùng chương trình con, tham số hình thức được trả về lại cho tham số thực
6.3.2. Truyền bằng giá trị - kết quả
Phương pháp thực hiện:
- Tại thời điểm gọi: giá trị của tham số thực được sao chép vào trong ô nhớ của tham số hình thức.
- Trong quá trình thực hiện: mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ riêng của nó, không ảnh hưởng đến tham số thực tế.
- Khi kết thúc: giá trị cuối cùng của tham số hình thức được sao chép vào ô nhớ của tham số thực.
Phương pháp này nhiều khi còn được gọi là truyền bằng cách sao chép.
Hạn chế của cả 3 phương pháp này là việc đòi hỏi nhiều ô nhớ cho các tham số và thời gian sao chép các giá trị
6.3.1. Truyền bằng giá trị - kết quả
Ví dụ 6.4: Xét chương trình đổi 2 số nguyên bằng ngôn ngữ giả tựa Pascal như sau:
var a, b: integer;
procedure hoanvi_2so(x: integer; y: integer);
var tg: integer;
begin

tg: = x; x: = y; y: = tg;
a:=x; b:=y;
….
end;
begin
a:= 50; b:= 100;
hoanvi_2so(a,b);

end.

50
100
a b
50
100
x y
50
100
x y
100
50
x y
Trước khi gọi
Tại thời điểm gọi
Trong thời điểm
CTC thực hiện
100
50
a b
Khi kết thúc
100
50
x y
6.3.2. Truyền bằng tham chiếu
Truyền bằng tham chiếu là phương pháp thực thi thứ 2 cho các tham số In-out mode.
Trong đó
- Tham số hình thức là tham số vào ra, do đó nó sẽ nhận giá trị vào cho chương trình con và trả về kết quả cho chương trình gọi.
- Tham số hình thức là một con trỏ và tham số thực tế phải là một biến
Phương pháp thực hiện:
- Tại thời điểm gọi: nó truyền một đường dẫn truy cập, thông thường chỉ là một địa chỉ, đến chương trình con được gọi
- Khi kết thúc: mọi thay đổi giá trị của tham số hình thức đều làm giá trị của tham số thực thay đổi theo.
Ngoài bốn phương pháp trên, còn một phương pháp đó là truyền bằng tên, là một phương pháp truyền các tham số In-out mode. Tuy nhiên, nó không được sử dụng rộng rãi trong các NNLT.
6.3.2. Truyền bằng tham chiếu
Ví dụ 6.4: Xét chương trình đổi 2 số nguyên bằng ngôn ngữ giả tựa Pascal như sau:
var a, b: integer;
procedure hoanvi_2so(contrỏ x: integer; contrỏ y: integer);
var tg: integer;
begin
tg: = gtrị tại địa chỉ x trỏ đến;
giá trị tại địa chỉ x trỏ : = gtrị tại đại chỉ y trỏ;
gtrị tại đại chỉ y trỏ : = tg;

end;
begin
a:= 50; b:= 100;
hoanvi_2so(a,b);
. . .
end.

50
100
a b
x y
x y
Tại thời điểm gọi
Trong thời điểm
CTC thực hiện
50
100
a b
tg
50
x y
100
100
a b
tg
50
x y
100
50
a b
tg
50
Phương thức truyền tham số trong một số NNLT
Với Fotran
- Luôn thực thi với tham số in-out mode
- Các phiên bản trước Fortran 77: truyền bằng tham chiếu
- Từ Fortran 77 trở về sau: các biến vô hướng thường truyền bằng giá trị-kết quả.
Với C
- Truyền bằng giá trị
- Truyền bằng tham chiếu bằng cách sử dụng các con trỏ như các tham số
Với C++
- Truyền tham bằng tham chiếu
Với Java
- Phần lớn các tham số đều được truyền bằng giá trị
- Các tham số đối tượng được truyền bằng tham chiếu

6.4. Chương trình con chung
Sự đặc tả chương trình con thông thường liệt kê số lượng, thứ tự và kiểu dữ liệu của các tham số


Chương trình con chung (chương trình con đa hình) là một chương trình con có một tên nhưng có nhiều định nghĩa khác nhau, được phân biệt bởi số lượng, thứ tự và kiểu dữ liệu của các tham số.
Ví dụ 6.4:
var a, b: integer;
procedure hoanvi_2so(x: integer; y: integer);
var tg: integer;
begin
tg: = x; x: = y; y: = tg;
a:=x; b:=y;
….
end;
begin
a:= 50; b:= 100;
hoanvi_2so(a,b);

end.

6.4. Chương trình con chung
Ví dụ 6.5: Xét chương trình tính tổng 2 số:
chương_trình_con Tong_2so(x: integer; y: real);
khai báo tg: integer;
bắt đầu
in(x+y);
kết thúc;
chương_trình_con Tong_2so(x: real; y: integer);
khai báo tg: integer;
bắt đầu
in(x+y);
kết thúc;
bắt đầu chương trình chính
a:= 50.5; b:= 100;
Tong_2so(a,b);
….
kết thúc chương trình.

6.4. Chương trình con chung
Khi sử dụng chương trình con chung, trình biên dịch cần xác định đúng ý nghĩa của nó trong một tập hợp nhiều ý nghĩa có thể có
Để nhận biết ý nghĩa đích thực của chương trình con chung cần dựa vào thông tin về đối số của phép toán hoặc tham số của nó

6.5. Đồng thường trình (Coroutines)
Mối quan hệ giữa chương trình gọi và chương trình con bị gọi là mối quan hệ chủ-tớ
Chương trình gọi: là chương trình chủ
Chương trình con bị gọi: là chương trình tớ

Chương trình main()
Nhap()
Xuat()
Nhap()
Thao tác nhập 1
Thao tác nhập 2
Xuat()
Thao tác xuất 1
Thao tác xuất 2
Tớ
Tớ
Chủ
6.5. Đồng thường trình (Coroutines)
Đồng thường trình là một loại đặc biệt của chương trình con, thay cho mối quan hệ chủ-tớ giữa chương trình gọi (chủ) và chương trình con được gọi (tớ) trong cách gọi truyền thống.
Đồng thường trình là chương trình con có nhiều điểm vào, và các điểm vào đó được điều khiển bởi chính chương trình con đó.
Kỹ thuật điều khiển đồng thường trình thường được gọi là mô hình điều khiển đơn vị đối xứng. Nghĩa là đồng thường trình gọi và đồng thường trình bị gọi có mức ưu tiên như nhau.
Lời gọi đồng thường trình gọi là Resume (Tiếp tục lại)


- A, B là các chương trình con
Trong A có lời gọi B
Trong B có lời gọi A
- A, B gọi là các đồng thường trình
6.5. Đồng thường trình (Coroutines)
Một trong những đặc trưng của chương trình con được duy trì trong các đồng thường trình là:
- Chỉ duy nhất một đồng thường trình thực sự thực thi trong một thời điểm
- Lần thực thi thứ hai của một đồng thường trình thường bắt đầu bằng một điểm vào khác với điểm vào của lần đầu tiên.
- Các đồng thường trình thường thực thi một phần sau đó chuyển điều khiển đến một đồng thường trình khác.
- Khi khởi động lại, một đồng thường trình sẽ thực thi phần tiếp ngay sau mệnh đề đã được dùng để chuyển tiếp điều khiển.
- Đồng thường trình phải có các biến cục bộ tĩnh


Điều khiển thực thi đồng thường trình
Điều khiển thực thi đồng thường trình với vòng lặp
6.5. Đồng thường trình (Coroutines)
Các đồng thường trình được tạo ra trong một ứng dụng bởi một chương trình gọi là đơn vị chủ, mà đơn vị này không phải là đồng thường trình.

Khi được tạo ra, các đồng thường trình thực thi mã ban đầu của chúng và sau đó trả quyền điều khiển về cho đơn vị chủ.

Khi tất cả các đồng thường trình đã được xây dựng xong, chương trình chủ sẽ bắt đầu lại với mỗi một trong các đồng thường trình khác theo thứ tự cho đến khi công việc của chúng được hoàn thành (nếu có thể)

Nếu sự thực thi của một đồng thường trình đến được điểm cuối cùng của đoạn mã của nó, quyền điều khiển được chuyển về cho đơn vị chủ đã tạo ra nó.

6.6. Thực thi chương trình con
6.6.1. Cú pháp chung gọi chương trình con
6.6.2. Thực thi chương trình con «đơn giản»
6.6.3. Thực thi chương trình con với ngăn xếp động các biến cục bộ
6.6.1. Cú pháp chung gọi chương trình con
([Danh sách các tham số]);

Quá trình thực hiện:
Nếu có tham số, trước tiên tham số sẽ được gán giá trị thực tương ứng
Thực thi các câu lệnh trong thân chương trình con từ lệnh đầu tiên đến lệnh cuối cùng
Thoát khỏi chương trình con và trở về chương trình gọi để tiếp tục thực hiện các lệnh tiếp theo của chương trình gọi.

6.6.2. Thực thi chương trình con «đơn giản»
Chương trình con đơn giản là chương trình không thể lồng nhau và tất cả các biến cục bộ đều là tĩnh.
Cú pháp của việc gọi đến một chương trình con đơn giản đòi hỏi có các hoạt động sau:
- Lưu trạng thái thực thi của chương trình gọi
- Thực hiện việc truyền tham số
- Truyền địa chỉ trả về cho chương trình được gọi
- Chuyển quyền điều khiển cho chương trình được gọi


6.6.2. Thực thi chương trình con «đơn giản»
Cú pháp của việc trả về từ một chương trình con đơn giản đòi hỏi có các hoạt động sau:
- Nếu truyền tham số bằng giá trị - kết quả hoặc các tham số Out mode thì các giá trị hiện hành của các tham số này được chuyển đến cho các tham số thực tế tương ứng
- Nếu chương trình con là một hàm thì giá trị trả về của một hàm được chuyển đến một vị trí mà chương trình gọi có thể nhận được.
- Trạng thái thực thi của chương trình gọi được khôi phục
- Quyền điều khiển được trả về lại cho chương trình gọi

6.6.2. Thực thi chương trình con «đơn giản»
Các hoạt động gọi và trả về đòi hỏi lưu trữ các yếu tố sau:
Thông tin trạng thái của chương trình gọi
Các tham số
Địa chỉ trả về
Giá trị của hàm nếu chương trình con là hàm
Định nghĩa và kích hoạt chương trình con
Người lập trình viết một định nghĩa chương trình con trong chương trình.
Thông qua việc thực hiện chương trình, nếu chương trình con được gọi thì một kích hoạt chương trình con được tạo ra.
Khi kết thúc việc thực hiện chương trình con thì kích hoạt bị phá hủy.
Nếu có lần gọi khác thì một kích hoạt mới sẽ được tạo ra
Như vậy, từ một định nghĩa chương trình con có thể có nhiều kích hoạt được tạo ra trong quá trình thực hiện chương trình
Sự định nghĩa dùng làm khuôn mẫu cho việc tạo kích hoạt
6.6.2. Thực thi chương trình con «đơn giản»
Một chương trình con đơn giản gồm 2 phần riêng biệt:
Mã thực tế của chương trình con, nó không thay đổi trong quá trình thực thi
Các biến cục bộ và dữ liệu được liệt kê trước đó; các yếu tố này có thể thay đổi khi chương trình con thực thi
Định dạng của phần không phải là mã thực tế của một chương trình con được gọi là bản ghi kích hoạt
Một thể hiện bản ghi kích hoạt là ví dụ cụ thể của một bản ghi kích hoạt (tập dữ liệu cho sự kích hoạt một chương trình con cụ thể)
Một bản ghi kích hoạt cho chương trình con đơn giản
Mã và các bản ghi kích hoạt của một chương trình chứa các chương trình con đơn giản.
6.6.2. Thực thi chương trình con với ngăn xếp động các biến cục bộ
Bản ghi kích hoạt phức tạp hơn
Trình biên dịch phải sinh ra mã là nguyên nhân dẫn đến sự không rõ ràng việc cấp phát và giải phóng các biến cục bộ
Đệ quy làm tăng thêm khả năng của nhiều kích hoạt đồng thời của một chương trình con
Một bản ghi kích hoạt tiêu biểu cho một ngôn ngữ với ngăn xếp động các biến cục bộ
6.6.2. Thực thi chương trình con với ngăn xếp động các biến cục bộ
Định dạng của bản ghi kích hoạt là tĩnh nhưng kích thước có thể động.
Mối liên kết động trỏ vào phần đầu của thể hiện bản ghi kích hoạt của chương trình gọi
Một thể hiện bản ghi kích hoạt được tạo ra một cách động khi chương trình con được gọi.
Ví dụ: một hàm trong C
void sub(float total, int part)
{
int list[4];
float sum;

}
[4]

[3]

[2]

[1]

[0]
Một ví dụ không đệ quy
void A(int x)
{
int y;
...
C(y);
...
}
void B(float r)
{
int s, t;
...
A(s);
...
}
void C(int q)
{
...
}
void main()
{
float p;
...
B(p);
...
}

main calls B
B chfđflkgralls A
A calls C

Ngăn xếp chứa các thể hiện bản ghi kích hoạt
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Lê Sơn Hồng
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)