Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Tạo một ứng dụng C++ sử dụng Thư viện khuôn mẫu chuẩn và CDT Michael Galpin Kiến trúc sư phần mềm Ludi Labs 08 01 2010 Khi hầu hết mọi người nghĩ tới "Eclipse", họ đều nghĩ rằng đó là "Môi trường phát triển tích hợp cho Java™ (Java IDE)." Eclipse có nhiều hơn thế. Với các trình cắm thêm thích hợp, người ta có thể sử dụng Eclipse để làm việc với PHP, Ruby và Groovy, C và C++. Trong bài này, bạn bắt đầu với Bộ công cụ phát triển C/C++ của Eclipse (CDT - Eclipse C/C++ Development Toolkit). Chúng ta xây dựng một ứng dụng đơn giản trong C++, sử dụng CDT và Thư viện khuôn mẫu chuẩn C++ (STL - C++ Standard Template Library) để tổ chức tốt hơn quá trình và tận dụng lợi thế của một số các tính năng mạnh của C++. Bài viết này, tiếp theo bài "Phát triển C/C++ với Nền tảng Eclipse ((C/C++ development with the Eclipse Platform), dành cho các nhà phát triển C++ những người muốn học cách phát triển C++ bằng cách sử dụng Eclipse CDT. Một ứng dụng C++ đơn giản được phát triển trong bài viết này. Ứng dụng này sử dụng STL C++. Độc giả cần quen thuộc với STL, cũng như với các nguyên tắc lập trình hướng đối tượng cơ bản như sự thừa kế và đa hình. Hiểu rõ về Eclipse sẽ rất có ích, nhưng không bắt buộc. Trước khi chúng ta bắt đầu Bạn cần phải cài đặt các phần mềm sau: Eclipse Chúng ta sẽ sử dụng CDT, đây là một trình cắm thêm cho Eclipse, do đó, tất nhiên bạn cần có Eclipse. Bài này sử dụng Eclipse V3.2. Môi trường thời gian chạy Java (JRE-Java Runtime Environment) Chúng ta sắp xây dựng một ứng dụng C++, nhưng chúng ta đang sử dụng Eclipse. Eclipse tự nó là một ứng dụng Java, vì vậy nó cần một JRE. Bài này sử dụng Eclipse V3.2, đòi hỏi một phiên bản JRE V1.4 hoặc cao hơn. Nếu bạn cũng muốn sử dụng Eclipse cho việc phát triển Java, bạn sẽ cần một JDK. © Copyright IBM Corporation 2010 Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Nhẫn hiệu đăng ký Trang 1 của 27 developerWorks® ibm.com/developerWorks/vn/ Bộ công cụ phát triển C/C++ (CDT) của Eclipse (Eclipse C/C++ Development Toolkit - CDT) Đây là bài viết về CDT, vì vậy bạn sẽ cần đến nó, tất nhiên là thế. Hãy đọc một bài viết của developerWorks vào năm 2003 có tiêu đề "Phát triển C/C++ với Nền tảng Eclipse." về các hướng dẫn cài đặt CDT trong các phiên bản sớm hơn của Eclipse. Cygwin Nếu bạn đang sử dụng Microsoft Windows®, bạn sẽ thấy Cygwin — nó cung cấp một môi trường giống như Linux® trên Windows — có ích đấy. Các công cụ phát triển C/C++ của GNU (GNU C/C++ Development Tools) CDT sử dụng các công cụ GNU C/C++ tiêu chuẩn để biên dịch mã của bạn, xây dựng dự án của bạn và gỡ rối các ứng dụng. Các công cụ này là Bộ trình biên dịch của GNU (GCC - GNU Compiler Collection) cho C++ (hay g++), tiện ích make, và Trình gỡ rối dự án GNU (GDBGNU Project Debugger). Nếu bạn là một lập trình viên sử dụng Linux hay Mac OS X, thì có nhiều khả năng là các công cụ này đã được cài đặt trên máy tính của bạn. Bài viết này có các chỉ dẫn để cài đặt các công cụ này cho Windows. Eclipse CDT Eclipse CDT là một trình cắm thêm vào Eclipse, biến Eclipse thành một C/C++ IDE mạnh. Nó được thiết kế để mang lại nhiều tính năng tuyệt vời, nhờ các nhà phát triển Java mà Eclipse có được các tính năng tuyệt đó cho các nhà phát triển C/C++, chẳng hạn như quản lý dự án, gỡ rối tích hợp, các trình thủ thuật lớp, việc xây dựng được tự động hóa, tô màu theo cú pháp và tự hoàn tất mã lệnh. Khi Eclipse được sử dụng như một Java IDE, nó sử dụng và tích hợp với JDK. Tương tự như thế, CDT sử dụng và tích hợp với các công cụ C/C++ tiêu chuẩn, như g++, tiện ích make, và GDB. Điều này đã làm cho nó trở nên rất phổ biến trên Linux, ở đó các công cụ này đã có sẵn và được sử dụng cho hầu hết việc phát triển C++. CDT có thể được cài đặt trên Windows để sử dụng cùng các công cụ đó. Cũng đang có một nỗ lực để làm cho CDT làm việc với các công cụ C++ của Microsoft, làm cho nó thậm chí hấp dẫn hơn cho các nhà phát triển C++ trên Windows. Cài đặt CDT Chúng tôi bắt đầu với giả định là bạn đã cài đặt Eclipse và có thể chạy nó. Nếu không, hãy tham khảo trang web của Eclipse để cài đặt và chạy. Ta hãy cài đặt CDT. CDT là một trình cắm thêm cho Eclipse, do đó, nó sử dụng tính năng Cập nhật phần mềm của Eclipse (Eclipse's Software Updates). Chọn Help > Software Updates > Find and Install. Hình 1. Cập nhật phần mềm Eclipse Tiếp theo, bạn sẽ muốn chọn Search để tìm các tính năng mới để cài đặt. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 2 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 2. Tìm kiếm các tính năng mới Nếu bạn đang sử dụng một phiên bản mới hơn của Eclipse, nên có các trang khám phá Callisto hoặc Europa. (Chú ý của biên tập viên: Do bài này đã được viết vào tháng 4 năm 2007, bản phát hành Europa còn đang ở giai đoạn lập kế hoạch. Tuy nhiên, việc cài đặt bản Europa được dự kiến tương tự như Callisto.) Chỉ cần chọn nó và nhấn vào Finish. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 3 của 27 developerWorks® ibm.com/developerWorks/vn/ Hình 3. Trang Web khám phá Callisto Eclipse có thể yêu cầu bạn chọn trong một danh sách các trang Web nhân bản để đi đến Trang khám phá Callisto (Discovery Callisto Site). Chọn bất kỳ một trang nào có vẻ gần bạn nhất. Bạn sẽ thấy một danh sách các trình cắm thêm từ Trang khám phá Callisto. Bạn sẽ muốn chọn C and C++ Development (Phát triển C và C++) và nhấn Next. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 4 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 4. Các trình cắm thêm Callisto có sẵn Hình 4. Các trình cắm thêm Callisto có sẵn Next. Bạn sẽ thấy một bản tóm tắt những gì sẽ được tải về và cài đặt. Đơn giản là nhấn vào Finish. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 5 của 27 developerWorks® ibm.com/developerWorks/vn/ Hình 5. Bản tóm tắt tải về và cài đặt Trình quản lý cập nhật (Update Manager) của Eclipse sau đó sẽ tải về trình cắm thêm CDT từ máy chủ Web nhân bản mà bạn đã chọn trước đó. CDT có tổng dung lượng khoảng 11 MB, do đó, có thể mất vài phút để tải về, tùy thuộc vào tốc độ kết nối Internet của bạn. Sau khi mọi thứ được tải về, bạn sẽ được yêu cầu xác nhận rằng bạn muốn cài đặt các tính năng mới. Nhấn vào Install All (Cài đặt tất cả). Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 6 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 6. Xác nhận cài đặt Sau khi kết thúc việc cài đặt CDT, bạn sẽ được yêu cầu khởi động lại Eclipse. Hãy tiếp tục và khởi động lại. Sau khi khởi động lại Eclipse, CDT sẽ sẵn sàng hoạt động. Cấu hình Windows Nếu bạn đang chạy Eclipse trên Linux hoặc Mac OS X, bạn đã sẵn sàng bắt đầu sử dụng CDT để phát triển một ứng dụng C++. Nếu bạn đang trong Windows, có thể cần thêm một vài bước nữa. Như đã đề cập, CDT dựa trên các công cụ phát triển GNU C++ chuẩn: g++, make, và GDB. Các công cụ phát triển này thường có trên Linux hoặc Mac OS X. Chúng thường không có trên Windows. Nhưng đừng lo. Các công cụ này có thể dễ dàng được cài đặt trên Windows. Có lẽ cách dễ nhất là cài đặt Cygwin. Cygwin cung cấp môi trường giống như Linux trên Windows (xem Tài nguyên). Khi cài đặt Cygwin, bạn sẽ được yêu cầu chọn những gói bạn muốn cài đặt. Hãy chắc chắn rằng đã đi tới phần phát triển và chọn gcc: g++, make, và GDB. Điều này cũng sẽ làm cho các thứ cần có trước của chúng được cài đặt. Một khi bạn đã hoàn thành việc cài đặt Cygwin, bạn sẽ cần phải thêm g++, make, và GDB vào đường dẫn của bạn. Cách dễ nhất để làm điều này là thêm thư mục bin của Cygwin vào đường dẫn của bạn, vì đó là nơi có thể tìm thấy g++, make, và GDB. Khi đã làm xong, khởi động lại Eclipse. Chơi xổ số Tại thời điểm này, chúng ta đã sẵn sàng để bắt đầu phát triển các ứng dụng của chúng ta với CDT. Chúng ta hãy tạm dừng lại để nêu ra chúng ta muốn phát triển những gì. Ứng dụng mẫu là một chương trình dòng lệnh đơn giản để sinh ra các xổ số. Có nhiều bang có xổ số và các quy tắc khá Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 7 của 27 developerWorks® ibm.com/developerWorks/vn/ khác nhau. Chúng ta sẽ cho phép người dùng lựa chọn họ muốn tạo ra xổ số của bang nào. Điều này sẽ cung cấp cho chúng ta một cách thích hợp để sử dụng sự hỗ trợ hành vi đa hình của C++. Tạo dự án Eclipse sử dụng các khái niệm các phối cảnh để cho phép nhiều trình cắm thêm tuỳ chỉnh các lệnh và các khung nhìn của chúng. Eclipse khởi đầu theo mặc định trong phối cảnh Java. CDT bao gồm phối cảnh riêng của nó, vì vậy chúng ta sẽ muốn chuyển sang đó. Để làm điều này, hãy chọn Window > Open Perspective > Other. Bạn sẽ thấy một danh sách các phối cảnh có sẵn cho bạn. Chọn phối cảnh C/C++ và nhấn OK. Hình 7. Chọn phối cảnh C/C++ Bây giờ Eclipse trông giống như Hình 8. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 8 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 8. Phối cảnh C/C++ Eclipse tổ chức mã của bạn thành các dự án, do đó, chúng ta sẽ muốn tạo một dự án mới. Chọn File > New > Managed Make C++ Project. Hình 9. Dự án C++ mới Bạn có thể đã thấy có một vài tùy chọn khác nhau cho dự án. Chúng ta muốn có một dự án C++. Chúng ta chọn "Managed Make" (tiện ích Make được quản lý), bởi vì điều này sẽ cho phép Eclipse tạo ra các tệp make cho chúng ta. Bạn có thể chọn một hương vị "Standard Make" (Make tiêu chuẩn) và viết tệp make riêng của bạn. Bây giờ, chúng ta đang ở trong Trình thủ thuật New Project, ở đây ta sẽ đặt tên dự án của mình là Lottery (Xổ số) và nhấn vào Finish. Thao tác này sẽ tạo ra một dự án rỗng, bạn sẽ thấy dự án này trong cửa sổ C/C++ Projects (Các dự án C/C++). Nhấn chuột phải vào dự án đó và chọn New > Source Folder. Điều này sẽ làm xuất hiện một trình thủ thuật "New Source Folder" (Thư mục Nguồn mới), ở đây chúng ta sẽ đặt tên thư mục của mình là src và nhấn Finish. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 9 của 27 developerWorks® ibm.com/developerWorks/vn/ Chương trình xổ số cơ bản Chúng ta đã sẵn sàng bắt đầu tạo ra một số mã. Chúng ta sẽ bắt đầu bằng việc tạo ra tệp chạy thi hành của ứng dụng của chúng ta. Nhấn chuột phải vào thư mục nguồn mà chúng ta vừa tạo và chọn New > Source File, như trong Hình 10. Bây giờ, ta hãy tạo ra một phương thức main rỗng. Đây chỉ là cái giữ chỗ (placeholder); chúng ta sẽ thêm nhiều thứ vào đó sau khi đã tạo ra phần còn lại của dự án của mình. int main() { return 0; } Lưu dự án của bạn và Eclipse sẽ tự động thực hiện nó cho bạn. Bạn sẽ thấy một số kết quả trong bàn điều khiển báo hiệu rằng nó được biên dịch thành công. Chúng ta đã sẵn sàng để tạo ra lớp đầu tiên của mình. Nhấn chuột phải vào thư mục mã nguồn mà chúng ta vừa tạo và chọn New > Class. Hình 10. Lớp mới Việc này làm xuất hiện trình thủ thuật New Class (Lớp mới). Chúng ta sẽ gán cho lớp của mình một vùng tên là lotto, và chúng ta sẽ gọi lớp của mình là Lottery. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 10 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 11. Lớp Lottery Eclipse sẽ tạo ra các gốc cho lớp của bạn. CDT làm được rất nhiều điều tốt đẹp cho bạn. Nó tạo ra các chỉ thị biên dịch thích hợp trong tệp tiêu đề (header file). Nó khuyến khích các cách thực hành tốt nhất bằng cách tạo ra riêng biệt tệp giao diện (Lottery.h) và tệp triển khai thực hiện (Lottery.cpp). Nó còn khuyến khích một cách thực hành tốt khác là để cho phương thức hủy (destructor) của lớp của bạn là ảo. Chúng ta có thể nhập mã nguồn cho các lớp này như trong Liệt kê 1 và 2. Liệt kê 1. Lottery.h #ifndef LOTTERY_H_ #define LOTTERY_H_ #include <string> #include <sstream> #include <cstdlib> #include <time.h> using namespace std; namespace lotto { class Lottery { protected: int ticketSize, maxNum; int* generateNumbers(); public: Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 11 của 27 developerWorks® ibm.com/developerWorks/vn/ Lottery(int,int); virtual ~Lottery(); virtual string printTicket(); }; } #endif /*LOTTERY_H_*/ Liệt kê 2 cho thấy tệp triển khai thực hiện của lớp Lottery. Liệt kê 2. Lottery.cpp #include "Lottery.h" namespace lotto { Lottery::Lottery(int size, int num) { this->ticketSize = size; this->maxNum = num; } Lottery::~Lottery() { } int* Lottery::generateNumbers() { int* allNums = new int[this->maxNum +1]; for (int i=0; i <= this->maxNum ; i++) { allNums[i] = 0; } int* nums = new int[this->ticketSize]; for (int i=0; i < this->ticketSize; i++) { int val = 1 + rand() % (this->maxNum); if (allNums[val]) { i--; } else { nums[i] = val; allNums[val] =1; } } return nums; } string Lottery::printTicket() { ostringstream str; int* nums = this->generateNumbers(); for (int i=0;i< this->ticketSize; i++) { str << *nums << ' '; nums++; } return str.str(); } } Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 12 của 27 ibm.com/developerWorks/vn/ developerWorks® Mã này đang làm gì? Vâng, lớp Lottery của chúng ta có hai thuộc tính. Thuộc tính ticketSize là số con số trên vé số. Thuộc tính maxNum là con số lớn nhất trên vé. Sau đây chúng ta sẽ sử dụng xổ số của bang Florida làm một ví dụ. Ở đó, bạn chọn sáu số từ 1 đến 53, do đó ticketSize sẽ là 6 và maxNum sẽ là 53. Phương thức generateNumbers tạo ra một mảng các số tương ứng với các số trên một vé xổ số. Nó sử dụng hàm STL rand() để tạo các số ngẫu nhiên. Mảng allNums được sử dụng để theo dõi các số đã được tạo ra cho đến nay, do đó, chúng ta có thể chắc chắn rằng chúng ta không nhận được một số trùng lặp trên vé của mình. Cuối cùng, printTicket() tạo ra một chuỗi ký tự biểu diễn vé số của chúng ta. Khi bạn lưu trữ các tệp này, Eclipse tự động xây dựng dự án của bạn. Một lần nữa, nếu bạn ghi lưu dự án này, nó sẽ được biên dịch và bạn sẽ thấy các thông báo biên dịch trong bàn điều khiển, như trong Liệt kê 3. Liệt kê 3. Kết quả của trình biên dịch trong bàn điều khiển **** Build of configuration Debug for project Lottery **** make -k all Building file: ../src/Main.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Main.d" -MT"src/Main.d" -o"src/Main.o" "../src/Main.cpp" Finished building: ../src/Main.cpp Building target: Lottery Invoking: MacOS X C++ Linker g++ -o "Lottery" ./src/Lottery.o ./src/Main.o Finished building target: Lottery Build complete for project Lottery Lớp MegaLottery Bạn có thể đã nhận thấy rằng chúng ta làm cho phương thức printTicket() là ảo khi nó được khai báo trong tệp tiêu đề. Điều đó sẽ cho phép chúng ta tạo lớp con của Lottery và ghi đè lên phương thức này. Chúng ta muốn làm điều đó bởi vì một số bang có một loại xổ số có một số "mega" (số hàng triệu). Đây là một số được quay riêng mà vé số bất kỳ phải khớp với số đó ngoài các số khác đã quay. Hãy tạo một lớp MegaLottery cho các bang này và nó sẽ là lớp con của Lottery. Một lần nữa, nhấn chuột phải vào thư mục mã nguồn của chúng ta và chọn New > Class, như chúng ta đã làm trước đó. Lúc này trong trình thủ thuật New Class, chúng ta sẽ khai báo lớp mới của chúng ta trong cùng vùng tên, nhưng gọi nó là MegaLottery. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 13 của 27 developerWorks® ibm.com/developerWorks/vn/ Hình 12. Lớp MegaLottery Để tạo lớp con của Lottery, chọn nút Add bên cạnh phần Base Classes (Các lớp Cơ sở). Hộp thoại Choose Base Class (Chọn lớp cơ sở) xuất hiện. Bạn có thể bắt đầu nhập tên của lớp cơ sở và Eclipse sẽ thu hẹp nhanh chóng danh sách của các ứng cử viên lớp cơ sở. Bạn sẽ muốn chọn Lottery và nhấn OK. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 14 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 13. Chọn các lớp cơ sở Chúng ta có thể nhập mã cho MegaLottery, như hiển thị trong Liệt kê 4 và 5. Liệt kê 4. MegaLottery.h #ifndef MEGALOTTERY_H_ #define MEGALOTTERY_H_ #include "Lottery.h" using std::string; namespace lotto { class MegaLottery : public lotto::Lottery { Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 15 của 27 developerWorks® ibm.com/developerWorks/vn/ protected: int maxMegaNum; public: MegaLottery(int,int,int); virtual ~MegaLottery(); string printTicket(); }; } #endif /*MEGALOTTERY_H_*/ Liệt kê 5 hiển thị tệp triển khai thực hiện của lớp MegaLottery MegaLottery. Liệt kê 5. MegaLottery.cpp #include "MegaLottery.h" using namespace std; namespace lotto { MegaLottery::MegaLottery(int ticketSize, int maxNum, int maxMegaNum) : Lottery(ticketSize,maxNum) { this->maxMegaNum = maxMegaNum; } MegaLottery::~MegaLottery() { } string MegaLottery::printTicket() { ostringstream tick; tick << Lottery::printTicket() << " Mega: "; int mega = 1 + rand() % this->maxMegaNum; tick << mega; return tick.str(); } } Sự khác biệt chính giữa Lottery và MegaLottery là MegaLottery có một thuộc tính bổ sung thêm maxMegaNum. Đây là giá trị tối đa mà số mega có thể nhận. Nó sẽ ghi đè phương thức printTicket(). Nó sử dụng lớp cơ sở để tạo ra phần đầu tiên của vé số, sau đó nó tạo ra số mega và gắn thêm nó vào chuỗi ký tự biểu diễn vé số. Chúng ta cần một cách để tạo ra các loại xổ số khác nhau. Chúng ta sẽ sử dụng một lớp Factory Pattern (Mẫu nhà máy) để làm việc này. Chúng ta sẽ làm điều này bằng cách thêm một lớp LotteryFactory. Chúng ta muốn tất cả Lotteries đều đến từ cùng một nhà máy, do đó, chúng ta sẽ làm cho LotteryFactory là cá thể duy nhất (singleton). Mã cho nó có trong Liệt kê 6 và 7. Liệt kê 6. #ifndef LOTTERYFACTORY_H_ #define LOTTERYFACTORY_H_ #include "Lottery.h" namespace lotto Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 16 của 27 ibm.com/developerWorks/vn/ developerWorks® { class LotteryFactory { public: enum State { California, Florida }; static LotteryFactory* getInstance(); Lottery* getLottery(State); private: LotteryFactory(); }; } #endif /*LOTTERYFACTORY_H_*/ Liệt kê 7 cho thấy tệp triển khai thực hiện lớp LotteryFactory. Liệt kê 7. LotteryFactory.cpp #include "LotteryFactory.h" #include "MegaLottery.h" namespace lotto { LotteryFactory::LotteryFactory() { srand(time(NULL)); } Lottery* LotteryFactory::getLottery(State s) { if (s == LotteryFactory::California) { Lottery* lotto = new MegaLottery(5,47,27); return lotto; } else { Lottery* lotto = new Lottery(6,53); return lotto; } } LotteryFactory* LotteryFactory::getInstance() { static LotteryFactory instance; return &instance; } } này có một bảng kê (enum) các kiểu xổ số khác nhau. Chúng ta đã chỉ đưa vào Florida và California trong ví dụ này, nhưng sẽ không khó khăn gì để đưa thêm vào bao nhiêu tùy ý bạn. Hàm tạo (constructor) của LotteryFactory tạo mầm hàm rand() mà các lớp lottery của chúng ta sử dụng. Chúng ta chỉ cần thực hiện phương thức main có thể chạy được của chúng ta. LotteryFactory Liệt kê 8. Main.cpp #include <iostream> #include "LotteryFactory.h" Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 17 của 27 developerWorks® ibm.com/developerWorks/vn/ using namespace lotto; int main() { LotteryFactory* factory = LotteryFactory::getInstance(); cout << "What lottery do you want to play?" << endl; cout << "(1) California, (2) Florida" << endl; int cmd; scanf("%d", &cmd); Lottery* lotto = 0; switch (cmd) { case 1 : lotto = factory->getLottery(LotteryFactory::California); break; case 2 : lotto = factory->getLottery(LotteryFactory::Florida); break; default : cout << "Sorry didn't understand that" << endl; } cout << "Ticket: " << lotto->printTicket() << endl; delete lotto; return 0; } Chạy chương trình Chúng ta đã sẵn sàng để chạy chương trình của mình. Chọn Run > Run. Hình 14. Chọn các lớp cơ sở Chọn C/C++ Local Application (Ứng dụng cục bộ C/C++) và nhấn vào nút New. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 18 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 15. Lược thảo chạy C/C++ mới Thao tác này sẽ làm xuất hiện giao diện Create run configuration (Tạo cấu hình chạy) cho dự án Lottery. Bạn sẽ cần phải lựa chọn thực hiện nó bằng cách nhấn vào nút Search Project (Tìm kiếm dự án). Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 19 của 27 developerWorks® ibm.com/developerWorks/vn/ Hình 16. Tìm kiếm dự án để thực hiện Bạn có thể chọn tệp nhị phân mà Eclipse đã tạo cho bạn và nhấn OK. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 20 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 17. Tìm kiếm dự án để thực hiện Chỉ cần nhấn vào Run (Chạy) và chương trình sẽ chạy trong bàn điều khiển của bạn. Đoạn mã dưới đây cho thấy một số ví dụ kết quả đầu ra. What lottery do you want to play? (1) California, (2) Florida 2 Ticket: 12 28 24 15 35 22 Gỡ rối chương trình Chương trình của chúng ta sẽ chạy tốt, nhưng chúng ta hãy xem xét việc gỡ rối ứng dụng. Đầu tiên, tạo một điểm dừng (breakpoint) trong mã của chúng ta. Chọn một dòng và nhấn chuột phải bên cạnh nó và chọn Toggle Breakpoint (Bật/tắt điểm dừng). Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 21 của 27 developerWorks® ibm.com/developerWorks/vn/ Hình 18. Tạo điểm dừng Chúng ta cần phải tạo một cấu hình gỡ rối, phần lớn giống như chúng ta đã tạo một cấu hình chạy. Chọn Run > Debug. Hình 19. Tạo cấu hình gỡ rối Thao tác này sẽ làm xuất hiện Debug configuration (Cấu hình gỡ rối). Việc này dựa trên cấu hình Run và bạn sẽ không cần phải thay đổi bất cứ điều gì. Chỉ cần nhấn Debug. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 22 của 27 ibm.com/developerWorks/vn/ developerWorks® Hình 20. Cấu hình Debug Sau khi trình gỡ rối khởi chạy, nó sẽ nhắc bạn chuyển sang phối cảnh Debugger (Trình gỡ rối). Hãy làm như vậy. Lưu ý là trong cấu hình này chúng ta thiết lập để dừng tự động lúc khởi động phương thức main của chúng ta. Do đó, trình gỡ lỗi sẽ dừng ngay lập tức và bạn sẽ thấy một màn hình giống Hình 21. Hình 21. Trình gỡ rối Tóm tắt Chúng ta đã xây dựng và đã gỡ rối ứng dụng xổ số của chúng ta. Bạn có thể dễ dàng thêm nhiều chương trình xổ số cho nó. Một số trong chúng có thể liên quan đến các lớp con bổ sung thêm. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 23 của 27 developerWorks® ibm.com/developerWorks/vn/ CDT làm cho nó dễ dàng hơn bao giờ hết khi tạo ra các lớp này và các hệ thống phân cấp lớp và chạy và gỡ rối ứng dụng nhằm thử nghiệm nó. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 24 của 27 ibm.com/developerWorks/vn/ developerWorks® Tài nguyên Học tập • Nhận được một tổng quan về CDT trong "Phát triển C/C++ với Nền tảng Eclipse." • Xem một đoạn video về cài đặt Eclipse và CDT trong chương trình trình diễn Eclipse và C/C+ + của developerWorks. • Đi sâu vào kiến trúc của CDT trong loạt bài gồm năm phần có tiêu đề "Xây dựng một trình soạn thảo dựa trên CDT." • Các nhà phát triển Windows có thể tìm hiểu về việc di chuyển sang CDT trong "Di chuyển các dự án Visual Studio C và C++ sang CDT Eclipse." • Các nhà phát triển Windows cũng có thể xem dự án CDT-MSVC, một dự án để kết hợp trình biên dịch và trình gỡ rối của Microsoft với CDT. • Tìm hiểu thêm về trình gỡ rối CDT trong Hướng dẫn gỡ rối CDT. • Nhận thêm thông tin giới thiệu về CDT trong Phát triển C++ khi sử dụng Eclipse — hướng dẫn các trình khởi động IDE. • Xem "danh sách khuyến khích đọc Eclipse." • Duyệt tất cả nội dung Eclipse trên developerWorks. • Những người sử dụng mới bắt đầu với Eclipse nên đọc Bắt đầu tài nguyên dự án Eclipse ở đây. • Mở rộng các kỹ năng Eclipse của bạn bằng cách xem nguồn tài nguyên dự án Eclipse trên developerWorks IBM. • Để nghe các cuộc phỏng vấn và thảo luận thú vị dành cho các nhà phát triển phần mềm, hãy xem developerWorks podcasts. • Để đọc bài giới thiệu về nền tảng Eclipse, hãy xem "Khởi đầu với Nền tảng Eclipse." • Theo sát các sự kiện kỹ thuật và webcast của developerWorks. • Xem và tìm hiểu về IBM và các công nghệ mã nguồn mở và các chức năng sản phẩm với các trình diễn theo yêu cầu của developerWorks miễn phí. • Theo dõi các hội nghị, các triển lãm thương mại, webcast sắp tới và các sự kiện khác trên thế giới mà các nhà phát triển nguồn mở của IBM đang quan tâm. • Truy cập vào vùng mã nguồn mở của developerWorks để tìm các thông tin hướng dẫn rộng lớn, các công cụ và các cập nhật dự án để giúp bạn phát triển với các công nghệ mã nguồn mở và sử dụng chúng với các sản phẩm của IBM. Lấy sản phẩm và công nghệ • Tìm hiểu về các công cụ MinGW, GNU C /C++ cho Windows kèm theo với Cygwin. • Tải về Cygwin một môi trường giống như Linux cho Windows. Nó bao gồm hai phần: Một DLL hoạt động như một tầng mô phỏng Linux API cung cấp chức năng Linux API quan trọng và một bộ sưu tập các công cụ mang lại dáng vẻ và cảm nhận của Linux. • Thông tin tải Bộ công cụ phát triển Eclipse C/C++ (CDT) có nhiều thông tin mới nhất về các phiên bản CDT có sẵn. • Xem các bản tải về công nghệ Eclipse mới nhất ở alphaWorks của IBM. • Tải về các phiên bản đánh giá sản phẩm của IBM, và thực hành các các công cụ phát triển ứng dụng của bạn và các sản phẩm phần mềm trung gian từ DB2®, Lotus®, Rational®, Tivoli®, và WebSphere®. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 25 của 27 developerWorks® ibm.com/developerWorks/vn/ • Đổi mới dự án phát triển nguồn mở tiếp theo của của bạn với phần mềm dùng thử của IBM, có sẵn để tải xuống hoặc trên đĩa DVD. Thảo luận • Doug Schaefer là nhà phát triển hàng đầu về CDT. Đọc Doug trên Eclipse CDT để có các tin tức mới nhất về CDT. • Các nhóm tin Eclipse Platform là nơi dừng chân đầu tiên của bạn để thảo luận các câu hỏi về Eclipse. (Chọn lựa này sẽ khởi chạy ứng dụng trình đọc tin Usenet mặc định của bạn và mở eclipse.platform.) • Các nhóm tin Eclipse có nhiều tài nguyên cho những người quan tâm đến việc sử dụng và mở rộng Eclipse. • Tham gia vào các blog developerWorks và dành hết tâm trí cho cộng đồng developerWorks. Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 26 của 27 ibm.com/developerWorks/vn/ developerWorks® Đôi nét về tác giả Michael Galpin Michael Galpin đã phát triển phần mềm Java một cách chuyên nghiệp từ năm 1998. Ông hiện đang làm việc cho eBay. Ông đã có bằng về toán học của Viện Công nghệ California. © Copyright IBM Corporation 2010 (www.ibm.com/legal/copytrade.shtml) Nhẫn hiệu đăng ký (www.ibm.com/developerworks/vn/ibm/trademarks/) Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển C/C++ của Eclipse Trang 27 của 27