Lập trình hướng đối tượng không phải là về các tính năng cú pháp, nó là một cấu trúc mã hóa và thiết kế. Tại cốt lõi của nó là khái niệm về một đối tượng , đó là một cấu trúc mà các nhóm nêu ra các thói quen để hành động theo nó (hoặc, tùy theo quan điểm của bạn, phản hồi các tin nhắn). Khía cạnh quan trọng khác của OOP là đóng gói : gói các chi tiết triển khai vào các cấu trúc mờ và kết nối chúng thông qua các giao diện được xác định rõ. Khá nhiều thứ khác trong lý thuyết OOP quay trở lại hai nguyên tắc cơ bản này.
Vì vậy, bất kỳ ngôn ngữ nào bằng cách nào đó có thể mô hình hóa các đối tượng (các thực thể chứa cả dữ liệu và mã) và đóng gói có thể được sử dụng để thực hiện OOP. Ví dụ, trong C, bạn có thể sử dụng các con trỏ hàm để lưu trữ các hàm trong các cấu trúc và bạn có thể sử dụng hệ thống tệp tiêu đề / nguồn để thực hiện đóng gói. Nó không thuận tiện, nhưng nó là đủ để làm OOP. Bạn thậm chí có thể biến một cái gì đó như Haskell hoặc ML thành OOP, và tôi sẽ không ngạc nhiên nếu ai đó có thể nghĩ ra cách lắp ráp OOP.
Tuy nhiên, thực tế mà nói, một ngôn ngữ có thể được gọi là 'hướng đối tượng' nếu nó cung cấp một bộ đầy đủ các tính năng cú pháp cho lập trình hướng đối tượng rõ ràng. Thông thường, điều này có nghĩa là một ngôn ngữ như vậy nên có: * một khái niệm về một đối tượng * một khái niệm về phương thức gọi hoặc tin nhắn truyền * một cách thoải mái và đơn giản để kiểm soát truy cập vào các thành viên đối tượng * một cách dễ dàng và đơn giản để xác định giao diện
Do đó, tôi sẽ gọi một đoạn mã hướng đối tượng nếu nó tuân thủ các nguyên tắc OOP và sử dụng cú pháp OOP có sẵn.
BTW., Ví dụ mã của bạn có thể không sử dụng đa hình và chức năng ảo, mặc dù cú pháp C không làm cho nó rõ ràng. Tôi không phải là chuyên gia về SDL, nhưng tôi hy vọng SDL_surface
có thể đại diện cho nhiều loại bề mặt khác nhau, mỗi loại có một bộ triển khai cụ thể của riêng nó - làm mờ một cái gì đó lên một bitmap bộ nhớ và làm mờ bề mặt màn hình đòi hỏi phải hoàn toàn khác mã, nhưng giao diện (các hàm lấy SDL_surface*
làm đối số) vẫn giữ nguyên. Giống như vậy, nó cũng thực hiện đóng gói: bạn không thể truy cập trực tiếp vào biểu diễn bên dưới của bề mặt, bạn phải thực hiện các chức năng biết cách xử lý SDL_surface
, vì đó là tất cả những gì bạn có. Đó là một ví dụ hay về cách bạn làm OOP trong C.