"Nếu bạn thực sự muốn OO sugar - hãy sử dụng C ++" - là câu trả lời ngay lập tức tôi nhận được từ một trong những người bạn của mình khi tôi hỏi điều này. Tôi biết hai điều đã chết sai ở đây. OO thứ nhất KHÔNG phải là 'đường' và thứ hai, C ++ chưa hấp thụ C.
Chúng ta cần phải viết một máy chủ bằng C (phần đầu sẽ có trong Python), và vì vậy tôi đang khám phá những cách tốt hơn để quản lý các chương trình C lớn.
Mô hình hóa một hệ thống lớn về các đối tượng và các tương tác đối tượng làm cho nó dễ quản lý hơn, có thể duy trì và mở rộng hơn. Nhưng khi bạn cố gắng dịch mô hình này sang C mà không mang các đối tượng (và mọi thứ khác), bạn sẽ bị thách thức với một số quyết định quan trọng.
Bạn có tạo một thư viện tùy chỉnh để cung cấp các tóm tắt OO mà hệ thống của bạn cần không? Những thứ như đối tượng, đóng gói, kế thừa, đa hình, ngoại lệ, pub / sub (sự kiện / tín hiệu), không gian tên, hướng nội, v.v. (ví dụ GObject hoặc COS ).
Hoặc, bạn chỉ cần sử dụng các cấu trúc C ( struct
và các hàm) cơ bản để xấp xỉ tất cả các lớp đối tượng của bạn (và các khái niệm trừu tượng khác) theo các cách đặc biệt. (ví dụ: một số câu trả lời cho câu hỏi này trên SO )
Cách tiếp cận đầu tiên cung cấp cho bạn một cách có cấu trúc để thực hiện toàn bộ mô hình của bạn trong C. Nhưng nó cũng thêm một lớp phức tạp mà bạn phải duy trì. (Hãy nhớ rằng, độ phức tạp là những gì chúng tôi muốn giảm bằng cách sử dụng các đối tượng ở vị trí đầu tiên).
Tôi không biết về cách tiếp cận thứ hai và hiệu quả của nó là gần đúng với tất cả những điều trừu tượng mà bạn có thể yêu cầu.
Vì vậy, câu hỏi đơn giản của tôi là: các thực tiễn tốt nhất trong việc hiện thực hóa một thiết kế hướng đối tượng trong C. Hãy nhớ rằng tôi không yêu cầu CÁCH làm điều đó. Đây và đây câu hỏi nói về nó, và có ngay cả một cuốn sách về vấn đề này. Điều tôi quan tâm hơn là một số lời khuyên / ví dụ thực tế giải quyết các vấn đề thực sự xuất hiện khi tiền này.
Lưu ý: vui lòng không tư vấn tại sao C không nên được sử dụng để ủng hộ C ++. Chúng ta đã đi qua giai đoạn đó.
extern "C"
và có thể được sử dụng từ python. Bạn có thể làm điều đó bằng tay hoặc bạn có thể nhờ SWIG giúp bạn điều đó. Vì vậy, mong muốn cho frontend python là không có lý do để không sử dụng C ++. Điều đó không có nghĩa là không có lý do chính đáng để muốn ở lại với C.