【发布时间】:2015-04-02 12:48:15
【问题描述】:
我有一个问题,我需要在 matlab 中处理大量数字并且代码开始变得混乱。在不同阶段将不同类型的绘图对象添加到代码中,有些有图例,有些没有。问题是没有 NULL 图例。一旦创建了一个对象,就会创建一个图例。但是,在调用 legend(handles,...) 之前,它们不会显示。这意味着,如果绘制了一些东西,有些需要图例条目而有些不需要,则需要传递大量句柄。
现在,文件开始变得很长,大约 1500 行,其中一些全局变量跨越了文件中的许多函数等等。为了防止“不要使用全局变量”cmets 涌入,是的,我知道全局变量通常是不必要的,但是当我把手放在它上面时,代码就是这样。但是,现在代码越来越乱,我考虑使用面向对象编程(OOP)来处理数字。
这个想法是让自定义图形对象自行处理,从而使代码更易读,分成更小的块。我们的想法是有一个类似的设计
class Figure
private:
MainFrame;
SubFrame;
Lines;
Legends;
Title;
X-Label;
Y-Label;
Methods:
To be defined, for example formatting plotting, edit title,…
完整的设计并没有完全考虑清楚,但是这个问题的重点实际上是关于在 matlab 中使用 OOP。到目前为止,我所看到的并没有真正使用过的东西很多。这有什么原因吗? 任何人都可以在 matlab 中给出 OOP 的优缺点吗?在 matlab 中是否推荐使用 OOP?
我已添加有关我的问题的信息,因为我了解大型复杂问题更需要 OOP,因此与问题的复杂性相比,答案最好考虑缺点。 (例如,永远不要在matlab中使用OOP,只有在遇到复杂问题时才使用,随时使用,...)
【问题讨论】:
-
Matlab documentation 有一个关于这个主题的相当大的页面,以及何时使用 OOP 的指南。此外,OOP 的优缺点并不真正取决于语言(除非该语言没有足够的功能来支持 OOP)。这取决于您要解决的问题(复杂性、模块化要求等)。
-
@RollenD'Souza 我明白了,但这对于任何面向对象的语言来说或多或少都是正确的,而且它的级别非常高。这个问题不是关于 OOP,而是关于 MATLAB 中的 OOP。该问题与这个较旧的 SO 问题Is MATLAB OOP slow or am I doing something wrong? 松散相关。但是,这个问题已经很老了,可能不再具有代表性。
-
啊,我明白了。好吧,这更有意义。接受的答案也已针对 2014a 进行了更新,因此具有代表性。
-
如果你看第一个答案,他在 MATLAB 2014a 上重新运行了代码,OOP 仍然比直接函数调用慢得多,包也是如此。
-
@TheBlackCat 确实如此,但另一方面,这只是函数调用。可能还有其他问题,这里没有展示。