Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
Bài giảng môn Lý thuyết ngôn ngữ lập trình
Bài giảng
Bài giảng
LÝ THUYẾT NGÔN NGỮ LẬP TRÌNH
LÝ THUYẾT NGÔN NGỮ LẬP TRÌNH
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
Bài giảng môn Lý thuyết ngôn ngữ lập trình
Chương 6
Chương 6
CHƯƠNG TRÌNH CON
CHƯƠNG TRÌNH CON
3/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
Nội dung Chương 6
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.
4/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
Nội dung Chương 6
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
5/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
Nội dung Chương 6
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/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.1. Khái niệm
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.
7/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.1. Khái niệm
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
•
Ví dụ:
void main()
{
Nhap();
Sap_Xep ();
Xuat();
}
Chương trình gọi
Lời gọi chương trình con Nhap()
Lời gọi chương trình con Sap_Xep()
Lời gọi chương trình con Xuat()
8/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.1. Khái niệm
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)
9/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2. Đặc tả và cài đặt chương trình con
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
10/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2.1. Đặc 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
11/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2.1. Đặc tả chương trình con
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.
12/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2.1. Đặc tả chương trình con
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.
13/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2.1. Đặc tả chương trình con
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];]
}
14/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2.1. Đặc tả chương trình con
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];]
}
15/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2.1. Đặc tả chương trình con
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 ?
16/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2.2. Cài đặt chương trình con
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
17/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.2.2. Cài đặt chương trình con
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
18/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.3. Phương pháp truyền tham số cho 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
19/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.3. Phương pháp truyền tham số cho 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
20/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.3. Phương pháp truyền tham số cho chương trình con
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 đó
21/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.3. Phương pháp truyền tham số cho chương trình con
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
22/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.3.1. Truyền bằng giá trị
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.
23/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.3.1. Truyền bằng giá trị
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
24/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.3.2. Truyền bằng kết quả
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
25/30
Trường Cao đẳng CNTT HN Việt – Hàn Khoa Khoa học máy tính
6.3.1. Truyền bằng kết quả
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