首页 理论教育 面向对象的仿真设计实践

面向对象的仿真设计实践

时间:2023-06-22 理论教育 版权反馈
【摘要】:作用于对象上的外部信息,称为消息。消息是实现对象与对象之间联系的唯一途径。面向对象程序设计强调如何抽象出对象的公共成分以组成相应的类。面向对象的程序设计本质上是类的设计,而不是对象的设计。面向对象的程序设计方法具有如下几个主要特征:抽象性:集中要点。面向对象思想与技术应用到仿真中,较为有效地克服了传统仿真方法遇到的上述困难。面向对象仿真强调并支持重用已有的仿真模块

面向对象的仿真设计实践

1.面向对象方法

所谓面向对象方法(Object-Oriented Method,OOM),就是以事物(对象)的行为为中心来考察问题,即把现实世界模型化的一种方法。现实世界可被描述为一些彼此相关并能互通信息的实体所组成的模型,客观事物本身具有其自然属性和行为,当对其中的某些属性和行为产生兴趣,并提取出来加以研究时,具有这些属性和行为的实体就成为研究对象。

OOM 的基本要素是对象,对象是对现实世界中实体的抽象。对象有静态属性和动态行为(即方法)。一个对象的内部状态构成其静态属性,对象所具有的操作则定义其方法。

一个对象(Object)的形式定义为4元组

Object=<ID,AT,MS,MI>

其中 ID——对象标识符,是该对象生命周期中唯一的标识;

AT——对象静态属性的集合;

MS——对象的方法集合,在仿真模型中,一个方法(Method)表现为一段可执行的程序代码,反映对象的动态行为;

MI——消息接口,是对象接收消息的唯一通道。

作用于对象上的外部信息,称为消息(Message)。消息是实现对象与对象之间联系的唯一途径。消息表示对接收消息的对象的某种要求,但它仅指示接收消息的对象做什么,而不指定它如何做;消息在接收消息的对象内部由对应的方法解释,该方法根据当前信息完成消息所指示的操作。这种动态束缚(Dynamical Binding,即程序在运行前仅确定做什么,在运行中决定如何做)机制是对实现智能应用的强有力的支持。

所谓类(Class)是对一组具有相同属性和行为(方法)的对象的描述。任何对象都是某个类的实例。可以采用类的概念来研究系统的构成,划分问题域中涉及的各种对象。从实现上看,类是一种共享机制,它为一组对象提供了共享操作的能力,因而通过引入类的概念,能使对象描述系统化,避免重复说明,大大减少程序开发的工作量。

面向对象程序设计强调如何抽象出对象的公共成分以组成相应的类。面向对象的程序设计本质上是类的设计,而不是对象的设计。对象是在程序执行时动态产生的,当要创建属于某个类的对象时,只须通过对该类的实例变量指定一个具体值即可。

面向对象的程序设计方法具有如下几个主要特征:

(1)抽象性:集中要点。抽象用于识别应用系统所包含的对象和类。面向对象的方法中,对象本身是对现实世界各种事物的一种抽象描述,而类又是对具有共同特性的对象的进一步抽象,一个类定义了一种对象类型,描述了属于该种类型的所有对象的性质。类将数据结构及内部操作封装在一起,作为一个整体进行描述,提供了实现用户定义数据类型及相关函数和操作的手段,充分体现了抽象数据类型(Abstract Data Type,ADT)的思想。

(2)封装性:隐藏私有部分。封装是借助于类这一抽象结构来实现的。封装就是将一类对象的属性和行为(方法)组合在一起,设定一个明确的边界,使对象的内部实现对外不可见,各对象的内部实现细节被限定在边界以内并受到保护。对象间的相互作用通过消息接口来实现可见,封装限制了类的数据和方法的可访问性,为软件模块化提供了一条途径,不仅避免了传统程序设计中大量的数据传递,而且可大大提高开发大型软件的效率

