Tôi biết rằng về nguyên tắc có thể chuyển ngay cả các ngôn ngữ thủ tục như C hoặc MATLAB thành các ngôn ngữ hướng đối tượng. Câu hỏi này đã được thảo luận khá tốt here và here.Nguyên tắc hướng đối tượng có nên được áp dụng trong các ngôn ngữ thủ tục không?
Những gì tôi thấy bị thiếu trong các cuộc thảo luận này và các tham chiếu trong đó là giải thích về việc một trong các có nên áp dụng các nguyên tắc như vậy không. Có điều gì cụ thể để đạt được khi làm như vậy không? Rõ ràng là có thể, nhưng có phải là khuyến khích làm như vậy không? Có bất kỳ ví dụ nào trong số các dự án nguồn mở nơi thực hành này dẫn đến những lợi thế rõ ràng không?
Làm rõ
Có lẽ một ví dụ là theo thứ tự.
Tôi đã thừa hưởng một số mã MATLAB thực hiện một số thuật toán học máy. Có cơ bản là một chức năng duy nhất building_model
đó, tùy thuộc vào một lá cờ được thông qua, hoặc sẽ đào tạo một mô hình hoặc sử dụng nó để dự đoán một giá trị tương lai:
building_model('train', ...) % ... stands for the data with which the model is trained
và
Các mô hình chính nó được thực hiện với MATLAB biến cố định bên trong building_model
.
Tôi đã tách rời building_model
thành hai chức năng, một cho đào tạo và một để dự đoán. Các mô hình được sử dụng để được thực hiện như biến dai dẳng hiện đang ra ngoài, có thể nói:
model = new_model()
model = model_train(model, ...)
prediction = model_predict(model)
này, nói đại khái, như xa như tôi có thể quản lý bắt chước một số tính năng của OOP trong MATLAB. Mô hình mô hình xây dựng của tôi hiện hoạt động khá giống với một lớp, với một hàm tạo và hai phương thức model_train
và model_predict
. Tôi đã đạt được một số mức độ đóng gói (mặc dù không có gì ngăn cản người gọi từ fiddling với internals của model
), và đa hình về nguyên tắc cũng có thể được cung cấp. Là một phần thưởng thêm, tôi nhận được lệnh tách/truy vấn gần như miễn phí vì model_predict
không trả lại model
và do đó không thể thay đổi model
.
(độc giả Astute sẽ chỉ ra rằng MATLAB đã có một hệ thống hướng đối tượng. Vì những lý do khác nhau, bao gồm cả hiệu suất và khả năng tương thích với các phiên bản cũ, tôi không thể sử dụng nó.)
tôi có thể tưởng tượng một cơ chế tương tự trong C nơi bạn sẽ thiết kế một số cấu trúc dữ liệu và các hàm viết có đối số đầu tiên sẽ là một cá thể của cấu trúc dữ liệu đó.
Điều tôi muốn biết là, tôi có thể đẩy cách lập trình này đến mức nào? Đây có phải là mẫu được chấp nhận phổ biến không (ở đó, tôi đã nói từ đó)? Có bất kỳ vấn đề về hiệu suất nào tôi nên chú ý không?
Đó là điều thường thiếu trong các cuộc thảo luận về thực tiễn hướng đối tượng nói chung. Bạn vẫn phải quyết định nếu OOP là thiết kế phù hợp, cho dù nó được xây dựng trong ngôn ngữ hay chỉ đơn giản là một phương pháp thiết kế mà bạn cố gắng áp dụng mà không cần bất kỳ sự trợ giúp nào từ ngôn ngữ. Các ưu điểm (và nhược điểm) tương tự cũng áp dụng theo cách nào đó. –