Oop Mathematica OO系统(或替代方案)?

Oop Mathematica OO系统(或替代方案)?,oop,wolfram-mathematica,Oop,Wolfram Mathematica,是Mathematica中面向对象的免费开源软件包。通过使用OO系统,我希望从这两个世界中获益(OOP/Functional) OO的注意事项是什么 Mathematica系统 你知道(更好)开放吗 来源替代品 你愿意展示你的一些想法吗 面向对象系统类 对于OOP,您有什么评论吗 Mathematica 免责声明:我没有使用任何现有的OO mma扩展(特别是OO系统),因此本文基于一般的论点(但我在Java中大量使用OO,并在mma中使用了一些OO元素,我自己实现了这些元素)。我同意OO是一个

是Mathematica中面向对象的免费开源软件包。通过使用OO系统,我希望从这两个世界中获益(OOP/Functional)

  • OO的注意事项是什么 Mathematica系统
  • 你知道(更好)开放吗 来源替代品
  • 你愿意展示你的一些想法吗 面向对象系统类
  • 对于OOP,您有什么评论吗 Mathematica

免责声明:我没有使用任何现有的OO mma扩展(特别是OO系统),因此本文基于一般的论点(但我在Java中大量使用OO,并在mma中使用了一些OO元素,我自己实现了这些元素)。我同意OO是一个移动的目标,所以你们必须在你们想要的特性方面更加具体,才能得到一个更有用的答案。这也很大程度上取决于你的目标是什么——你是想简化你自己的生活并扩大你自己的项目规模,还是想简化由几个(多个)开发人员开发的项目的沟通,并实施某些规则和协议(编码标准、最佳实践、设计模式等等),还是希望OO重用现有库

我认为,在这个行业中,OOP的使用主要分为第二类和第三类。如果这也是您的情况(我怀疑不是),那么在Mathematica中使用OOP可能是有意义的,尽管这一点尚不清楚。例如,WolframAlpha的代码库中有数千万行代码,而且没有使用OO系统。如果你想为solo开发者带来好处,那么我会选择那些我喜欢的OO特性,并自己实现它们——也就是说,创建你自己的对象模型。这在数学中并不难

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

如果您希望这些技术能够扩展您的项目,那么OO并不是您唯一的朋友。虽然这对mma来说可能不是一个很好的探索领域(WRI可能是除外),但来自其他函数语言的一些技术,如闭包、LISP宏、运行时代码生成等,很可能适用于mma。例如,我正在处理的一个mma项目有40多个包和1万行以上的mma代码,并且它是可管理的(使用WorkBench)。我经常使用闭包和宏,还有一些OO特性,但没有任何通用的OO扩展。重要的是信息隐藏、失去耦合、可组合性和可测试性,同样,OO不是实现这一点的唯一方法


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

你可能也会觉得有趣(注意,我从未使用过它)。

你想用什么样的应用程序?只是为了了解你可能需要从另一个世界的什么功能一个场景管理器->三维可视化。谢谢acl。我也没有用过它,但这个产品似乎要求必须在笔记本中定义类。(!)-我真正喜欢的是,OO系统中的类是在单独的类文件中定义的。(应该是imho。)-这看起来像是Maeder教科书上的重做。我不喜欢的是:“你可以在到期日之前免费使用MathOO 1.0b。”-我的清单上是尝试从SAGE内部运行Mathematica,SAGE将Python添加为其母语。它需要一个linux(虚拟)系统这一事实让我有点困扰。谢谢我的大部分编程经验都是用Java编写的,我最初的“设计”总是基于类、属性和方法。我想从那次经历中吸取教训。使用OO系统使我能够整洁地组织我必须生成的代码。OO系统是开源的,非常紧凑,如果需要,我可以自己维护考虑到这一事实,似乎没有太多的用户群,我预计它会出现问题。我试着联系作者,但他没有回复。该网站上的最新活动可以追溯到几年前,我想他继续了。在这种情况下,我建议首先尝试实现您喜欢的OO功能(我会选择类、继承、接口、异常、私有和匿名类,也许-我非常喜欢Java中的类,无论您喜欢什么),将代码保持在最低限度,然后看看OO系统有什么——通过这种方式,您将更好地掌握它。我也会很早决定你是想要静态还是动态类型——根据这个选择,情况会大不相同。还有,我会继续