Kỹ thuật lập trình
Nguyễn Diệu Hương
Mục đích của môn học
•Hỗ trợ xây dựng chương trình
chính xác, hiệu quả, dễ sửa chữa,
tái sử dụng code cao.
•Tăng cường khả năng lập trình
•Hiểu chi tiết về:
–Thiết kế chương trình
–Cấu trúc dữ liệu, giải thuật, ADT
– Đa nhiệm
–Mạng
Yêu cầu môn học
• Bài tập lớn môn học: 30-40%. Đánh
giá dựa trên:
–Chương trình
– Báo cáo
– Trình bày
• Thi cuối kỳ: 60-70% (closed book)
Nội dung
•Chương 1: Nhập môn Kỹ thuật lập
trình
•Chương 2: Quản lý bộ nhớ
•Chương 3: Các cấu trúc dữ liệu cơ
bản
•Chương 4: Các cấu trúc dữ liệu
nâng cao
•Chương 5: Ứng dụng đa nhiệm và
mạng
Tài liệu tham khảo
1. C++ How to Program, H. M. Deitel, 5/e, 2005,
Prentice-Hall.
2. Data structures and Program Design in C++, R. L.
Kruse et al., Prentice-Hall.
3. Data Structures and Algorithms in C++, A. Drozdek,
2/e, Brooks/Cole.
4. Starting Out with C++: From Control Structures
through Objects, 5/e, Tony Gaddis, 2007. Addison-
Wesley
5. Data Structures and Problem Solving with C++, M.
A. Weiss, 2/e, Addison Wesley.
6. Data Structures and Algorithms, A. V. Aho.
7. Algorithms in C++, R. Sedgewick, 3/e, Addison-
Wesley.
8. Introduction to Algorithms, T. H. Cormen, 2/e, MIT.
9. Handbook of data structures and applications, D. P.
Mehta et al, Chapman & Hall/CRC.
Chương 1 – Nhập môn KTLT
1. Các nguyên tắc lập trình
1. Thiết kế chương trình
2. Phong cách lập trình
3. Cài đặt, kiểm thử và tinh chỉnh
4. Bảo trì chương trình
2. Hàm và biến
3. Đệ quy
4. Giới thiệu về lập trình hướng đối tượng
1. Thế nào là OOP.
2. Object và Class
3. Constructor, Destructor
4. Operator
1. Các nguyên tắc lập trình
(Kruse, Chương 1)
Reading: C++ Programming Style Guide
1. 1. Thiết kế chương trình
Giới thiệu
•Mục đích:
–Giới thiệu phương pháp và công cụ
lập trình cho những chương trình thực
tế
– Đi theo một tiếp cận logic, thống nhất
– Nguyên tắc thiết kế chương trình
Xác định mục tiêu của bài toán
•Quyết định mục đích chung
•Chỉ rõ những mục đích cụ thể
• Chia công việc thành các bài toán
con cho đến khi có kích thước cô
đọng
Thiết kế chương trình
•Tổ chức tốt từng phần
•Mã lệnh phải viết rõ ràng, dễ hiểu.
•Lựa chọn cấu trúc dữ liệu phù hợp
• Phân tích thuật toán
1. 2. Phong cách lập trình
Đặt tên
•Mục đích của tên:
–Lớp và biến: đại diện cho cái gì
–Hàm: thực hiện công việc gì
–Giải thích chi tiết
Một số chú ý khi đặt tên
1. Lựa chọn cẩn thận tên hàm, lớp,
hằng, biến toàn cục
2. Tên biến cục bộ đơn giản
3. Sử dụng tiền tố/hậu tố cho các tên
có cùng kiểu
4. Tránh đặt tên dễ nhầm lẫn, hoặc
thêm phần đuôi không có ý nghĩa
Chuẩn bị tài liệu hướng dẫn
•Mục đích:
–chương trình nhỏ: giải thích cho
những người khác.
–chương trình lớn: cho cả người lập
trình và người khác.
Một số chú ý khi viết TLHD
1. Viết một đoạn mở đầu trước mỗi
hàm
2. Khi khai báo biến, lớp, hằng, giải
thích ý nghĩa và cách sử dụng của
nó
Một số chú ý khi viết TLHD
3. Giới thiệu mỗi đoạn chương trình
(hàm, khối) với chú thích ngắn gọn về
mục đích và ý nghĩa
4. Chỉ rõ kết thúc của mỗi phần
5. Tránh chú thích quá kỹ không cần thiết
6. Giải thích những câu lệnh không rõ
ràng
7. Phần mã lệnh: cách chương trình hoạt
động, TLHD: tại sao chương trình hoạt
động, thực hiện công việc gì
8. Chú ý: Khi chương trình thay đổi, cần
đảm bảo TLHD sẽ thay đổi tương ứng.
Ví dụ
int main( ) // Program to play Conway’s game of Life.
/* Pre : The user supplies an initial configuration of living
cells.
Post : The program prints a sequence of pictures showing
the changes in the configuration of living cells
according to the rules for the game of Life.
Uses: The class Life and its methods initialize( ), print( ),
and update( ).
The functions instructions( ), user_says_yes( ). */
Định dạng chương trình
• Canh lề giúp chương trình dễ hiểu
Thời gian đọc chương trình lớn hơn rất
nhiều so với viết chương trình.
Làm chương trình dễ đọc nhất có thể.
Tinh chỉnh và module hóa
• Tinh chỉnh top-down:
–Bắt đầu bằng viết chương trình chính
–Quyết định việc chia các công việc
(cho lớp, hàm, CTDL)
–Tiếp tục với các hàm, lớp, CTDL
Tinh chỉnh Top-down – Hướng dẫn
1. Sử dụng lớp để mô hình hóa những khái
niệm cơ bản của chương trình
int main( ) {
Life iConfig;
iConfig . initialize( );
iConfig . print( );
cout << “Xem tiep the he sau? " << endl;
while (user_says_yes( )) {
iConfig . update( );
iCconfig . print( );
cout << “Xem tiep the he sau?” <<endl;
}
}
Tinh chỉnh Top-down – Hướng
dẫn
2. Mỗi hàm chỉ thực hiện một công việc
duy nhất
3. Mỗi hàm/lớp nên che giấu thông tin
4. Tham số của hàm cần được chỉ rõ
5. Các dữ liệu mà hàm sử dụng:
Æ Giữ cho các mỗi liên hệ càng đơn giản
càng tốt. Tránh sử dụng biến toàn cục
càng nhiều càng tốt.
Æ Nếu sử dụng biến toàn cục, viết hướng
dẫn chi tiết.
1. 3. Cài đặt, kiểm thử, tinh
chỉnh
Hàm giả
void instructions() { }
bool user_says_yes() {
return(true); }
Định nghĩa lớp Life
const int maxrow = 20, maxcol = 60;
class Life {
public:
void initialize( );
void print( );
void update( );
private:
int grid[maxrow + 2][maxcol + 2];
// allows for two extra rows and columns
int neighbor_count(int row, int col);
};