2011-06-22 57 views
3

OO system是Mathematica面向对象的免费开源软件包。通过使用面向对象系统,我希望从两全其美(OOP/Functional)中受益。Mathematica面向对象系统(或其他)?

  • OO的做什么和不该做什么 Mathematica的系统?
  • 您是否知道(更好)打开 源替代品?
  • 你愿意展示一些你的 面向对象系统类吗?
  • 关于OOP一般的说法 Mathematica?
+1

你有什么样的应用?只需了解您可能需要的功能_ –

+0

场景图管理器 - > 3D可视化器。 –

回答

5

一个免责声明:我没有使用任何现有的OO mma扩展(尤其是OO系统),所以这篇文章是基于一般参数(但是我在使用Java时使用了OO,并且使用了一些面向对象的元素,我自己实现)。我同意opinion OO是一个移动的目标,所以你必须在你想要的功能方面更具体,以获得更有用的答案。它也很大程度上取决于你的目标是什么 - 你想简化你自己的生活,做你自己的项目规模,还是你想简化将由几个(许多)开发者开发的项目的沟通,以及强制执行某些规则和协议(编码标准,最佳实践,设计模式等),还是希望面向对象重用现有的库。

我认为,业界OOP的大部分使用都属于第二和第三类。如果这也是你的情况(我猜想它不是),那么在Mathematica中使用OOP可能是有意义的,尽管这还不清楚。例如,WolframAlpha在其代码库中有数千万行代码,并且在那里使用了AFAIK no OO系统。如果你想为独奏开发者带来好处,那么我会选择我喜欢的那些OO功能并自己实现它们 - 即创建你自己的对象模型。这在Mathematica中并不难。

如果使用此扩展构建大量经过良好测试的开源库和易于部署的机制,使用Mathematica的某些特定OO扩展将会更有意义。我不知道有任何现有的OO mma扩展(这可能是由于我的无知)构建的任何重要的mma代码库(库)。因此,如果您需要面向对象来重用现有的库,那么像J/Link或.Net/Link这样的东西可以更好地为您提供服务,因为您可以访问所有的Java或.Net。

如果你想让技术扩展你的项目,那么面向对象不是你唯一的朋友。尽管对于mma来说这可能不是一个很好的探索领域(WRI除外),但其他函数式语言(如闭包,LISP宏,运行时代码生成等)的某些技术可能适用于mma。例如,我正在开发的mma项目中有一个包含40多个包和10,000多行mma代码,并且它非常易于管理(WorkBench)。我使用闭包和宏,还有一些面向对象的功能,但没有任何通用的面向对象的扩展。重要的事情是信息隐藏,失去耦合,可组合性和可测试性,再次,面向对象不是唯一的方法来做到这一点。

IMO,可以通过mma(也许,类似于Python)的OO语言层完成的一件非常好的事情就是隐藏评估者和模式匹配器的复杂性,因为在很多情况下,这些都是不需要,可能会让经验较少的用户感到困惑。我曾(现在仍然)很少有时会错过这样的语言层。这样的图层的设计者将面临一个艰巨的任务,使它与mma的其他部分真正完美地结合在一起。除此之外,我看到顶级mma中构建的通用OO系统存在两个主要障碍:性能低下,没有自动垃圾收集。我认为,在解决这些问题之前,他们排除了底层OOP的大量使用(创建数百万个对象等)。 OOP的某些功能对于高级别项目体系结构可能仍然非常有用,但正如我所说的那样,它们很容易实现。这并不是说你不应该尝试现有的OO扩展,我只是针对他们将强加给你的代码的必要限制特别针对mma来减轻他们的好处。

+0

谢谢。 - 我的大部分编程经验都是用Java编写的,我最初的“设计”总是在类,属性和方法方面。我想成为一名能够从中获得经验的人。使用面向对象系统使我能够整齐地组织我将要生成的代码。面向对象系统是开源的,非常紧凑,我可以在需要时维护自己。 - 鉴于似乎没有太多的用户群,我会期待它的问题。我曾尝试联系作者,但他没有回复。该网站上的最新活动可以追溯到几年前,我想他会继续。 –

+0

在这种情况下,我建议首先尝试实现你喜欢的面向对象的功能(我会选择类,继承,接口,异常,私有和匿名类 - 我在Java中喜欢它们很多, ),保持代码最小化,然后查看面向对象系统的具体情况 - 以这种方式,您将更好地掌握它。我也很早就决定是要静态还是动态的输入 - 根据这个选择,事情会有很大的不同。另外,我还记得在JAVA中从IDE获得多少支持 - 在基于mma的OO系统中需要额外的努力。 –

1

您可能还会发现MathOO有趣(请注意,我从来没有使用它)。

+0

谢谢acl。我还没有使用它,但是这个产品似乎要求类定义必须在笔记本中进行。 (!) - 我真正喜欢的,来自OO系统的(sofar)是类在单独的类文件中定义。 (因为它应该是imho。) - 它看起来来自Maeder教科书的重做。 –

+0

而我不喜欢的是:“您可以在到期日期之前自由使用MathOO 1.0b。” - 在我的名单上试图从SAGE内部运行Mathematica,它将Python作为其母语。它需要一个linux(虚拟)系统的事实让我感到困扰。 –

相关问题