(3)继承性:获得重用性。继承是自动共享类与子类中的属性和行为(方法)的机制,使用继承可以除去冗余的属性和行为,以实现软件重用。有两种基本类型的继承:实现和接口。实现继承通过概括父类中的公共代码,然后在子类中开发各自的专用代码来提供代码重用。属于子类的任何对象自动重用父类的行为和属性的全部代码。接口继承提供对接口的重用,即属性和行为的设置,但允许对这些属性和行为采用不同的实现。实现继承和接口继承都是获得重用性的强大工具。实现继承提供接口和相关代码的重用;当相关代码不同时,接口继承提供接口重用。继承性使系统呈现出清晰的层次结构,易于理解,而且实现了软件的可重用性,从而加快了软件的开发进程,有效降低了软件开发的复杂性和费用。

(4)多态性:相同的行为不同的实现。对象是受外部消息的触发而执行动作的,不同的对象在接受相同的消息时会导致完全不同的行动,这种特性称为多态性。利用多态性,用户可以发送一般形式的消息,而将执行该消息的所有细节留给接受对象。

面向对象技术显式地提供了还客观世界以本来面目的“对象”的概念,软件系统设计者可以根据问题空间的实际特征灵活定义解空间中的对象,从而使软件系统尽可能反映人们正在研究的现实物理系统,这样常有助于对程序的理解,以及对程序所描述事物的全面把握。使求解空间在结构上尽可能与问题空间一致,是OOM 的基本原则,也是用OOM构建知识系统的出发点。对智能仿真系统,利用OOM 可以实现信息、模型和知识的一体化管理,以实现真正面向问题而非面向工具的智能仿真环境

2.面向对象仿真技术

由于缺乏有效的解析分析方法,对复杂大系统的仿真系统的建立遇到许多困难。复杂大系统仿真的研究开发项目常常需要花费较长时间与较多费用,同时由于需要许多领域的专家协同工作,为使各自开发的子系统能组合起来构成一个大的仿真系统,对整个项目的管理提出了严峻的挑战,应用传统仿真技术往往难以使子系统有机地组合。

在传统的仿真方法中,仿真模型的确认与仿真程序的验证,都是非常复杂而繁琐的工作。水电施工机械化环境动态多变,在仿真研究中往往需要快速建模,在使用过程中需要不断改变模型的结构,以适应环境的变化。因此,对仿真模型的修改、扩充和重用提出了更高的要求,这些问题在传统仿真方法中没有得到满意的解决,而且传统的仿真系统在建模、实验与分析方面不直观,最终限制了用户广泛使用仿真技术的可能性。

面向对象思想与技术应用到仿真中,较为有效地克服了传统仿真方法遇到的上述困难。用面向对象技术开发的仿真模块具有良好的封装性、可重用性及互操作性,使得大量的模块可以存入库中,为日后的仿真软件所重用,这样可以节省大量的编码工作,从而减少仿真软件开发的时间与费用。极端情况下,如重用库积累到足够丰富、使得组成某些仿真软件的所有模块均可从库中获得时,开发这些仿真软件可以不做或只做极少的程序编码工作。

面向对象仿真强调并支持重用已有的仿真模块,这些模块均经过了正确性验证,且经过了封装,因而为仿真模型的确认、仿真程序的验证带来很大的方便。同样,通过重用仿真模块,可以快速建立模型、快速改变模型的结构。

传统的仿真软件主要提供仿真运行的机制和通用的数据结构与函数,建模的任务是把实际系统中对象之间的相互作用关系转换成在数据结构内部对数据的操作。不同的仿真软件使用不同的术语、概念和语法,同一术语在不同仿真软件中也往往具有不同的语义,因此使用这些软件进行仿真研究就必须利用软件提供的设施来建立仿真模型。面向对象仿真突破了这种局限,它根据组成系统的对象及其相互关系来构造仿真模型,模型的对象通常表示实际系统中的实体,并可使用领域中的术语,从而弥补了模型与实际系统之间的差距,使应用领域人员能以熟悉的直观的对象概念来建立仿真模型,加上建模的世界观与人们认识现实世界的思维方式一致,使用户在建模过程中不需要多少概念上的转换,增强了仿真建模的直观性和理解性。概括起来,面向对象仿真的程序设计具有以下优点:

