2. L.X.Địn 2
Lập trình Mệnh lệnh (Imperative Programming)
Ngôn ngữ LT: Hợp ngữ, C đơn giản, …
Đơn vị của chương trình là lệnh.
Lập trình Thủ tục (Procedural Programming)
Ngôn ngữ LT: C, Pascal, …
Đơn vị của chương trình là thủ tục / hàm / ctrình con.
Lập trình Hướng đối tượng (Object Oriented Programming)
Ngôn ngữ LT: C++, Java, C#, …
Đơn vị của chương trình là đối tượng / lớp.
Và nhiều kiểu lập trình khác: LTr Khai báo, LTr Hàm, LTr Logic,
LTr Hướng sự kiện, LTr Hướng dịch vụ, v.v.
Các Kiểu Lập trình
(Programming Paradigms)
_____________________________
Chú ý: Cách phân chia ra thành các “kiểu lập trình” như thế này chỉ mang tính tương đối.
3. L.X.Địn 3
Chương trình là một danh sách các câu lệnh.
Ví dụ: Chương trình “Vẽ hình vuông”
Lập trình Mệnh lệnh
drawRight(100);
drawDown(100);
drawLeft(100);
drawUp(100);
4. L.X.Địn 4
Chương trình là một danh sách các câu lệnh.
Ví dụ 2: Chương trình “Vẽ hai hình vuông”
Lập trình Mệnh lệnh
movePen(0, 0);
drawRight(100);
drawDown(100);
drawLeft(100);
drawUp(100);
movePen(50, 50);
drawRight(60);
drawDown(60);
drawLeft(60);
drawUp(60);
Dài!
Lặp
code
5. L.X.Địn 5
Chương trình được chia ra thành nhiều chương
trình con (thủ tục, hàm).
Mỗi chương trình con là một danh sách các câu lệnh.
Chương trình con này có thể gọi ctrình con khác.
Ví dụ: Chương trình “Vẽ ba hình vuông”
Lập trình Thủ tục
void main(){
vuong(100, 0, 0);
vuong(60, 50, 50);
vuong(50, 10, 40);
}
void vuong(int w,
int x, int y)
{ movePen(x, y);
drawRight(w);
drawDown(w);
drawLeft(w);
drawUp(w);
}
6. L.X.Địn 6
Chương trình được chia ra thành nhiều chương
trình con (thủ tục, hàm).
Ví dụ 2: Chương trình “Vẽ robot (vuông & chữ nhật)”
Lập trình Thủ tục
void main(){
color(8, 80, 145);
vuong(20, -10,0);
vuong(10, -5,20);
chuNhat(40,50, -20,30);
chuNhat(10,60, -30,30);
chuNhat(10,60, 20,30);
chuNhat(10,60, -15,80);
chuNhat(10,60, 5,80);
}
void vuong(int w,
int x, int y)
{ movePen(x, y);
drawRight(w);
...
}
void chuNhat(
int w, int h,
int x, int y)
{ movePen(x, y);
drawRight(w);
drawDown(h);
...
}
4
4
4
4
4
4
4
4
7. L.X.Địn 7
Chương trình được chia ra thành nhiều chương
trình con (thủ tục, hàm).
Ví dụ 3: Chương trình “Vẽ robot nhảy”
Lập trình Thủ tục
void robot(int w,
int r, int g, int b,
int x, int y){
color(r, g, b);
vuong(2*w, x-w, y);
vuong(w, x-w/2, y+2*w);
chuNhat(4*w,5*w, x-2*w, y+3*w);
chuNhat(w,6*w, x-3*w, y+3*w);
chuNhat(w,6*w, x+2*w, y+3*w);
chuNhat(w,6*w, x-3*w/2,y+8*w);
chuNhat(w,6*w, x+w/2,y+8*w);
}
void xoaRobot(int w,
int x, int y){
robot(w, 0,0,0, x,y);
}
void main()
{ for(int i=0;;i++)
{sleep(200);
xoaRobot(10, 0, 10*(i%2))
robot(10, 8,80,145,
0, 10*((i+1)%2) );
} }
4
4
4
4
4
4
4
4
8. L.X.Địn 8
Chương trình được chia ra thành nhiều chương
trình con (thủ tục, hàm).
Ví dụ 3: Chương trình “Vẽ robot nhảy”
Lập trình Thủ tục
void robot(int w,
int r, int g, int b,
int x, int y){
color(r, g, b);
vuong(2*w, x-w, y);
vuong(w, x-w/2, y+2*w);
chuNhat(4*w,5*w, x-2*w, y+3*w);
chuNhat(w,6*w, x-3*w, y+3*w);
chuNhat(w,6*w, x+2*w, y+3*w);
chuNhat(w,6*w, x-3*w/2,y+8*w);
chuNhat(w,6*w, x+w/2,y+8*w);
}
void xoaRobot(int w,
int x, int y){
robot(w, 0,0,0, x,y);
}
void main()
{ for(int i=0;;i++)
{sleep(200);
xoaRobot(10, 0, 10*(i%2))
robot(10, 8,80,145,
0, 10*((i+1)%2) );
} }
Dài!
Dài!
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
9. L.X.Địn 9
Chương trình được chia ra thành nhiều chương
trình con cùng các cấu trúc dữ liệu (struct).
Ví dụ: Chương trình “Vẽ robot nhảy”
Lập trình Thủ tục với Struct
void veRobot(Robot r){
color(r.r, r.g, r.b);
vuong(2*r.w, r.x-r.w, r.y);
...
}
struct Robot{ int w,
int r, int g, int b,
int x, int y };
4
4
4
4
4
4
4
4
void main()
{ Robot r={10, 8,80,145, 0,0};
for(int i=0;;i++)
{ sleep(200); xoaRobot(r);
doiRobot(r, 0, 10*(i%2));
veRobot(r);
} }
void doiRobot(Robot r,
int x, int y)
{ r.x = x; r.y = y; }
4
4
4
4
4
4
4
4
void xoaRobot(Robot r){
Robot rx = {r.w, 0,0,0, r.x, r.y};
veRobot(rx);
}
10. L.X.Địn 10
Chương trình được chia ra thành nhiều chương
trình con cùng các cấu trúc dữ liệu (struct).
Ví dụ 2: Chương trình “Vẽ robot nhảy & robot chào”
Lập trình Thủ tục với Struct
void main()
{ Robot r={10, 255,0,0, 0,0};
RobotChao rc={10,0,0,255,
-70,0, ‘E’};
helloRobot(rc);
nhayRobot(rc, 9);
byeRobot(rc);
nhayRobot(r, 100);
}
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
...
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
Hello
Bye
Khác kiểu tham số
11. L.X.Địn 11
Chương trình được chia ra thành nhiều chương
trình con cùng các cấu trúc dữ liệu (struct).
Ví dụ 2: Chương trình “Vẽ robot nhảy & robot chào”
Lập trình Thủ tục với Struct
struct RobotChao{ int w,
int r, int g, int b,
int x, int y, char nn };
struct Robot{ int w,
int r, int g, int b,
int x, int y };
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
void veRobot(RobotChao r){
color(r.r, r.g, r.b);
vuong(2*r.w, r.x-r.w, r.y);
...
}
void veRobot(Robot r){
color(r.r, r.g, r.b);
vuong(2*r.w, r.x-r.w, r.y);
...
}
void xoaRobot(Robot r){
Robot rx = {r.w, 0,0,0,
r.x, r.y};
veRobot(rx); }
void xoaRobot(RobotChao r){
Robot rx = {r.w, 0,0,0,
r.x, r.y};
veRobot(rx); }
12. L.X.Địn 12
Chương trình là cuộc hội thoại giữa các đối
tượng (đối tượng = struct + hàm).
Ví dụ: Chương trình “Vẽ robot nhảy & robot chào”
Lập trình Hướng đối tượng
class RobotChao
:public Robot {
char nn;
public:
void hello();
void bye();
};
class Robot{ int w,
int r, int g, int b,
int x, int y;
public:
void ve();
void xoa();
void doi(int x, int y);
void nhay();
};
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
void main()
{ RobotChao rc;
rc.hello();
rc.nhay(100);
}
Hello
13. L.X.Địn 13
Qua mỗi bước phát triển, kiểu lập trình sau tích hợp
nhiều đơn vị của kiểu lập trình trước vào một đơn vị.
Thủ thục là tập hợp các lệnh.
Đối tượng là sự tích hợp của dữ liệu và thủ tục.
Thuận tiện cho việc phát triển ứng dụng lớn hơn!
Nâng cao tính tái sử dụng (reusability).
Nâng cao khả năng mở rộng (scalability).
Kết luận