面向对象的分析过程
摘要
分析了面向对象技术应用于仿真领域的种种优点,亦即我们选择采用面向对 象的方法进行改造的原因。一些面向对象方法存在的不足。
关键词:仿真,面向对象,岸边集装箱起重机,训练器
面向对象的开发方法是以对象作为最基本的元素,它是分析问题、解决问题的核心。 面向对象=对象(Object)
+分类(classification) +继承(inheritance)
+通过消息的通信(communication with messages)
从下图中我们可以看出,面向对象的开发方法明显不同。
面向对象的仿真为仿真人员提供了开发模块化可重用的仿真模型的工具,它把系统看成由相互作用的对象所组成,而对象则往往表示现实系统中的真实实体。从而提高了仿真模型的可理解性、可扩充性和模块性,并且便于实现仿真与计算机图形和人工智能的结合。 采用面向对象的方法,原因如下: 1.可理解性
面向对象仿真对设计者、实现者,以及最终用户来说都改进了仿真的可理解性。因为仿真系统中的对象往往直接表示现实系统中的真实实体,这些实体在面向对象的仿真系统中可以用外观上类似于人们熟悉的实际系统的对象的图形或图像来表示,用户可以通过图形界面与仿真模型进行交互,利用图形或图像来直接建立仿真模型,这对于熟悉实际系统的用户来说是很容易理解的。
2.可重用性和可扩充性 在面向对象的仿真中,可以建立起一个模型库用以保存以前建立的模型,模型库中的模型可以作为建立新模型的可重用构件,通过面向对象技术内在的继承机制可以容易地和系统地修改现有的对象(类)以创建新的对象。并且可以加入现有的类库中。类库提供了仿真建模所需要的一般设施。通过修改现有的类,可以建立各种应用中所需要的特殊对象。 3.模块性
面向对象的仿真是模块化,特殊的过程来寻找相应的信息,不会影响其它的对象。 4.图形用户界面
对象作为模块,对象的所有信息都保存在该对象中,在面向对象的仿真系统中往往表示实际系统中的真实实体,因而在系统中可以用相似的图形或图像来表示,因此更便于建立非常直观的图形用户界面,用户可以直接在屏幕上建立系统的图形概念,直观地构造仿真模型。 5.仿真与人工智能的结合
在面向对象的仿真中,对象封装了它们的功能,而功能可以包含智能。因而利用人工智能和专家系统的方法可以在功能中嵌入智能,使对象也能具有决策和学习能力。仿真与人工智能的结合可以增强仿真的能力。在基于知识的仿真系统和专家仿真系统方面,许多学者己进行了广泛的研究,表明了人工智能和专家系统在辅助仿真建模、仿真结果的解释和仿真模型灵敏度分析等方面的重要作用。 6.并行仿真
由于对象封装了所有的信息,因而每个对象都能分配给自己的处理程序执行它的功能。这样,对象在某种程序上可以相对独立的运行。正是由于对象之间的这种相对独立性,产生了并行仿真执行的可能性。仿真的并行执行可以极大的降低仿真时间,允许仿真更多的对象,能够实现更详细的仿真。
3. 2面向对象的方法选择 3. 2. 1方法比较
八十年代末以来,随着面向对象技术成为研究的热点出现了几十种支持软件开发的面向对象方法。下面介绍几种经典的分析和设计方法:
1 .OMT/Rumbaugh
OMT(Object Modeling Technique)方法最早是由Loomis,Shan和Rumbaugh在1987年提出的,曾扩展应用于关系数据库设计。J. Runmbaugh在1991年正式把OMT应用于面向对象的分析和设计。这个方法是在实体关系模型上扩展了类、继承和行为而得到的。
OMT覆盖了分析、设计和实现三个阶段。OMT包括了一组定义的很好的并且相互关联的概念,他们是类(class)、对象(ob ject)、一般化(generalization)、继承(inheritance)、链(link)、链属性(link attribute)、聚合(aggregation)、操作(operation)、事件(event)、场景(scene)、属性(attribute)、子系统(subsystem)、模块(module)等。
OMT方法包含四个步骤:分析、系统设计、对象设计和实现。OMT定义有三种模型,这些模型贯穿于每个步骤,在每个步骤中被不断的净化和扩充。这三种模型是:
对象模型,用类和关系来刻画系统的静态结构。 动态模型,用事件和对象刻画系统的动态特性。
功能模型,按照对象的操作来描述如何从输入给出输出结果。
OMT是一种比较成熟的方法,用几种不同的观念来适应不同的建模场合。但应用所有的OMT技术来建立一个一致的模型是非常困难的,而且各阶段三个模型之间的关系也不是十分清晰。为建立一个一致的模型,OMT的许多概念和语义还需要形式的定义。
2. OOD/Booch
OOD(Object Oriented Design)方法是Grady Booch从1983开始研究,1991年后走向成熟的一种方法。Booch方法在面向对象的设计中主要强调多次重复和开发者的创造性。方法本身是一组启发性的过程式建议。方法并不依从硬性的条件限制,OOD的一般过程如下:
1)在一定抽象层次上标识类与对象。 2)标识类与对象的语义。 3)标识类与对象之间的关系。 4)实现类与对象。
这个过程是递归的。设计过程从发现类和对象,形成问题域的字典开始,直到不再发现新的抽象与机制,或者说,所有发现的类和对象己经可以由现有的复用类和对象实现
为止。
OOD为开发者提供了丰富的图形表示。从不同的侧面观察模型都可以获得模型在某一方面特性的丰富视图。OOD方法并不是一个开发过程,只是在开发面向对象系统时应遵循的一些技术和原则。OOD方法是从外部开始,逐步求精每个类直到系统被实现。它的缺点在于不能有效的找出每个对象和类的操作。
3. RDD/Wirfs一Brock
RDD(Responsibility-Driven Design)方法是Wirfs-Brock在1990年提出的。这是一个按照类、责任以及合作关系对应用进行建模的方法。RDD方法分为探索阶段和精化阶段。ftDD的设计规范主要包括:类层次图、合作图、类规范、子系统规范、合同规范。RDD是一种用非形式的技术和指导原则开发合适的设计方案的设计技术。寻找类及其特性的策略主要依赖设计者的个人技巧。RDD用交互填写CRC卡的方法完成设计,这对大型系统设计不太适用。RDD也引入了一些新的概念和技术,例如合同、子系统等,使得开发过程可以并发完成。
RDD采用传统的方法确定对象类,有一定的局限性。另外,均匀的把行为分配给类也是十分困难的。
4. GOAD/Coad一Yoordon
OOAD(Object-Oriented Analysis and Design)方法是由Peter Coad和Ed Yourdon在1991年提出的。这是一种逐步进阶的面向对象建模方法。OOA使用了基本的结构化原则,并把他们同面向对象的观点结合起来。OOA方法主要包括下面五个步骤:确定类与对象、标识结构、定义主题、定义属性、定义服务。其结果是结构化的图文挡。
模型自顶向下包括五个层次: 主题层(只有主题);
类与对象层(上层中加入类与对象): 结构层(上层中加入结构); 属性层(上层中加入属性); 服务层(上层中加入服务);
OOA没有特别的支持来刻画对象的动态特性。
OOA完成系统分析。OOD负责系统设计。OOD包括四个步骤: 1)设计问题域(细化分析结果);
2)设计人机交互部分(设计用户界面);
3)设计任务管理部分(确定系统资源的分配): 4)设计数据管理部分(确定持久对象的存储)。
OOA把系统横向划分为五个层次,OOD把系统纵向划分为四个部分,从而形成一个清晰的系统模型。
5.OOSE/Jacobson
OOSE(Object-Oriented Software Engineering)是Jacobson在1992年提出的一种用例驱动的面向对象开发方法。
每个用例都是使用系统的一条途径。用例的一个执行过程可以看作是用例的实例。系统开发是一个复杂的任务。通过在不同层次逐步构造模型可以控制这种复杂性。
OOSE开发过程中有五种模型,这些模型是自然过渡和紧密祸合的。包括:需求模型、分析模型、设计模型、实现模型、测试模型。DOSE是一种实用的面向对象的系统开发方法。
其中,Booch, Coad/Yourdon, OMT,和Jacobson的方法在面向对象软件开发界得到了广泛的认可。特别值得一提的是统一的建模语言UML (Unified Modeling Language),该方法结合了Booch, OMT,和Jacobson方法的优点,统一了符号体系,并从其它的方法和
工程实践中吸收了许多经过实际检验的概念和技术。UML现在是一个国际标准,它正在对象管理小组(Object Management Group)的指导下进行修订和扩展。准确的说,UML是面向对象分析与设计的一种标准表示。
3. 2. 2 UML及其工具介绍
UML作为用于创建系统的逻辑模型的一般语法,通常随着在分析和设计期间对各种要点的理解,来描述计算机系统。它独立于其他任何特定的目标语言、软件工程或工具,但它具有充分的一般性和灵活性,用用户定义的扩展能对其进行裁剪,以适合几乎所有的语一言、工具或过程需求。对我们使用者来讲,UML就是一组标准化了的标记模型、设计的符号。更具体的说,实际上就是一些图。所谓的使用UML描述设计,展现的就是一系列相互协调的图。UML共有五类九种图,最重要的就是四种图,也就是UML语法中最重要的四种模型:
1)用例图:用用例捕捉用户使用系统的方式。以用户和开发者能理解的方式,用这样的用例形成对计算机系统的需求的外在定义。
2)类图:用类图定义系统的静态结构模型。静态结构模型识别对象、类以及他们之间的关系。
3)交互图(通常为顺序图):用交互图捕捉功能需求。把他们用作工具,用以帮助决定怎样在类(对象)间分布支持用例所必需的功能。他们也可以作为一种机制,用一种方式把必需的系统功能映射到对象上,以产生在功能上的内聚的、可维护的、可复用的和可扩展的类。
4)状态(动态)图:用状态图捕获系统的动态视图。构成模型的状态图表示系统状态上的功能性依赖。从以对象为中心的观点(而不是以用例为中心的观点)来看,他们也表示系统的功能。这有助于进行详细设计,以确保对操作的条件限制进行正确地编码、对封装动态状态的类编码而言,这也体现了可维护性、内聚和健壮性。忽略了这点,整体上就丧失了对各个体的功能项的深入理解。 比较常用的两种UML工具分别是:Rational公司的Rose,一种是微软公司的
Vision Rose一度成为UML的代名词,但由于Visio和微软的Office套件的结合比较紧密,便于生成文档报告,后者更为流行。在“岸边集装箱起重机”训练器的仿真建模中我们应用Visio作为辅助工具。
3. 3用例建模
面向对象分析由三个步骤组成:
用例建模:用一个用例图(use-case diagram)和相关的情景形式表示这个信息。这个步骤有时称为功能建模,他在很大程度上是面向行为的。
类建模:确定类和他们的属性以及类之间的相互关系和交互作用。以类图的形式表示这个信息。这个步骤很大程度上是面向数据的。
动态建模:确定由每个类或子类发出的或对他们进行的行为(动作)。以状态图的形式表示这个信息。这个步骤是面向行为的。
第一步是收集用户的需求,用用例描述岸边集装箱起重机的工作情景。根据我们对现场的观察,相关资料的查阅,以及与用户的沟通,最终得到系统的用例图。
3.4面向对象的软件过程
软件工程过程规定了在获取、供应、开发、操作和维护软件时,要实施的过程、活动和任务。其目的是为各种人员提供一个公共的框架,以便用相同的语一言进行交流。这框架由几个重要的过程组成,这些主要过程包含获取、供应、开发、操作和维护软件所用的基本的、一致的要求。软件工程的开发过程可分为瀑布模型法、原型法、螺旋模型法、喷泉模型法等。
喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。迭代意味着模型中的开发活动常常需要多次重复,在迭代过程中,相关功能不断的随之加入演化的系统,完善软件系统。无间隙是指在分析、设计、实现等开发活动之间不存在明显的界限。也就是说,它不像瀑布模型那样,需求分析活动结束后刁’开始设计活动,设计活动结束后刁‘开始编码活动,而是允许各开发活动交叉、迭代地进行。这也体现了面向对象开发技术在缩短开发时间、降低开发费用方面的优越性。如图1-3描述了面向对象的开发过程。
图I-4则更为详细的描述了面向对象软件过程(OOSP)的生命周期,它由一系列过 程模式组成。