[Học lập trình C++] Chương 0: 0.4 Giới thiệu về quá trình phát triển của C++
0.4
Giới thiệu về quá trình phát triển của C++
Trước khi chúng ta có thể viết và thực
thi chương trình đầu tiên, chúng ta cần biết chi tiết về một chương trình được
phát triển như thế nào. Dưới đây là một biểu đồ cho thấy quá trình cơ bản:
Bước
1: Định nghĩa vấn đề mà bạn muốn giải quyết.
Bước này trả lời câu hỏi “cái gì?”, bạn muốn
giải quyết vấn đề gì?. Ý tưởng ban đầu là những gì bạn muốn lập trình theo bước
dễ nhất hay khó nhất. Tất cả các bạn cần một ý tưởng có thể định nghĩa rõ ràng,
và bạn sẵn sàng cho bước kế tiếp.
Đây là một số ví dụ:
Tôi muốn viết một chương trình mà sẽ
cho phép tôi nhập nhiều số sau đó tính giá trị trung bình.
Tôi muốn viết một chương trình tạo
ra một mê cung 2d và để cho người dùng tìm cách giải nó.
Tôi muốn viết một chương trình đọc một
file giá chứng khoán và dự đoán được sự lên xuống của thị trường chứng khoán.
Bước
2: Xác định bạn sẽ giải quyết vấn đề như thế nào?
Bước này trả lời câu hỏi “như thế
nào?”, bạn xác định sẽ giải quyết vấn đề trong bước 1 như thế nào?. Đây cũng là
một bước hầu như bị bỏ qua trong phát triển phần mềm. Điểm then chốt ở đây là
có nhiều cách để giải quyết vấn đề, tuy nhiên, một vài lời giải sẽ tốt còn lại
sẽ tệ hơn. Thông thường, một lập trình viên sẽ có một ý tưởng, ngồi xuống, và
ngay lập tức bắt đầu viết code. Điều này tạo ra một phương án tệ.
Thông thường, phương án tốt sẽ có những
tính chất sau đây:
Chúng rất sáng sủa, tường minh và mạch
lạc.
Chúng là một tài liệu tốt để người
khác đọc.
Chúng được xây dựng một cách module
hóa, vì vậy mỗi phần nhỏ có thể được sử dụng lại hoặc thay đổi sau đó mà không ảnh
hưởng đến những hàm khác trong chương trình.
Chúng rất ổn định, và có thể bao
quát hết tất cả các lỗi có thể xảy ra và báo cho người dùng biết những kết quả
không mong muốn.
Khi bạn ngồi xuống và bắt đầu code
ngay lập tức, bạn thường nghĩ “tôi muốn làm điều này”, vì vậy bạn thực thi
phương án mà giúp cho bạn hoàn thành nhanh nhất. Điều này có thể dẫn đến việc
chương trình rất dễ hỏng, khó có thể thay đổi hoặc mở rộng, hoặc có nhiều lỗi.
Nghiên cứu cho thấy chỉ 20% thời lượng
mà lập trình viên thật sự dành cho viết chương trình ban đầu. 80% thời gian lại
dành cho việc sửa lỗi hoặc duy trì (thêm chức năng) chương trình. Do đó, hãy
dành thời gian của bạn để suy nghĩ về cách tốt nhất để giải quyết vấn đề trước
khi bạn coding, những gì bạn nhận định và làm thế nào để bạn có thể lập kế hoạch
cho tương lai, để tiết kiệm khá nhiều thời gian và rắc rối.
Chúng ta sẽ nói nhiều hơn về việc
làm thế nào để thiết kế một phương án hiệu quả cho vấn đề vào những bài học
sau.
Bước
3: Viết chương trình
Để viết chương trình, chúng ta cần
hai thứ: Đầu tiên là kiến thức về ngôn ngữ lập trình—Cái này là những gì loạt
bài hướng dẫn này sẽ làm! Thứ hai, chúng ta cần một trình biên soạn. Có thể viết
một chương trình sử dụng bất cứ trình biên soạn nào mà bạn muốn, thậm chí là
notepad. Tuy nhiên, chúng tôi khuyến cáo bạn nên dùng một trình biên soạn dành
cho việc coding. Đừng lo lắng khi bạn chưa có. Chúng ta sẽ cài đặt nó sớm thôi!
Một trình biên soạn thông thường được
thiết kế cho coding có một vài chức năng làm cho chương trình dễ đọc hơn, bao gồm:
1) Đánh số
dòng. Số dòng rất hữu ích khi trình biên dịch thông báo cho ta một lỗi xảy ra.
Ví dụ “error, lin 64”. Trình biên soạn không thể hiện số dòng, thì tìm dòng 64
có thể là một rắc rối thật sự.
2) Làm nổi bật
các cú pháp và có nhiều màu sắc. Để có thể làm cho chương trình của bạn sẽ đọc
trong toàn bộ cấu trúc chương trình.
3) Một kiểu chữ
rõ ràng. Kiểu chữ lập trình nên tránh việc khó đọc và phân biệt các kí tự, ví dụ
giữa số 0 và chữ o, số 1 và chữ l, chữ I (i viết hoa). Một kiểu chữ lập trình tốt
sẽ có nhiều kí tự khác nhau để chắc chắn rằng không xảy ra những lỗi nhầm lẫn.
Chương trình C++ của bạn nên đặt là
name.cpp, với name được thay thế với tên của chương trình của bạn. Đuôi .cpp mở
rộng thông báo cho trình biên dịch biết là một file mã nguồn C++ chứa đựng những
câu lệnh C++. Chú ý rằng một vài người dùng đuôi .cc thay vì .cpp, nhưng chúng
tôi khuyên bạn nên sử dụng .cpp.
Cũng cần chú ý rằng nhiều chương
trình C++ phức tạp có nhiều file .cpp. Mặc dù hầu hết chương trình bạn tạo ra
chỉ có một file .cpp, bạn có thể viết một chương trình có hàng chục đến hàng
trăm file .cpp khác nhau.
Bước
4: Biên dịch
Để biên dịch chương trình, chúng ta
cần một chương trình gọi là trình biên dịch. Công việc của trình biên dịch gồm
hai phần sau:
1) Kiểm tra
chương trình của bạn có theo đúng các nguyên tắc trong C++. Nếu không, trình
biên dịch sẽ thông báo các lỗi cần sửa.
2) Chuyển mỗi
file nguồn thành những file ngôn ngữ máy gọi là file đối tượng. Những file đối
tượng thông thường có dạng name.o hoặc name.obj, với name là tên giống với tên
của file .cpp mà đã tạo ra chúng. Nếu chương trình của bạn có 5 file .cpp, thì trình
biên dịch sẽ tạo ra 5 file đối tượng.
Với mục đích minh họa, hầu hết hệ điều
hành Linux và Mac OS X với một trình biên dịch C++ được gọi là g++. Sử dụng g++
để biên dịch một file bằng câu lệnh, chúng ta sẽ làm như sau:
g++ -c file1.cpp file2.cpp file3.cpp
Điều này sẽ tạo ra các file1.o,
file2.o và file3.o. Câu lệnh –c có nghĩa là chỉ biên dịch, nó thông báo cho
trình biên dịch rằng chỉ tạo ra file .o mà thôi.
Các trình biên dịch có sẵn cho
Linux, Windows, và chỉ riêng cho mỗi hệ điều hành. Chúng ta sẽ thảo luận về
cách cài đặt trình biên dịch như thế nào trong phần tiếp theo, không cần quan
tâm chúng lúc này.
Cho những dự án phức tạp, một vài
môi trường phát triển sử dụng makefile, đó
là một file thông báo cho trình biên dịch biết là file nào sẽ được biên dịch.
Makefiles là một chủ đề nâng cao, và có rất nhiều cuốn sách đã viết về chúng. Rất
may là bạn không cần lo lắng về chúng, vì vậy chung ta sẽ không thảo luận chúng
ở đây.
Bước
5: linking
Linking là một quá trình lấy tất cả
các file đối tượng được tạo ra bởi trình biên dịch và biên dịch chúng thành một
chương trình thực thi duy nhất mà bạn có thể chạy chúng. Điều này được thực hiện
bởi linker.
Ngoài những file đối tượng cho
chương trình, linker còn bao gồm các file thư viện hỗ trợ run-time (hay bất kì
thư viện tiền biên dịch khác mà bạn đang sử dụng, ví dụ như thư viện đồ họa hoặc
âm thanh). Ngôn ngữ C++ tự nó rất tinh gọn và đơn giản. Tuy nhiên, nó kèm theo
một thư viện lớn các thành phần tùy chọn, mà có thể được sử dụng trong chương
trình của bạn và những thành phần này tồn tại trong thư viện hỗ trợ runtime. Ví
dụ, nếu bạn muốn xuất ra một thứ gì đó ra màn hinhfm chương trình của bạn sẽ
bao gồm một lệnh đặc biệt để thông báo cho trình biên dịch biết rằng bạn muốn sử
dụng I/O thủ tục từ thư viện hỗ trợ runtime.
Một khi linker hoàn thành việc liên
kết tất cả các file đối tượng (giả sử rằng nó hoạt động tốt), bạn sẽ có được một
file thực thi.
Một lần nữa với mục đích minh họa, để
liên kết những file đối tượng chúng ta tạo ra phía trên trên một hệ điều hành
Linux hoặc OS X, chúng ta có thể sử dụng lại g++:
g++ -o prog file1.o file2.o file3.o
Câu lệnh –o thông báo với g++ rằng
chúng ta muốn một file thực thi tên “prog” được xây dựng từ file1.o, file2.o và
file3.o
Các bước biên dịch và liên kết có thể
được gộp chung lại với nhau nếu muốn:
g++ -o prog file1.cpp file2.cpp file3.cpp
Chúng sẽ kết hợp các bước biên dịch
và liên kết với nhau và trực tiếp tạo ra một file thực thi tên là “prog”.
Bước
6: Kiểm tra và sửa lỗi
Đây là phần khá vui! Bạn có thể chạy
chương trình của bạn và xem nó tạo ra output như bạn mong muốn. Nếu không, thì
đó là thời điểm để bạn tìm lỗi. Chúng ta sẽ thảo luận việc sửa lỗi này chi tiết
hơn ở phần sau.
Chú ý rằng các bước 3, 4, 5, và 6 được
thực hiện trong tất cả các phần mềm. Trong khi bạn có thể có từng phần mềm cho
từng bước trên, thì có một gói các phần mềm được biết đến như môi trường phát
triển tích hợp (IDE) gói và tích hợp tất cả những chức năng cùng với nhau. Với
những IDE thông thường, bạn sẽ có trình biên soạn code có số dòng và nổi bật cú
pháp. IDE sẽ tự động tạo ra các tham số cần thiết để biên dịch và liên kết
chương trình của bạn sang file thực thi, mặc dù nếu nó include nhiều file. Và
khi bạn cần debug chương trình của bạn, bạn có thể sử dụng debugger. Hơn nữa
IDE thông thường chứa một gói chức năng hữu ích khác, ví dụ như tích hợp help,
cây thư mục.v.v…
Chúng ta sẽ nói nhiều hơn về việc
cài đặt và sử dụng IDE trong phần tiếp theo.
Nguồn: learncpp.com
Nhận xét
Đăng nhận xét