zor*_*ank 10 wolfram-mathematica
我想知道如何一般地做到这一点,最好的策略是什么等等.我已经看到了一些解决方案,其中一些看起来非常难/乏味.我工作的那个使用纯函数来实现对象函数和头像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;
Run Code Online (Sandbox Code Playgroud)
请注意,私有/公共函数的定义几乎与"普通"mathematica代码一样非常重要.这就是主要要求.
该课程将被用作
car1 = newObject["car", args];
car1.StartTheEngine[];
car1.TurnOnTheRadio[];
Run Code Online (Sandbox Code Playgroud)
我很好奇那个人要考虑什么?为了构建像上面这样的东西可能涉及Mathematica的许多方面,例如如何修复".".语法等.如果您建议现有的软件包,我将不胜感激,如果您可以原则上评论它是如何工作的.
我天真的期望是封装部分可以通过BeginPackage结构修复.所有对象都可以存储在专门为每个类设计的名称空间中.我认为对象看起来像
car1 = OBJECT["car"][fuel$1,frequency$1,....];
car2 = OBJECT["car"][fuel$2,frequency$2,....];
Run Code Online (Sandbox Code Playgroud)
我认为必须构建类似编译器的东西,将上面的类定义代码转换为类.m文件.此外,在某种程度上,第二个主要问题是如何构建这样的编译器.
关心佐兰
ps我之所以问这个问题,是因为我真的需要多次这样的东西.
WRe*_*ach 15
Mathematica语言针对符号编程范例进行了优化,并且当一个人保持在该范例内时提供最大的杠杆和便利.面向对象的编程与符号范式有很大不同,最终必须从头开始编写大部分支持基础结构.当然,没有什么本质上是错误的,但是利用J/Link工具并用Java编写OOP代码要少得多.该钨工作台可以很容易地混合的Mathematica和Java代码.
考虑哪些要求推动OOP解决方案将是富有成效的.问题表明,兴趣在于如何模拟结构类型,但也许还有其他问题,如封装和多态.似乎有一些更具体的后续问题的范围,即"Mathematica等效于面向对象的成语X?".
OOP被认为有害吗?
在Mathematica的上下文中,面向对象编程甚至可能被认为是有害的.OO强调创建"黑匣子"对象,其内部是外部呼叫者无法访问的.虽然这对于通过信息隐藏进行复杂性控制具有明显的好处,但它确实直接面对符号编程的强大功能.Mathematica通过允许一个符号表示转换为另一个的符号表示来强调看似不相关的组件之间的协同作用."黑匣子"在这个生态系统中表现不佳.作为一个具体的例子,对比Graphics"对象"和新的V8 Graph对象之间的差异.后者采取了一些OO方法 - 在社区中产生一些负面反馈.
这并不是说OO本质上是有害的.讨论的重点是OO对Mathematica生态系统来说是陌生的,通过采用这种设计选择,人们可能会在未来排除一些理想的协同效应.有意识地做出决定.
我推荐你到我的这篇文章,在那里我讨论一种方法来实现类似于你要求的东西.这不会给你一个OO的对象系统,继承或多态特征,但从你的表述看起来你看起来更多的是构建ADT(抽象数据类型)的方法,而不是完整的OO扩展.对于使用以这种方式构造的可变数据结构的非平凡示例,您可以在这里查看.
就Mathematica中的面向对象而言,您也可以在SO和MathGroup上查看过去的一些相关讨论.我知道这个,在那里我做了回复,并表达了我对此事的一些看法.你也可以找到这个最近的 SO问题,以及它为过去关于Mathematica结构的讨论提供的链接.
| 归档时间: |
|
| 查看次数: |
9144 次 |
| 最近记录: |