gpt4 book ai didi

oop - 面向对象的原则应该应用在过程语言中吗?

转载 作者:行者123 更新时间:2023-12-04 16:02:14 24 4
gpt4 key购买 nike

我知道原则上甚至可以将诸如 C 或 MATLAB 之类的过程语言转换为面向对象的语言。这个问题已经得到了很好的讨论herehere .

我发现在这些讨论和其中的引用资料中缺少的是关于是否应该应用这些原则的说明。这样做有什么具体的收获吗?这显然是可能的,但这样做是否可取?在开源项目中是否有这种做法带来明显优势的例子?

澄清

也许一个例子是为了。

我继承了一些实现机器学习算法的 MATLAB 代码。基本上只有一个函数building_model这取决于传递的标志,将训练模型或使用它来预测 future 值:

building_model('train', ...) % ... stands for the data with which the model is trained


value = building_model('predict')

模型本身是通过 building_model 内部的 MATLAB 持久变量实现的。 .

我撕裂了 building_model分为两个功能,一个用于训练,一个用于预测。过去作为持久变量实现的模型现在被外部化了,可以这么说:
model = new_model()
model = model_train(model, ...)
prediction = model_predict(model)

粗略地说,这是我可以在 MATLAB 中模拟 OOP 的某些功能的情况。我的建筑模型模块现在非常像一个类,有一个构造函数和两个方法 model_trainmodel_predict .我已经实现了某种程度的封装(尽管没有什么能阻止调用者摆弄 model 的内部结构),原则上也可以容纳多态性。作为额外的奖励,自从 model_predict 以来,我几乎免费获得命令/查询分离。不返回 model ,因此可能不会改变 model .

(精明的读者会指出,MATLAB 已经有一个面向对象的系统。由于各种原因,包括性能和与旧版本的兼容性,我不能使用它。)

我可以想象 C 中的类似机制,您将设计一些数据结构并编写函数,其第一个参数将是该数据结构的实例。

我想知道的是,我可以将这种编程方式推进多远?这是一种普遍接受的模式吗(在那里,我说过这个词)?有什么我应该注意的性能问题吗?

最佳答案

我认为这是一个非常重要的讨论。我认为可以肯定地说,OOP 并不总是所有语言中的最佳解决方案。在例如C++ 或 Python,OOP 通常是自然的方式,例如封装数据。这些语言旨在专注于类(class)。在其他语言中,以其他方式创建高质量的代码可能更容易。

我认为 Common Lisp 就是一个很好的例子。它有一个非常好的 OOP 系统 (CLOS),我会说它非常完整。但是,OOP 在 Common Lisp 中的使用远不如在 Python 或 C++ 中那么多,因为它是一种便利功能,而不是提供基本软件工程构建 block 所需的东西。

是否应该使用 OOP 实际上取决于您要解决的问题。举个例子,我认为 GUI 的东西对于使用 OOP 处理非常有用。

关于oop - 面向对象的原则应该应用在过程语言中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4759513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com