Skip to content

Simio 对象与其他面向对象建模工具的区别

  • AUTHOR
  • C. Dennis Pegden, PhD
下载 PDF 版本

Simio 提供了一种全新的基于对象的范例,从根本上改变了对象的构建和使用方式,从而使建模变得更加简单快捷。本文旨在介绍 Simio 的面向对象建模框架与其他面向对象建模工具有何不同。

面向对象建模的总体思想并不新鲜,事实上,第一个面向对象建模工具--Simula--早在 50 多年前就已问世,并为今天的面向对象建模工具提供了核心思想。目前市场上有许多面向对象建模工具。在使用这些工具时,用户从库中选择对象并将其放入模型中。这些工具的许多用户普遍认为,它们在简单的模型中效果很好,但对于复杂的应用却很难使用,因为它们要么缺乏灵活性(用户无法添加或修改对象),要么需要用户用 C++ 或 Java 等编程语言编写复杂的代码才能实现灵活性。无论哪种选择,都会阻碍用户对复杂系统进行快速建模。这一直是制约面向对象建模工具被广泛接受的关键因素。

Simio 与其他面向对象建模工具的不同之处在于,Simio 对象是基于过程的,而不是基于代码的。Simio 对象是通过创建一组描述对象行为的图形流程来定义的。流程是一个流程图,描述了对象所进行的一系列活动和决策。流程可能跨越时间,也可能受到有限资源的限制。面向流程的建模工具的许多用户都熟悉的一个简单流程示例是抓取-延迟-释放。在这个流程中,对象等待攫取一个资源,延迟一个活动时间,然后释放该资源。需要注意的是,这个活动是跨时间的,执行流程的时间取决于资源的可用性和指定的延迟时间。

在其他工具中,对象是基于代码的,用编程语言实现。如果工具支持用户自定义对象,那么用户必须使用相同的编程语言来实现任何新对象。用户必须掌握面向对象的基本概念(如封装、继承、多态性等),并熟练掌握所需的编程语言。因此,创建一个新对象需要一个精通特定编程语言的程序员。与其他工具中基于代码的对象相比,Simio 中基于流程的对象具有许多重要优势。第一个也是最明显的优势是,由于对象不需要特定语言的编程技能,因此更容易创建。此外,由于 Simio 对象的逻辑是通过图形流程定义的,而且用户可以看到,因此更容易理解和修改。然而,最重要的是,Simio 中的对象行为是使用跨越时间的高级流程建模结构定义的。这大大简化了构建对象的任务。

在大多数面向对象的建模工具中,用户可以根据特定应用的需要,在提供的对象中加入自定义逻辑。例如,可能需要计算客户在特定服务器上完成服务的次数,然后在模型逻辑中以某种方式使用这一计数。这种用户添加的逻辑对于灵活地为各种系统建模非常重要。工具通常会在其标准库中提供的对象的预定义点上提供添加此类逻辑的方法。

与基于代码的对象相比,Simio 中基于流程的对象在为现有对象添加自定义逻辑方面具有一些独特而重要的优势。基于代码的对象具有逻辑 "钩子",可调用用户提供的函数,该函数在对象中的选定点执行。用户必须用指定的编程语言(如 C++ 或 Java)对该函数进行编码。在某些情况下,用户可以使用简化的脚本工具,无需编码即可完成赋值等简单操作,但脚本工具的灵活性和功能非常有限。但无论哪种情况,插入的逻辑都必须在模拟时间的特定点上完全执行。逻辑不能延迟到指定时间,不能等待资源可用或重新定位,不能等待油箱达到指定填充水平,也不能执行其他类型的跨越模拟时间的复杂逻辑。相比之下,Simio 中基于进程的对象提供了一种称为 "附加 "进程的功能,可在对象中的特定逻辑点执行。这些进程与基于代码的对象中的函数调用相对应,但功能更强大,因为它们拥有 Simio 进程的全部功能,并可根据需要跨越时间。例如,Simio 中的服务器对象有一个附加进程,每当服务器出现故障时就会运行该进程。用户可以在创建该进程时加入等待抢修人员的逻辑,并等待抢修人员到达服务器后再将控制权返回给对象。这是一项极其强大的功能。

总之,与其他面向对象建模工具中更传统的基于代码的对象相比,Simio 中基于流程的对象具有许多重要优势。这些优势包括无需专业程序员即可轻松使用,以及建模的灵活性,允许使用跨时间的流程来定义和润饰对象,而不是必须在没有模拟时间提前的情况下执行的编码函数。简而言之,与其他建模工具中基于代码的对象相比,Simio 中基于流程的对象既简单又强大。

下载 PDF 版本