(1)模块化。构成面向对象仿真软件的基本单元是模块化的对象。在模块化的对象中,对象的所有信息都保存在该对象中,只有通过规定的接口才能读取、修改。这种信息封装意味着对一个对象的改变,只要保持其接口功能不变,不会影响其他的对象。

(2)可重用。在面向对象仿真中,各种模型可以作为类存放在类库中,形成可重用的模型库。库中的模型可以作为未来建立新模型的构件,从而实现重用。另一种重用方式是可以通过继承来建立新的类,从而建立新的模型。

(3)可扩充。应用面向对象思想、方法和技术建立的仿真系统,具有良好的可扩充性,可以方便地在系统中加入新的模块来增加仿真系统的功能。(www.xing528.com)

(4)可理解。面向对象仿真对设计者、实现者及最终用户来说都改进了仿真的可理解性。因为面向对象仿真系统中的对象往往直接表示客观系统中的真实对象,这些实体在面向对象仿真系统中可以用外观类似于人们熟悉的图形和图像来表示,用户可以通过图形界面与仿真系统进行交互,利用图形或图像来直接建立仿真模型。在仿真过程中,用户可以利用动画显示仿真模型的运行过程,各种仿真统计数据也可以利用图形来显示。这种图形表达能力对用户了解仿真过程、理解仿真结果都有很大的帮助。

(5)与人工智能结合。仿真与人工智能的结合可以增强仿真的能力。在基于知识仿真系统和专家仿真系统方面的广泛研究表明,人工智能和专家系统在辅助仿真建模、仿真结果的解释和仿真模型灵敏度分析等方面有重要的作用。面向对象方法既可以表达仿真模型,又可以表达知识和知识的获取与推理,既可以用于设计仿真系统,又可以用于设计专家系统,因而为仿真与人工智能的结合提供了有效的途径。

(6)实现并行仿真。由于对象封装了所有的信息,因而每个对象都能在分配给自己的处理程序上执行它的功能,这样,对象在一定程度上可以相对独立地运行。正是对象的这种相对独立性,使面向对象仿真易于并行执行。而仿真的并行执行可以极大地缩短仿真时间,允许仿真更多的对象以及在更细的粒度上进行仿真。

仿真技术应用的对象是系统。一般系统的定义为:系统是相互作用、相互联系的元素的集合。因此,系统可分解为元素(元素本身也可以是系统),元素之间有联系和相互作用是系统的主要特点。“仿真”要逼真地仿真一个系统,显然应反映系统的主要特点,而面向对象技术正好提供了描述系统特点的手段。最早的面向对象程序设计语言正是为仿真的应用要求而设计的,而现在,系统仿真又从面向对象技术的发展中得到支持。

面向对象与仿真的一致性在离散事件系统仿真中表现得更加明显。在离散事件系统仿真中,通常把系统分成若干个相对独立又相互作用的实体,首先建立这些实体的局部模型,然后按实体间的相互联系连接局部模型,组成总体模型。实体可用对象来描述,实体间的相互作用可用消息来描述,所以在离散事件系统仿真中采用面向对象技术是自然的事情。

从面向对象程序设计发展起来的基本概念和运行机制应用到其他领域,得到了一系列相应的面向对象技术,其中能在仿真中直接应用的面向对象技术有:

(1)面向对象分析OOA。

(2)面向对象设计OOD。

(3)面向对象程序设计语言OOPL。在这种语言中,可以把数据和处理数据的过程结合为一个对象。对象既可以像数据一样被处理,又可以像过程一样描述处理的流程和细节。

(4)面向对象数据库OODB(Object Oriented Data Base)。OODB把对象作为存取和检索的单位,将传统数据库定义的数据定义语言和数据操作语言融为一体。应用面向对象的方法将仿真软件与数据库系统集成起来,将大大加强仿真软件的功能。例如,一般情况下,对象在仿真运行结束后将消失,以后运行时需要重新构造。OODB 可为仿真提供长久的对象,节约重新设计与构造的时间。

