gpt4 book ai didi

wolfram-mathematica - 面向对象数学编程

转载 作者:行者123 更新时间:2023-12-04 07:58:26 24 4
gpt4 key购买 nike

我想知道一般如何做,最好的策略是什么等。我已经看到了一些解决方案,其中一些看起来真的很难/乏味使用。我研究的那个使用纯函数来实现对象函数和像 OBJECT[] 这样的头。在类编码方面很难使用。定义函数和构造函数时我头晕(尤其是继承部分很难)。

所以我的问题的重点是类的编码部分的优雅。理想情况下,我正在寻找可以按如下方式工作的东西。首先,我们定义一个类,例如车如下:

beginClass["vehicle"];
public startTheEngine;
private fuel;
vehicle[args_]:=Block[{},...];
startTheEngine[thrust_]:=Block[{}...];
endClass

beginClass["car", "vehicle"];
public TurnTheRadioOn;
private frequency;
car[args_] := Block[{...},];
TurnTheRadioOn[]:=
Block[{},
use private variable frequency
]
endClass;

请注意,私有(private)/公共(public)函数的定义几乎就像在“普通”mathematica 代码中一样,这一点非常重要。可以这么说,这将是主要要求。

该类将用作
car1 = newObject["car", args];
car1.StartTheEngine[];
car1.TurnOnTheRadio[];

我很好奇这个人在想什么?构建类似上述的东西可能涉及 Mathematica 的许多方面,例如如何修复“。”语法等。如果你建议一个现有的包,如果你能评论它原则上是如何工作的,我将不胜感激。

我天真的期望是封装部分可以通过 BeginPackage 构造来修复。所有对象都可以存储在专门为每个类设计的 namespace 中。我认为物体看起来像
car1 = OBJECT["car"][fuel$1,frequency$1,....];
car2 = OBJECT["car"][fuel$2,frequency$2,....];

我认为必须构建类似编译器的东西,将上面的类定义代码转换为类 .m 文件。另外,在某种程度上,第二个主要问题是如何构造这样的编译器。

问候
卓然

p.s.我问这个的原因是我真的多次需要这样的东西。

最佳答案

Mathematica 语言针对 symbolic programming paradigm 进行了优化。 ,并在一个人停留在该范式内时提供最大的影响力和便利性。面向对象的编程与符号范式有很大的不同,最终不得不从头开始编写大部分支持基础设施。当然,这本身并没有什么错,但是利用 J/Link 的努力会少得多。设施并用Java编写OOP代码。 Wolfram Workbench可以轻松混合 Mathematica 和 Java 代码。

思考是什么需求插入了一个面向 OOP 解决方案的需求将是富有成效的。这个问题表明,兴趣在于如何 simulate structure types ,但也许还有其他问题,例如封装和多态性。似乎还有一些更具体的后续问题的余地,比如“什么是面向对象的习语 X 的 Mathematica 等价物?”。

OOP 被认为是有害的?

在 Mathematica 的上下文中,面向对象的编程甚至可能被认为是有害的。 OO 强调创建外部调用者无法访问其内部的“黑盒”对象。虽然这对于通过信息隐藏来控制复杂性有明显的好处,但它确实直接与符号编程的力量背道而驰。 Mathematica 强调看似不相关的组件之间的协同作用,它允许将一个的符号表示转换为另一个的符号表示。 “黑匣子”在这个生态系统中不能很好地发挥作用。作为一个具体的例子,对比 Graphics 之间的区别“对象”和新的 V8 Graph对象。后者采取了一些面向对象的方法——生成一些 negative feedback在社区。

这并不是说 OO 本质上是有害的。本次讨论的重点是 OO 对 Mathematica 生态系统来说是陌生的,并且通过采用这种设计选择,人们可能会排除 future 一些理想的协同作用。有意识地做出这个决定。

关于wolfram-mathematica - 面向对象数学编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7363253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com