我知道原则上甚至可以将诸如 C 或 MATLAB 之类的过程语言转换为面向对象的语言。这个问题已经在这里和这里得到了很好的讨论。
我发现这些讨论和其中的参考文献中缺少的是关于是否应该应用这些原则的说明。这样做有什么具体的收获吗?这显然是可能的,但这样做是否可取?在开源项目中是否有这种做法带来明显优势的例子?
澄清
也许一个例子是为了。
我继承了一些实现机器学习算法的 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 中模拟 OOP 的某些功能的情况。我的建筑模型模块现在的行为很像一个类,有一个构造函数和两个方法model_train
,model_predict
. 我已经实现了某种程度的封装(尽管没有什么能阻止调用者摆弄 的内部model
),并且原则上也可以容纳多态性。作为额外的奖励,我几乎免费获得命令/查询分离,因为model_predict
不会返回model
,因此可能不会改变model
。
(精明的读者会指出,MATLAB 已经有一个面向对象的系统。由于各种原因,包括性能和与旧版本的兼容性,我不能使用它。)
我可以在 C 中想象一个类似的机制,您可以在其中设计一些数据结构并编写函数,其第一个参数将是该数据结构的实例。
我想知道的是,我可以将这种编程方式推进多远?这是一种普遍接受的模式吗(在那里,我说过这个词)?有什么我应该注意的性能问题吗?