[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

Bài đăng phổ biến