Я знаю, что в принципе возможно превратить даже процедурные языки, такие как C или MATLAB, в объектно-ориентированные.Этот вопрос довольно хорошо обсуждался здесь и здесь .
То, что я обнаружил отсутствующим в этих обсуждениях, и ссылки в нем были изложением того, следует ли одному применять такие принципы.Есть ли что-то конкретное, что можно получить от этого?Ясно возможно , но стоит ли рекомендовать сделать это?Существуют ли примеры среди проектов с открытым исходным кодом, в которых эта практика привела к явным преимуществам?
РАЗЪЯСНЕНИЕ
Возможно, приведен пример.
IУнаследовал некоторый код MATLAB, который реализует некоторый алгоритм машинного обучения.В основном есть одна функция building_model
, которая, в зависимости от передаваемого флага, будет либо обучать модель, либо использовать ее для предсказания будущего значения:
building_model('train', ...) % ... stands for the data with which the model is trained
и
value = building_model('predict')
Сама модель реализована с использованием постоянных переменных MATLAB внутри building_model
.
. Я разбил building_model
на две функции: одну для обучения и одну для прогнозирования.Модель, которая раньше была реализована как постоянные переменные, теперь, так сказать, экстернализована:
model = new_model()
model = model_train(model, ...)
prediction = model_predict(model)
Это, грубо говоря, насколько я мог управлять эмуляцией некоторых функций ООП в MATLAB.Мой модуль модели здания теперь работает почти как класс, с конструктором и двумя методами model_train
и model_predict
.Я достиг некоторой степени инкапсуляции (хотя ничто не мешает вызывающей стороне возиться с внутренностями model
), и полиморфизм в принципе также можно учесть.В качестве дополнительного бонуса я получаю разделение команд / запросов почти бесплатно, поскольку model_predict
не возвращает model
и, следовательно, не может изменять model
.
(Читатели с проницательностью отметят, что MATLAB ужеимеет объектно-ориентированную систему. По разным причинам, включая производительность и совместимость с более старыми версиями, я не могу ее использовать.)
Я мог бы представить себе подобный механизм в C, где вы могли бы разработать некоторую структуру данных и написать функции, чьиПервым аргументом будет экземпляр этой структуры данных.
Что я хотел бы знать, как далеко я могу продвинуться в этом способе программирования?Это общепринятый образец (там, я сказал слово)?Есть ли какие-то проблемы с производительностью, за которыми мне следует следить?