Những vấn đề khi đọc source code
Trang 1 trong tổng số 1 trang
Những vấn đề khi đọc source code
Khi bạn đọc source code được chia sẻ hay từ các dự án lớn thì bạn sẽ thường gặp những vấn đề sau:
1/ Các cấu trúc lớp thừa kế, hàm virtual
2/ Các hàm khởi tạo
3/ Các kiểu ép kiểu và gán
4/ Các cấu trúc template
Mình sẽ nói từ từ về các mục này. Nói thật là mình không có các kiến thức vững chắc về các vấn đề này mà mình sẽ trình bày theo cách đọc tài liệu rồi trình bày cách hiểu của mình. Có thể là SAI hay chưa ĐÚNG nên mình mong người đọc chỉ ra lỗi sai của mình để mọi người cùng tiến bộ.
Bắt đầu từ:
1/ Các cấu trúc lớp thừa kế, hàm virtual
Các ngôn ngữ lập trình cấp cao đều là các OOPL (Object Oriented Programing Language_ ngôn ngữ lập trình hướng đối tượng). Bởi tính hướng đối tượng là đặc trưng của ngôn ngữ lập trình nên vấn đề này bạn sẽ gặp phải trong hầu hết các ứng dụng lớn đòi hỏi sử dụng tài nguyên và thời gian để viết mã dài. Những ứng dụng nhỏ thì khỏi phải nói rồi: vài dòng lệnh tuần tự, vài cấu trúc if else thì chẳng bàn tới.
Những ứng dụng lớn cần phải viết mã lệnh dài, sử dụng các thư viện có sẵn hay tự dựng nên mình cần tối ưu code, càng viết ngắn và càng rõ ràng, chặt chẽ thì càng tốt
Một dự án lớn thì ta phải bố trí code theo từng lớp lang không chỉ cho nó trông có vẻ chuyên nghiệp mà đơn giản là để cho chúng ta đỡ khổ khi phải làm việc với nó. Ta phân nó theo chức năng nhiệm vụ, ta phân nó theo vị trí tầm quan trong sao cho ta tiện nhất.
Một dự án sẽ có những namespace và bên trong namespace là những class, những struct. Namespace đóng vai trò là một cái vỏ bao ngoài giúp đóng gói code thành từng vùng, khối riêng biệt
Ví dụ: Ta có namespace std là một namespace chứa các thư viện tiêu chuẩn của C++. Ta có std::cin, std::cout cho việc xuất nhập dữ liệu từ và ra màn hình hiển thị; std::vector, std::map cho các cấu trúc mảng động; std::abs cho phép lấy giá trị tuyệt đối
Ta sẽ có thể có những hàm cin, cout, abs, cấu trúc vector, map cho riêng mình nhưng sẽ nằm ở một namespace khác.
Namespace là một lớp vỏ bao ngoài nên khi ở bất cứ đâu ta muốn bất cứ thành nào đó thuộc namespace thì cho nó nằm trong vỏ là được
Ví dụ: Ta có 2 class ở 2 file ( .h, .cpp, .hpp thì tùy) rồi struct, enum ở file khác mà chung 1 namespace thì ta làm như sau:
1/ Các cấu trúc lớp thừa kế, hàm virtual
2/ Các hàm khởi tạo
3/ Các kiểu ép kiểu và gán
4/ Các cấu trúc template
Mình sẽ nói từ từ về các mục này. Nói thật là mình không có các kiến thức vững chắc về các vấn đề này mà mình sẽ trình bày theo cách đọc tài liệu rồi trình bày cách hiểu của mình. Có thể là SAI hay chưa ĐÚNG nên mình mong người đọc chỉ ra lỗi sai của mình để mọi người cùng tiến bộ.
Bắt đầu từ:
1/ Các cấu trúc lớp thừa kế, hàm virtual
Các ngôn ngữ lập trình cấp cao đều là các OOPL (Object Oriented Programing Language_ ngôn ngữ lập trình hướng đối tượng). Bởi tính hướng đối tượng là đặc trưng của ngôn ngữ lập trình nên vấn đề này bạn sẽ gặp phải trong hầu hết các ứng dụng lớn đòi hỏi sử dụng tài nguyên và thời gian để viết mã dài. Những ứng dụng nhỏ thì khỏi phải nói rồi: vài dòng lệnh tuần tự, vài cấu trúc if else thì chẳng bàn tới.
Những ứng dụng lớn cần phải viết mã lệnh dài, sử dụng các thư viện có sẵn hay tự dựng nên mình cần tối ưu code, càng viết ngắn và càng rõ ràng, chặt chẽ thì càng tốt
Một dự án lớn thì ta phải bố trí code theo từng lớp lang không chỉ cho nó trông có vẻ chuyên nghiệp mà đơn giản là để cho chúng ta đỡ khổ khi phải làm việc với nó. Ta phân nó theo chức năng nhiệm vụ, ta phân nó theo vị trí tầm quan trong sao cho ta tiện nhất.
Một dự án sẽ có những namespace và bên trong namespace là những class, những struct. Namespace đóng vai trò là một cái vỏ bao ngoài giúp đóng gói code thành từng vùng, khối riêng biệt
Ví dụ: Ta có namespace std là một namespace chứa các thư viện tiêu chuẩn của C++. Ta có std::cin, std::cout cho việc xuất nhập dữ liệu từ và ra màn hình hiển thị; std::vector, std::map cho các cấu trúc mảng động; std::abs cho phép lấy giá trị tuyệt đối
Ta sẽ có thể có những hàm cin, cout, abs, cấu trúc vector, map cho riêng mình nhưng sẽ nằm ở một namespace khác.
Namespace là một lớp vỏ bao ngoài nên khi ở bất cứ đâu ta muốn bất cứ thành nào đó thuộc namespace thì cho nó nằm trong vỏ là được
Ví dụ: Ta có 2 class ở 2 file ( .h, .cpp, .hpp thì tùy) rồi struct, enum ở file khác mà chung 1 namespace thì ta làm như sau:
- Code:
File 1:
namespace openLAB
{
class Network
{
} // KHai bao và định nghĩa lớp Network luôn
}
File 2:
namespace openLAB
{
class Timer; // KHai báo ở đây và định nghĩa ở chỗ khác
}
File 3:
namespace openLAB
{
struct point3D
{
double x;
double y;
double z;
bool fixed;
};
enum
{
NONE =0,
PHYSIC,
VIRTUAL
};
}
jackauk- Thành viên thường
- Tổng số bài gửi : 63
Điểm danh tiếng : 2
Join date : 16/08/2015
Age : 35
Đến từ : TP Hồ Chí Minh
Similar topics
» Tìm hiểu về các giấy phép mã nguồn mở (Open Source License)
» Những trang web hữu ích
» Những vấn đề thường gặp OpenCV
» Những khái niệm cơ bản về máy tính (Cập nhật tới phần 5)
» Những bước làm quen ban đầu với xử lý ảnh bằng thư viện OPENCV
» Những trang web hữu ích
» Những vấn đề thường gặp OpenCV
» Những khái niệm cơ bản về máy tính (Cập nhật tới phần 5)
» Những bước làm quen ban đầu với xử lý ảnh bằng thư viện OPENCV
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|