没有对象定向,我的项目能否生存?


9

我正在编写一个小的MATLAB程序包,它将解决某些类的数值问题。该算法分为3个阶段,用户每个阶段有5个选择。我已经使用函数和3个开关案例(每个算法阶段一个)实现了整个问题。它工作正常,但我正在考虑使其做更多的事情(超过5个选择和一个阶段),并且还使它成为Python端口(有些人对此很感兴趣)。20

我想知道是否应该转换为OOP框架(我一点也不擅长),还是应该坚持我拥有的程序框架(我擅长)。我已在程序代码中确保没有函数做两件事,并且重叠最少(两个代码段几乎永远不会做同一件事)。

如果您觉得它更适合他们的领域,请将其迁移到SO。

Answers:


6

无需转换为OOP框架即可受益于面向对象。请注意,功能数量比这些功能内部和之间的代码重复或这些功能的长度少是一个指标。(具有超过100行代码的功能通常是“改进潜力”的标志。)

如果您无法找到有助于面向对象的部分,那么转换为OOP框架并不是最好的第一步。而是问一个熟悉面向对象的人可以简化或改进什么,然后尝试理解为什么它是简化或改进的。

如果要使用诸如Deal.II或PETSc之类的框架,请在它们提供的功能对您有用的情况下使用它们,而不是因为您认为这样做会使您自己的代码更好或更可维护。但是您已经在MATLAB框架中,因此不太可能要改为使用C ++ OOP框架。(您可能已经知道,MATLAB提供了完整的OOP支持。)

对于Python端口,只需根据您当前的知识就可以开始使用,然后在您学到足够多的知识后可以重新开始。


我同意您的观点,在此转换为框架是过大的。我认为它们的API和体系结构是良好设计的示例,值得作为指导。
Geoff Oxberry 2013年

3

这个问题可能很适合堆栈溢出。我认为这也很合适,因为它是计算科学中的常见问题。

就组成算法而言,如果您能阅读C代码,那么做得很好的一个很好的例子就是PETSc。面向对象的编程风格可能有助于封装数据,但是作为简单的第一步,您可能只想使阶段的每个选择都具有一个通用接口的功能。然后,对于您的算法,传入每个阶段的函数作为输入,并让主要算法为每个阶段调用该函数。


我很感兴趣 您是否建议将PETSc作为一个好的库来学习OOP或从中进行过程编码?您知道OOP很好的可读库吗?
Inquest 2013年

我认为PETSc是大型软件的一个很好的例子,并且它的文献记录非常丰富。在计算科学方面,我认为PETSc,Trilinos,deal.II和FEniCS的文档很好,它们都是以OOP风格编写的。我犹豫地说,您应该向他们学习OOP。您最好先从教科书上学习,然后再看真实的代码。
Geoff Oxberry 2013年

2

并非所有对象都可以很好地建模。考虑1个+1个,通常OO系统会将1s作为对象和+as作为方法1.plus(1),但这并不符合我们对的自然解释1个+1个作为二进制中缀函数plus(1,1); 它在第一个1对象plus(定义了该方法的对象)与第二个对象(该方法的参数)之间引入了非自然的不对称性(这引起了像__plus____rplus__在Python中的错误)。

因此,不要觉得您需要将方钉强行插入圆孔中,如果您的算法以简单的程序方式看起来不错,则应保持这种状态。如果需要将其包含在OO系统中,则可以始终在非OO代码上放置一个OO接口。C ++编码员每天都会这样做(甚至为此获得报酬)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.