对象是一种普遍适用的基本逻辑结构,是一个以有组织的形式表示信息的实体。它既可以表示一个抽象的概念,也可以表示一个具体的模块:既可以表示软件,也可以表示硬件。于是面向对象的方法提供了一种分析、设计和实现仿真系统的方法,又提供了描述仿真系统设计和实现仿真系统的统一框架

3.面向对象仿真系统的构成

面向对象仿真的基本过程是:程序设计人员首先分析问题领域中的实体构成情况,然后在仿真系统中开发相应的类表示这些实体,最后从类中生成对象,并规划对象之间的相互作用关系。在这个过程中,如果有一个适当的面向对象仿真软件(环境或系统)来支持,则可大大提高工作效率。面向对象的仿真软件应该是整个软件系统本身和由软件系统建立的仿真模型,都是用面向对象的方法与机制建立的,整个仿真系统可以视为对象的集合,系统的活动通过消息传递实现。因此,面向对象仿真软件应将传统的以功能为中心的模块变为以对象为中心的模块,将功能模块完成的功能改为由对象的操作来完成,而整个系统的功能的实现则由对象间彼此互通消息来完成。

面向对象仿真系统中包含多种对象,这些对象在仿真运行时由相应的类产生,通常有以下各种类:

(1)具体的建模对象类。包括能描述被仿真的客观系统的各种构成成分的类。这些类一般按层次结构组成,数量众多,类型复杂,并且与客观系统的成分类型有一一对应的关系。

(2)抽象的建模对象类。各种具体的建模对象类中有许多共同的特征,例如,都要描述输入输出接口,都有一个时间属性,因而可以抽象成抽象的建模对象类。在抽象的建模对象类建成后,可以通过继承方便地将其用于生成各种具体的建模对象类。

(3)随机数与外部输入产生类。随机数类用于对系统中的随机因素进行建模。外部输入类用于描述仿真过程中所需的外部输入,其实质是对系统的外部环境建模。

(4)消息传送类。用于实现对象间的消息按顺序、目的传送,主要应具有消息的分发功能。在单机单进程的仿真中,仿真运行时消息的传送比较简单,而在分布仿真中,要实现多种类型的仿真对象(仿真应用)间正确有效的消息传送是一个困难的问题。

(5)实验管理与控制类。用于建立与管理实验框架,从建模类库中选择适合的类生成所需的对象,并提供控制实验运行的手段。

(6)用户接口类。提供设计实现用户最终所需人机界面的一些类。这些类通常是在通用的面向对象语言提供的窗口类基础上增加仿真的特征以及用户领域的特征,使得能迅速建立各种用户易理解的交互式图形建模、模型修改、仿真实验控制和结果显示等接口界面。

(7)输出分析类。用于对仿真结果作各种误差分析和图形处理。

此外,大型的仿真系统中还会有面向对象的仿真数据库,用于存储和管理各种模型数据、实验数据和仿真结果。从开发到应用,一个面向对象的仿真系统,有三个不同层次,即仿真系统程序开发、仿真应用程序开发和仿真用户。

仿真系统程序开发的任务是设计仿真系统的内核。包括各类仿真软件可共用的类,这些类主要是抽象建模对象类、消息传送类、实验管理与控制类,也包含设计面向对象的仿真数据库。这些类通常可以在很广的范围内共享,因而要求使用规范化的方法来设计与实现,HLA 即是一种开发分布仿真中内核类的规范。

仿真应用程序开发的任务是利用系统程序开发的成果,设计开发面向某一领域的各种仿真对象类。其主要任务是建立该领域的一个仿真对象类库,用于描述领域中的各种实体,并在此基础上开发具体的面向对象仿真应用软件。

仿真用户使用应用程序开发提供的仿真应用软件,从类库中选择所需要的类来生成具体的对象,构成被仿真系统的运行模型,产生仿真输入数据,执行仿真并分析结果。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