OO system是Mathematica中OOP的免费开放源码软件包。我希望通过使用OO-System可以从两全其美(OOP /功能)中受益。

  • 什么是OO?
    Mathematica系统?
  • 您知道(更好)开放吗?
    来源替代品?
  • 您愿意展示一些
    OO系统类?
  • 关于OOP的一般评论
    Mathematica?
  • 最佳答案

    免责声明:我没有使用任何现有的OO mma扩展(特别是OO系统),因此本文基于一般性论点(但是我在Java中工作时大量使用OO,并在mma中使用了一些OO元素,我实现了自己)。我同意opinion的观点,即OO是一个不断发展的目标,因此您必须在想要的功能方面更加具体,以获得更有用的答案。这也很大程度上取决于您的目标-您是否要简化自己的生活并建立自己的项目规模,还是要简化将由多个(许多)开发人员开发的项目的沟通,以及强制执行某些规则和协议(编码标准,最佳实践,设计模式等),或者您希望OO重用现有的库。

    我认为行业中大多数OOP使用属于第二和第三类。如果这也是您的情况(我怀疑不是),那么即使在不清楚的情况下,在Mathematica中使用OOP还是有意义的。例如,WolframAlpha在其代码库中有几千万行代码,并且那里没有使用AFAIK没有OO系统。如果您想为单独开发人员带来好处,那么我将选择我喜欢的OO功能并自己实现它们-即,创建您自己的对象模型。在Mathematica中,这不太困难。

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

    如果您希望这些技术可以扩展您的项目,那么OO不是您唯一的朋友。尽管对于mma来说,这可能不是一个很好的研究领域(WRI可能除外),但其他功能语言中的某些技术(例如闭包,LISP宏,运行时代码生成等)也很可能适用于mma。例如,我正在从事的mma项目之一具有40多个软件包和1万行以上的mma代码,而且它非常易于管理(使用WorkBench)。我经常使用闭包和宏,还有一些OO功能,但没有任何通用的OO扩展。重要的事情是信息隐藏,失去耦合,可组合性和可测试性,同样,OO不是唯一的方式。

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

    09-28 03:55
    查看更多