§4.1面向对象的软件设计方法
4.1.1面向对象技术
面向对象的基本方法学认为:客观世界是由各种各样的对象所组成的,每种对象都有各自的内部状态和运动规律,不同对象间的相互作用和联系就构成了各种不同的系统,构成了我们所面对的客观世界。
4.1.1.1面向对象技术的概念
尽管很多年前,面向对象的编程思想就已经存在了。但直至近年,面向对象的程序设计方法(OOP)才获得了广泛的运用。面向对象技术是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发技术。
在面向对象的程序设计中,有两个极其重要的概念:类和对象。从广义的术语来讲,对象是一个可以想象的物体,既可以是有形的,又可以是无形的;既可以是极其庞大的,又可以是微不足道的。以面向对象方式编写的程序由相互作用的对象组成。每一个对象都应包含两部分:一个是属性,它是表征对象静态特征的;另一个是操作,它是表征对象动态特征的,用于执行对属性的操作。
4.1.1.2面向对象技术的基本特征
在面向对象技术中,有如下一些主要特征:
1:从问题域中客观存在的事物出发来构造系统,用对象作为对这些事物的抽象表示,并以此作为系统的基本构成单位。
2:事物的内部状态(即可以用一些数据来表达的特征)用对象的属性来表示,事物的运动规律(即事物的行为)用对象的方法(也称操作)来表示。
3:对象的属性与方法紧密结合为一体,成为一个独立的实体,对外屏蔽其内部细节(称作封装)。
4:事物能归类,与此对应把具有相同属性和相同方法的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。
5:通过在不同程度上运用抽象的原则,可以得到较一般的类(基类)和较特殊的类(派生类)。派生类继承基类的属性和方法,面向对象技术支持对这种继承关系的描述与实现,从而简化系统的构造过程及其文档。
6:复杂的对象可以用简单的对象作为其构成部分 (称作聚合)。
7:通过关联表达对象之间的静态关系。
4.1.1.3面向对象技术的程序设计步骤
采用面向对象程序设计方法进行程序设计的步骤:
1:确定系统中的所有对象以及它们的属性。
2:确定影响每个对象的操作和每个必须初始化对象的操作。
3:建立每个对象与其它对象的可视性。
4:建立每个对象的接口
5:完成每个对象
4.1.2面向对象的建模技术
完整的面向对象技术包含了面向对象分析、设计、实现、测试、维护等多个方面,其中面向对象的分析和设计用于描述一个系统,是整个面向对象技术中最重要的组成部分-最能体现面向对象技术好处的部分。由于在分析和设计中所描述的系统往往是复杂的大型系统,因此我们不可能一次性完整的理解该系统,必须从多个不同的角度(或不同的方面)来描述系统,从而构造系统模型。这些从某个角度(或某个方面)来描述系统的具体方法就叫做建模技术,由于每种建模技术只强调了系统的某些方面而忽略了另一些方面,因此,典型的面向对象方法都要采用多种建模技术来覆盖系统的所有方面,各种建模技术集成就能建立完整的系统模型。
在面向对象分析和设计中所建立的模型可以分成两类:一类是描述子系统或系统中各对象的结构及它们之间静态关系的模型,可以称为静态结构模型,它包括类、对象、接口、属性、关系等;另一类是描述系统或系统中类之间的动态关系及对象行为的模型,亦称为动态行为模型,它包括方法(操作)、相互作用、协作和状态变化等等。
§4.2系统设计
4.2.1MITS系统实体分析
MITS仿真系统中所描述的道路交通系统中的实体可以分为两类:一类是物理实体,一类是逻辑实体。物理实体指的是客观存在的各种交通要素,例如:信号灯、汽车、路段、车格、候车队列等;逻辑实体则是指系统中无形的概念化的成分,它们中的某些难以从外观上予以准确分类,例如:交叉路口、路段入口、路段出口、系统入口、系统出口等等。
MITS中的实体可以用下表表示:


4.2.2MITS系统模型
4.2.2.1静态模型
静态模型描述的是对象类之间的静态关系,MITS的静态模型如下图所示:

4.2.2动态模型
面向对象设计方法的动态模型描述的是对象之间在系统运作过程中的动态关系。通过动态模型的建立,可以确立仿真系统基于对象的运转机制和控制结构。车辆对象是MITS仿真系统中的核心对象,整个仿真系统都是围绕着车辆对象的一系列行动进行的。以下分别介绍相应的动态模型。
1:描述车辆在路段中行驶的模型如下图所示:

对于正在路段上行驶的每一辆车来说,它在某一时刻的行为仅仅取决于它的下一个车格的状态,如果下游车格中有车,则当前车格中的车辆原地静止;如果下游车格中没有车,则当前车格中的车驶向下一个车格。
2:描述交叉路口处候车队列中的车辆转弯的模型如下图所示

对于停在候车队列中的车辆来说,只有当同时满足以下两个条件时,才能转换至下一个目标路段:信号灯为绿信,而且目标路段的首个车格是空的。
3:描述路段末端的车格中的车辆的行为选择的模型如下图所示:

通向交叉路口的路段由两部分组成:车格序列和候车道(包括直行候车道和左转候车道)。进入路段中的每一辆车,先是行驶在车格序列中,当邻近交叉路口的时候,就要开始选择是否需要进入候车道,以及应当进入哪一条候车道。如果这辆车将要右转弯,则无需进入候车道,只要右方的道路是空的,就直接向右转;如果这辆车将要直行或者是左转弯,那么就需要先进入相应的候车道,但这时的候车道必须有空的位置,否则就会产生堵车。
§4.3系统实现
4.3.1MITS系统仿真流程
MITS系统仿真流程图如下图所示:

4.3.2MITS系统输入
4.3.2.1转向数据库
当系统中的每一辆车要进行车道转换时,都需要先判断其转向,然后等待信号灯的信号变成与此一致的绿信时,才可以转换车道。对汽车判断转向,采用如下方法:建立一个转向数据库,将所有经过交叉路口的路线都作为一条记录,源路段和目标路段各自作为一个字段,这两个路段之间的转向关系(left,direct,right)存至第三个字段中。这样,当汽车需要判断转向时,就可以在这个数据库中进行检索,从而得知转向。
将本系统所用的道路交通图简化成如下图所示,并逐一予以编号:

与上图相对应的转向数据库如下表所示:


4.3.2.2初始输入数据库
鉴于仿真系统的输入数据量十分的庞大,若完全采用手工输入的方法,几乎是不可能的。所以采用了由程序根据随机函数自动生成的办法:首先,将所有可能出现的路线(本系统一共是72条路线)存放到一张表格里。然后,生成两个随机函数值。第一个随机函数值用于决定当前这一个系统入口在当前时刻是否应该产生汽车,如果这个数值大于设定的频率系数,那么就应该产生,反之则不产生;第二个随机函数的取值域均分成若干区域,不同的区域对应着不同的可选择路线。(尤其需要注意的是:不同的系统入口,可供选择的路线也不相同。)在此基础上,再利用时间循环和系统入口遍历循环,就可以生成初始输入数据库。具体流程图可见下图所示:

利用上法产生的部分初始数据记录如下表所示:

4.3.3MITS系统输出
为了便于分析与统计,MITS系统采取输出数据库的形式,凡是进入系统的每一辆车都唯一对应着一条记录,在这条记录中详细记录下了这辆车进入系统的时间以及驶离每一条所经路段时的时间。这样,当仿真结束的时候,就可以根据需要进行统计,得出所需结果。


