对象系统
什么是对象?
对象(Object)是用来描述客观事物的实体,它具有固有的属性和行为。在仿真学中,对象是组成整个环境或系统的一部分,属于整体中的局部。在还原整体前,首先需要还原对象这一局部。为此,借鉴信息科学的“面向对象编程”(Object-Oriented Programming,OOP)概念,仿真建模需要引入对象这一概念,Sim-CPSS 进一步将其打造为对象系统,用于提升仿真模型的可复用性,降低复杂系统的刻画难度。
Sim-CPSS 的对象系统由以下几个部分组成:
- 节点:对象在画布中的表示,包括:对象节点、映像节点 2 类。对象节点即对象本身;映像节点为对象的分身,能为连接提供便利。
- 变量:一串数据,用于存储对象的某项属性或状态。一个对象可以包含多个变量。
- 连接:一段对象之间的连线,用于揭示 2 个对象的固有联系。连接是单向且命名的。
- 元件:一个可派生出同类对象的模板。元件均归入元件库管理。基于元件,可以创生出数量不限的同类对象。
- 原型:一个可以组合出元件的更小模板。原型均归入原型库管理。一个元件可以通过对多个原型的组合,创生复合体模型。同时,原型还可以基于更小的原型构建。
许多对象都是参照现实中的某个事物及其特征来构建的,例如:在构建电力系统的仿真环境时,通常将“发电机组”视作该环境中的一个对象。
当面向“发电机组”这个整体进行建模不能满足研究需求,需要进一步细化时,还可以进一步解构“机组”,将其表示为“转子”、“定子”、“轴心”等更基础对象的组合体。
因此,选取怎样的现实参照物作为仿真对象,取决于具体研究需求及其目标。
面向特定问题,如何总结归纳出其中的对象?
在理解特定领域业务逻辑过程中,并不缺乏对牵涉的人、设备、组织、系统等潜在现实参照物及其特征的总结。以人(human)为例,每个人的个体往往具有相似的属性(特征变量),例如:“姓名”、“性别”、“年龄”等等。将这些共性特征加以归纳后,就可以建立 human 这个对象的属性表。此即为“类”(class)的由来。为了提高对这些相似事物属性的表达和建模效率,
从现实参照物出发进行总结归纳
由仿真空间的构建者根据领域知识,由抽象到具体,“自上而下”总结出“面向对象”的元件库。
元件库中每个元件均包含一组属性,这些属性可进一步采用“变量”来描述。
来自对变量集合结构性重复的分析
如果您不具备深刻的领域知识,也可以通过分析具体问题中涉及到的变量组,研究这些变量组之间的结构重复性,“自下而上”总结出“面向对象”的元件库。
例如,假如您把所有变量都放在【全局变量】这个对象中,同时您发现有一些变量组包含结构相同的变量集合,例如:“张三的性别、张三的年龄、李四的性别、李四的年龄”等等,这些集合数量相当、格式相同、名称相互关联,具有很强的重复性,那么可以考虑将这些变量组首先归纳为“人”这个元件,为新的元件赋予“年龄”、“性别”等属性变量;其次,基于这个元件创建“张三”、“李四”等一系列对象,然后修改这些对象中的变量数据,让它们足够反映具体人员的信息;最后,将有关变量组从【全局变量】这个对象中去除。
经过上述归纳和重新建模,黑板数据结构的复用性将显著增强。
两种代表仿真对象的节点比较
| 类别 | 作用 | 创建方式 | 操控性 | 外观 | 全局唯一性 | 连其它对象 | 连自己 | 删除影响 |
| 对象节点 | 代表对象本体 | 从元件 | 点击显示菜单 | 图标 & 名称 | 是 | 连接类型需匹配 | 允许 | 移除对象、映像及连接 |
| 映像节点 | 对象分身,为连接提供便利 | 从其它节点 | 点击显示菜单 | 小圆点,鼠标悬停显示名称 | 否 | 连接类型需匹配 | 允许 | 仅移除映像 |
仿真对象的连接
内涵
表示事物之间的逻辑关系
例子
现实世界的事物之间存在着许多逻辑关系。例如:书应放置在书架上;当我们需要查询一本书放置在哪个书架上时,我们可以通过名为"放置"的逻辑关系找到这本书关联的书架;反过来,通过"放置"这层关系也可以找到书架上全部的书。
Sim-CPSS 将"放置"这类逻辑关系称作类型为【放置】的连接(Connection):
在这个关系的表达中,“书架"提供了类型为【放置】的【虚拟插座】,而"书"提供了类型为【放置】的【虚拟插头】,两者的类型刚好匹配,因此"书"可以与"书架"建立连接,表示"书"放置在了"书架"上面。当然实际使用时,类型名应更准确,例如这里的【放置】应更名为【书籍与小型物件放置】或许更准确一些。那么对于"拖把"这类大型物件,就不具备【书籍与小型物件放置】这样的【虚拟插头】,也就不能放置在"书架"上了。
作用
连接(Connection)是描绘现实世界事物之间复杂交互关系的关键工具之一。下至简单逻辑关系、上至复杂网络(电网、能源网、交通网、物流网、人际关系网),使用连接工具都可以清晰表达。
特点
- 连接是有向的:发起连接的一方称作【虚拟插头】、接受连接的一方称作【虚拟插座】,所以连接是从【虚拟插头】指向【虚拟插座】
- 连接是命名的:每个连接都有一个字符串表示的类型,例如:【参与能源交易】
- 对象是连接的载体:一个对象可以拥有多个类型的【虚拟插头】,也可以成为多个类型的【虚拟插座】