1、面向对象的建模技术面向对象的建模技术(OMT)以前,我们在用Fortran . C语言进行编程时实际上使用了 一种叫做面向过程的程序设计方法, 也就是所说的结构化方法。这种方法强调对系统功能进行抽象, 系统功能的实现是通过对若干个模块的调用来完成的。历史已经证明这种方法在降低软件开发成本、提高软件 生产率 方面是一次失败的尝试。为什么呢?客观世界是一个对象的世界, 人类对客观事物的认识又是一个由特殊到一般、一般到特殊的过程。而面向过程所能提供给我们的解决问题的方法却 是“后一步的设计要满足前一步的要求” o这种强调系统功能、一环套一环的设计方法使我们设计出 来的软件模块仅仅是满足了特定的需求,
2、并且在软件系统后期维护过程中它仅能给程序员提供很小的 活动空间。回首往事,除了仅有的几个数学函数外又有多少个所谓的模块可以真正地重用!又有多 少位软件工程师在为自己所做的“遗憾工程”感到惋惜!这 些主要是由于计算机求解的问题空间与解 题的方法空间不一致,两种空间的映射量太大!当然产生上述问题的最根本的原因还应是冯.偌伊 曼的计算机体系结构。面向对象的方法正是在上述背景下产生的。面向对象的方法认为:客观世界的问题都是由客观世界的实体及其相互Z间的联系构 成的。我 们把客观世界的实体称为问题对象,那么对彖都有自己的运动状态及运动规律,不同对彖之间的相 互作用和相互通信就构成了完整的客观世界。使用面
3、向对象的方法人们可以逐步去解决问题,而在 问题逐步深入过程中不必去重新修改前面已完成的设计工作。 由于采用了数据抽象和封装技术,面向对象的程序设计降低了各模块间的关联程度,这就相对减少了程序 员之间的相互影响。这项技术是在设计初期只由有很少的程序员介入的情况下,通过在对象系统中 建立一个高层次的通讯环境来实现的,它使得今后更改引起的成本大大降低。使用面向对象的方法详 细定义用户的数据类型,将它们封装在一起又可实现较高的代码利用率。当今,计算机产业正朝着分布式处理、并行处理、网络化和软件生产工程化发展,而面向对象 的方法是作为实施这些目标的关键技术之一。面向对象的方法中有一些重要的概念,它们是对
4、象、封装、继承和多态等。 对象就是人们所感兴趣的任何事物,它可以是有形的实体、某种作用及性能等。对彖都有其运动状态和运动 规律,因此对彖具有很强的表达能力和描述功能。对彖中包含数据和对数据操作的代 码,它实现了 数据和操作的结合。具有相同结构、操作并遵守相同约束规则的对彖的集合就是类。封装是一种而对外仅仅表 现为与其它封装体间的接口关系。封 是通过对象/类来实现封装的。继承用于描述类之 承使得程序员对共同的操作及属性只说明一次,并且 多态性指相同的语言结构可以代表不同类型的实体组织软件的方法,它的基本思想是把客观世界屮联系紧密的元素及相关操作组织在一起,构造具有独 立含义的软件实现,使其相互关
5、系隐藏在内部, 装的目的就是信息隐匿。在面向对象的方法屮, 间的共同性质,它减少了相似类的重复说明。继 在具体的情况下可以扩展细化这些属性及操作。或者对不同类型的实体进行操作。对于大多数面向对象的编程语言,在类的继承关系中有一种独特的 多态现彖,即如果类P是类S的父类,则子类S的一个对彖s可以用在父类P的一个对象p所使用的任 何地方。James Rumbaugh面向对彖的方法有很多种,这里所介绍的面向对象的建模技术是指等人所者的Object-Oriented Modeling and Design ”中谈到的OMT的方法。OMT是种通过模型来思考问题的方法,这些模型都是围绕着真实世界的概念建立
6、的。 OMT方法提供了一组面向对彖的概念及图形符号,然后利用这些概念及符号来分析需求、设计系统、实现,它适应于整个软件的开发过程。OMT方法是一种思考问题的方法, 而不仅仅是一种编程技术。由于面向对彖的地震物理模拟软件平台是采用 OMT方法设计的,所以这里对OMT方法2. 1建模的概念模型是为了对事物进行更好的理解而对事物本身所做的抽象。由于模型忽略了一些事物的非本 质属性,所以它比原来的事物更容易操纵。OMT的方法是从三个相关但体现系统不同方面的角度去对一个系统进行建模,得到的 三种模型分别是对象模型、动态模型和功能模型。每一种模型描述系统的一个方面。对象模型代表了 系统静态的结构。动态模型
7、代表了系统随时间变化的、行为的、控制的方面。功能模型代表了系统的功能的方面。这三种模型不是完全独立的,每一种模型都包含对其它模型的引用。系统也不是各独 立部分的 组合。这三种模型是随着开发过程不断演变的(从问题域屮的模型逐步演变为计算机域的模型一程序 实现)。在系统分析阶段,问题域的模型被创建,这时不用考虑实现;在系统设计阶段,解决方法 的一些结构要加到模型屮去;在实现阶段,问题域和解决方法的结构要实施 为代码。模型有两方面 的意义,一是用来理解问题域、理解系统,二是作为解题的方法。我们先来看看对象模型。2. 1. 1对象模型对象模型描述了系统的静态结构,它提供了系统屮的对象、对象之间的关系、
8、标识每一对象类的属性及行为等。在三种模型屮,对象模型是最重要的。在此将对彖模型的一些概念陈述 如下:对象一是一种概念、一种抽象,是问题域屮有着明确意义的事物。类一描述了一组具有相同属 性、行为、共同语法特征以及和其它对象有着相同联系的对象。属性一是对象拥有的数据值。行为一是一种功能,作用于对象。联系一是两个对象之间物理的或概念上的联系。关联一是两个类(问题域)之间的联系。聚合-聚合是一种特殊的关联, 它代表了部分-整体的关系。A聚合了 B,可以表示为A a, ” cA has a Bo继承一继承是共享类的相似点但同时保留差别的一种强有力的抽象手段。一个子类可以继承它的父类。A继承B,可以表示为
9、A “is a ” B。对象模型的内容要与求解的问题相关。图2.1.1为对象模型的图形符号记法。2. 1.2动态模型对于一个系统,我们首先了解它的静态结构,了解单一时刻的各对象的结构及它们之 间的关系;然后我们才是检查对象及其相互关系随时间发生的变化。 一个系统的关于时间和变化的方面就是动态模型。在此,将动态模型的一些概念陈述如下:状态-状态是对对象属性值和对象联系的一种抽彖。状态决定了对彖对外部事件激励所做成的反 应。一个状态一般伴随一个持续的 活动,状态对应一个时间段。事件-一个独立的从一个对象到另一个对象的激励叫事件。事件对应一个时间点、一个动作。对 象接收到一个事件,其下一个状态依赖于
10、当前的状态及其接收到的事件。图 2. 1. 1状态图一状态图是一个由事件和状态所组成的网络。它是一个图,其节点为状态,有 向弧为 标有事件名的转变。动态模型就是一个彼此共享事件、交互作用的状态图的集合。仅为那些具有动态行为的对彖类构造动态模 型。图2.1. 2为动态模型的图形符号记法。Event causes Transition between States :Event with Attributeeventevent ( attribute )一 Statel + State2 )In itial and Final States :Action on a Transition :eve
11、nt ( guard )严 / State-1 ” State-2 )event1 State! State Generalization :event2Class-3 Splitting ofcontrol :Synchroni zatio n of con trol :图 2. 1. 2213功能模型Data Store or File Object :功能模型描述了一个系统内的计算、功能 (确定了计算的结果,不考虑如何计算)。功能模型确定发生了什么,动态模型确定什么时候发生,对象模型决定了对谁发生。Data Flow between Processes : data name-仁Data
12、 Flow that Results in a Data Store :功能模型包含了众多的数据流图,用以表明数据的流动、从外部输入、通过操作、内部的数据 存储以及数据的输出。功能模型只能指示可能的功能计算路径,它不能确定哪一条路径实际发生。 功能模型没有显示系统的控制信息和对象结构信息。在此,将功能模型的一些概念陈述如下:处理过程:处理转变数据值,低层次的处理就是一个纯粹的函数。数据流:数据流连接一个对象或处理的输出到另一个对象或处理的输入。它代表一个 计算的中 间数据值。在数据流上的数据是不改变的。行动者:行动者是一个通过产生或消费数据而驱动数据流的活动对象。行动者与数据 流图的输 入和输
13、出相连。数据仓库:数据仓库是数据流图中为了以后的应用而存储数据的对象。控制流:一个裁决映象了一个或多个处理的执行,这是动态模型的控制方面的问题。将裁决信息包含在功能模型中,这样可以显示出数据的依赖性。在数据流图中的控制流专门负责这方 面的问题。控制流是一个布尔函数值,它影响了哪一个处理被执行。数据流图:数据流图显示了一个系统计算各值间的函数关系,包括输入值、输出值和内部的数 据存储。功能模型包含了众多的有明确操作意义和约束条件的数据流图 DFDo图2.1.3为功能模型的图形符号记法。2.1.4对象模型、动态模型和功能模型之间的关系对于功能模型:对象模型显示了处理的结构、数据仓库和功能模型中的数
14、据流;动态模型显示 了处理执行的顺序。对于对象模型:功能模型显示了类的操作和每一操作的参数,它也显示了各类之间的关系;动 态模型显示了每一对象的状态以及接收事件、状态改变所执行的操作。对于动态模型:功能模型定义了在动态模型中没有定义的原子动作和活动;对象模型显示了什 么改变了状态、什么经历了操作。每一种模型都集中描述系统的一个特定的方面,而对其它的方面没有解释。虽然对于不同类型 的系统三种模型的重要程度是不同的,但对于全面理解一个问题,三种模型都是必要的。2. 2设计方法学软件工程一个通过使用预定义的技术和符号约定、组织生产软件的过程。这个过程一般被表述 为一系列的阶段,这些阶段组成一个完整的
15、软件的生命周期,它包括从问题声明开始,到分析、设 计、实现、测试,还有维护与升级。0MT方法作为一种软件工程的方法,它支持整个软件的生命周期。但对于测试与维护,0MT的 方法同其它软件工程方法区别不大,这里暂不介绍。0MT方法包括以下几个阶段:分析一分析阶段最开始的工作是问题声明。问题声明描述了要解决 的问题,提供了推荐系统的总体概念。然后是与用户及真实世界的背景知识交流。分析阶段的成果 是得到了捕获系统三个方面的形式模型。系统设计一该阶段确定系统的总体结构。对象设计一该阶段将分析的模型细化,然后产生一个 实际的设计。在对象设计阶段,有一个从应用域概念到计算机域概念的转变。下面就简要介绍一下各
16、阶段的工作方法。2. 2. 1分析分析是0MT方法的第一个阶段,它涉及设计一个精确的、可理解的、准确的、 形式的、概念的、关于真实世界的模型,它澄清了需求,为系统的设计和实现提供了框架。1.写或得到一份原始的问题声明。2.建立对象模型*确认对象类*准备一个数据字典,包括对类、属性和关联的描述。*增加类之间的关联。*为对象和联系增加属性。*用继承组织和简化对象类。*检测路径,迭代上述过程。*将类分组形成模块。=二 对彖模型二对象模型图+数据字典。3.建立动态模型*确认系统屮典型的需要交互的情况(广义和狭义的交互方式)。*识别对象间的事件。*为每一个交互的情况准备事件足迹图。*准备系统的全局事件流
17、图。*根据每一对象的事件足迹图建立状态图。*为校验一致性匹配对彖间的事件。二= 动态模型二状态图+全局事件流图。4.建立功能模型*确定输入和输岀值。*用数据流图表示功能依赖关系。*描述每一个功能做什么。*确定约朿和优化标准。=二 功能模型二数据流图+约束。5.校验、迭代和精炼三种模型*增加在动态模型、功能模型屮发现的操作到对象模型中。*校验类、关联、属性和操作的一致性和完备性。将这三种模型与问题声明及相关问题域知识 做比较。*重审问题声明,迭代上述过程一直到分析结束。=二 分析文档二问题声明+对彖模型+动态模型+功能模型。2. 2.2系统设计系统体系结构是系统总体的组织结构。存在一些常用的共同
18、的系统结构,每一种结构适应于一 种类型的应用。不同类型的体系结构将重点放到不同的模型上。系统设计是解决问题并建立求解的高层策略,它包括将系统分为一些子系统、将子系统分配给 适当的硬件和软件分量和组成框架的概念和策略。1.将系统分解为一些子系统。2.确定问题内在的并发性。3.分配子系统给适当的处理机和任务。4.选择实施数据仓库的策略。5.确定全局资源和对它们的存取机制。6.选择实施软件控制的方法(主要从动态模型中获得控制结构)。7.考虑边界条件。8.建立优先级。=二 系统设计文档二系统基本的体系结构+高层策略。2. 2.3对象设计对象设计阶段确定了实施中用到的类和关联的全部定义,以及用于实施的方
19、法的接口和算法,这时为了实施和优化数据结构和算法要增加一些内部对象。 在OMT方法屮,模型符号记法跨越分析、设计和实施阶段。设计阶段开始了一个转变,即从面向真实世界的分析模型到面向计算机求解的具体实施。1.从其它模型中为对象模型获得操作。*在功能模型的处理中找操作。*根据控制的实施,为每一个动态模型中的事件定义操作。2.为实施的操作设计算法。*选择算法一最小成本的实施。*选择合理的数据结构。*如果必要,定义新的类和操作。3.优化数据存取。*为增加方便性和减少存取成本引入冗余关联。*为效率重新安排计算。*保留导出属性一减少计算。4.实施软件控制。5.调整类结构以增加继承。6.实施关联。7.确定对
20、象属性表征。8.将类与关联分成一些模块。=对彖设计文档二详细对彖模型+详细动态模型+详细功能模型。2. 3 从设计到实施写代码是设计阶段的扩展。写代码实际上是很机械的,因为所有困难的裁决在设计阶段已经完 成了。代码应是从设计到特定语言的简单翻译。在编码阶段也要做一些裁决。因为程序代码是问 题解决的最终体现,所以程序的风格对于可维护性及可扩展性是很重要的。我们可以用任何一种语言来实施设计。任何一种语言,无论是面向对象的 (C+、Eiffer Smalltalk等)还是非面向对象的(C、Pascal等)都是一种工具,可以被使用得很好,也可能被 用得很差。面向对象编程大大改善了程序的表达能力,但同时
21、也增加了混乱的可能性(如果你是一 个粗心的程序员)。好的程序需要纪律,要坚持好的编程风格。考虑多方面的因素,我们的开发工 具采用的是 C+,具体来说是Visual C+5. 0 for Windows NT C+寸面向对象概念的支持是比较彻底的, C+中与面向对象有关的特征为:类和数据圭寸装,结构作为一种特殊的类,构造函数和析构函数,类的私有、保护和公有部分,对象和消息,友元,类中运 算符及函数名重载,派生类,虚拟函数等。当主要关心的问题是对持久数据的存储,而不是对数据的操作时,那么数据库是实施的有效形 式。数据库主要的焦点在于数据库的结构和对数据的约束。数据库的命令主要是对数据库某一数据 集
22、合的操作,这其中包含着高度的并发性,而传统语言大多数都是串行的。数据库体系结构的基本 部分之一就是提供并发的数据操作。前面我们谈到0MT是认识事物的方法,所以它不仅仅应用于软件的设计, 它也可以被应用于硬件的设计、知识库的设计和商业企业建模。由于实施与具体的开发环境及语言紧密相关,这 里就不做介绍了。OMT方法并不是最新的方法,一种叫做 UML ( Unified Modeling Language )的方法目前可能已经成为了面向对象的工业标准。由于资料获取及其它各方面的原因,本文并没有采用UML UML的出现并不意味着OMT的过时。UML也是以OMT为基础产生的,OMT方法已成功 地应用于很多大型的软 件项目中。在计算机领域,最新的技术不一定就是最成熟、最完善的技术。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1