赢脑 (Nikolai Varankine) - 应用 - Thinker™
 介绍   软件   联系方式   关于我   消息   LinkedIn™   Quora™ 

📚 模块和片段

Thinker™ 中计算点的层级结构本质上局限于树状结构。 更复杂的计算可以通过将典型函数封装到可重用的外壳(称为“模块”)中来完成。

一个模块可以包含一个或多个计算点层级结构。 它也可以包含其他模块,前提是嵌入式模块不会创建模块引用循环。 这样,一个复杂的常规计算结构就可以以非常紧凑的形式定义,因为嵌入式模块的每个实例都只是一个参数化的引用(链接), 而不是它的副本。

模块的实例化称为“片段”,是另一种外壳。 模块描述了其内部包含的内容,而片段则描述了该模块的特定实例如何与其他片段连接。 它还包含一组用于自定义模块的特定参数。 这个概念与编程语言中使用的“片段-模块”对和“调用过程”对非常相似。 每个参数都会深入到层次结构中,但可以在任何嵌入的片段中重新定义。

每个引用相同模块名称的片段在运行时都会收到其自身的模块内容副本,因此所有相同类型的模块在模型中看起来都是不同的, 因此不会显示它们自己的计算数据。 这为在计算中使用状态类提供了机会。 然而,它需要计算机提供更多内存来容纳所谓的“扁平”运行时模型。 这种方法看起来类似于集成电路项目,但又与计算机软件概念有所区别。

一个片段可以引用几种类型的模块。 最重要的是计算模块。 它由计算点构成。 另一种类型的模块称为“字段”。 简而言之,它是网络数据的一对一互连,用于对数据执行基本的转换操作,为外部数据提供者和消费者实现数据生成器或数据代理等等, 这些操作由附加的 Java 类定义。 默认情况下,字段为每个引脚提供一个简单的直通通道,用于将数据网络连接在一起。

由于项目的每个部分实际上都表现为一种模块,因此每个模块和每个片段都提供了一种建立数据流进出的解决方案。 运行时模型中有两种类型的数据流门,通常称为“通道”:一个“发送器”用于向外部提供计算值,另一个“接收器”用于获取内部值。 它们的连接形成了一个数据流通的网络。网络没有严格的限制。 它可以包含多个发送器和多个接收器。 网络遵循一条规则运行:每个发送器将其值发送给网络内的每个接收器。 它要求接收器具有尽可能低的延迟。

虽然运行时网络代表了一种非常简单的结构,但项目网络提供了更便捷的数据流描述方式。 它定义了一个“引脚”——一个来自运行时通道的映射。 该映射具有指示数据流方向(流入或流出)的属性。 另一个可选属性将引脚映射到计算点。 最后一个属性也具有类似的可选属性,用于链接到特定的引脚。 引脚可以分组为所谓的“关节”。 这有助于将含义相似的数据通道组织在一个定义下,并简化文档。 当模型准备好运行时,片段的关节会连接到模块的关节,以提供跨整个层次结构的连接。

章节
教程