第7章面向对象的仿真技术
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
具体的,可以被抽象成类型。对象是具体的,是其抽象体种
类的实现。应用域的实体可以在解决域中找到其相对应的对
象。同样,类型也可以找到其相对应的种类。面向对象的方
法明确地规定其设计是从对应用中实体的研究开始的,然后
在解决域中求出种类,再进行编程。这是一个十分严谨的设
计过程。
❖ 7.2.3 面向对象方法的规范性
❖
.设计中先产生各式各样的部件,然后由部件组成框架,
以至于到整个应用程序;
❖
.由面向对象技术设计出来的过程软件具有易重复使用、
易改进、易测试、易维护和易扩充的特性。
❖ 如果说应用的设计和开发可以分为需求分析、 设计和开发三个阶段。则面向对象的方法不仅仅是 一个具体的开发工具或者是一种设计手段,实际上 它更是一种方法论上的指导思想,它贯穿于整个从 分析——设计——开发的全过程,而所有的工具和 支持环境等等都只是辅助手段。
由于对象中的数据是私有的,所以要想访问其数据的唯一方式是向该对
象发送消息,让对象选择自身相应的过程运行,以完成对该数据的访问。
❖ 7.3.2 类(Class)
❖
将具有某种相同属性和操作的对象组成一组,进行统一的说明和实现,即称
为类。因此,类是对象的抽象数据类型,对象是类的一个实例。面向对象的方法
提出了类的概念,显著地减少了开发工作量,避免了重复说明。人们认识事物时,
❖
从程序设计的角度来看,对象的概念设计是现实世界中
实体在程序设计时的抽象化。状态(数据)与操作(过程)是对
象的两个组成部分。比如一盏灯,如果我们把它看作一个研
究的对象,那么开着或关着(即亮或灭)就是灯的两个状态,
而开灯或熄灯就是灯的两个操作。面向对象的抽象设计与目
前人们所熟悉的面向过程的程序设计思想主要差别就在于:
做解决域,就是我们的解决问题的全部范围。面向对象的
方法在对应用域进行需求分析时寻找的是实体,这些实体
最终被抽象成类型。这段文字可以用图7.5来描述。
❖
图7.5中的实体、类型、对象和种类的概念都是指一组
实体、一组类型、一组对象及一组种类这样的概念。虚线箭
头表示具有一定的关系,实线箭头表示抽象的概念。实体是
❖
从图7.6中可以看出,需求分析和设计是重叠的。设计和实现是重
叠的。也就是说,面向对象方法在需求分析中产生出来的类型和种类可
以直接在设计中使用。而编程时可以直接使用设计中产生出来的种类。
❖
我们可以在面向对象方法设计过程中看到其中的重叠现象:
❖ (1)在应用域中确定实体。
❖ (2ቤተ መጻሕፍቲ ባይዱ确定实体的属性和特性。
❖
类实现是实现类说明功能的详细过程和方法。它往往由系统开发人员研制,
用户不必了解,也就是隐藏了详细实现的全部细节。这就是面向对象方法的信息
总是把事物通过分类而体系化,而面向对象方法中的类便相当于人的这种分类。
❖
类由“类说明”和“类实现”两大部分组成。
❖
类说明统一描述类的属性(数据),应遵守的约束规则,以及可执行的操作等,
以便使用户了解类的具体作用和功能。也可由用户根据需要自己定义和声明类中
应具有的功能。类说明部分是用户使用面向对象方法必须了解的。有三种声明形
在面向过程的程序设计中,程序体现的是一种信息处理过程,
它与数据的内在联系被人为地割裂了,而面向对象的方法则
保持了对象的完整性。
❖
我们在上面提到,不同的人在相同的应用问题上,运用
结构化方法可以产生不尽相同的结果。这种现象在面向对象
法中会得到很好的限制。越到开发的底层,这种限制越明显。
❖ 7.3 面向对象的主要术语
式:私有的(private)、保护的(protect)和公有的(public)。
❖
私有部分通常定义基本数据类型的数据结构(属性),同时也定义只能在本类
的内部可以访问的方法。这些方法通常用作支持公有部分的实现。
❖
保护部分定义的数据和方法除了从这个类中派生的子类外,在这个类外面不
能被访问,它兼顾了类的继承性和封装性。
决问题时,以对象作为基本元素,去构造所要研究的系统模型。显然,
面向对象的方法十分符合人的认识规律。因而易于被人们所理解与接受。
❖
面向对象这一术语来自于60年代推出的Simula仿真语言,
但其概念可以追溯到40年代末人们利用数学仿真作为分析工
具时的“类(C1ass)”的概念。后来面向对象方法的应用范围
❖ 结构化设计方法还存在着另一方面的问题。仍 然以上述字处理软件为例,软件中各个模块需要解 决许多相同的问题,例如,在各种文体和图形的建 立过程中,甚至显示、打印中,都需要解决颜色问 题。虽然可以考虑把颜色问题作为一个单独的模块 来处理,但实际设计却存在与众多模块接口格式的 统一问题。因此,实际设计时,往往不得不在各个 模块中分别设计颜色处理子模块。由此可见,结构 化设计方法往往存在着大量冗余代码的问题。
❖ 我们已经看到了面向对象方法在设计思想和方法上从 一开始就提供了十分明确的规范。这种严谨的规范始终贯 穿整个面向对象方法的三个步骤:需求分析、结构设计和 实现。面向对象方法中从具体到抽象及从应用域到解决域 的这种极强的一一对应的解答现象在其他方法中是没有的。 它把从需求分析、设计和实现这三个过程完整地、有机地、 紧密地结合在一起了。我们可以用图7.6来描述这个现象。
❖ 7.2 面向对象的设计思想
❖
面向对象技术的一大特点是它比其他方法更加抽象化和
更具有对应性。面向对象的抽象技术是从非常具体到抽象的,
而且非常规范。这种抽象技术最基本的特征是它存在于实际
应用需求的术语、资源和抽象中。
❖ 面向对象技术在解决实际问题时是从一个具体的实体着 手,它通过找术语的方法找出需要研究的实体,然后去研究 每个实体的属性、特征和功能。而其他方法则从一开始就着 眼于产品的最终解决方案,或者是产品的开发。
❖
所谓面向对象是指着眼于对象的一种方法,也就是把现实世界模型
化的一种方法。众所周知,现实世界是由许多事物(对象)构成的,事物
之间通过互相发出消息进行联系。因此,面向对象是不以控制为中心,
而是以事物(对象)的属性与行为为中心来考察问题,并使之能在计算机
上进行处理的一种体系。
❖
这里的“事物”不仅指人、机器等物理实体,还包括“库存表”、
❖ 而面向对象方法在解决问题的一开始就和其他的涉及方 法不同。面向对象方法认为其他的方法在开始解决问题之前, 缺少了一个十分重要的步骤。也就是首先应该问的问题是 “做什么”,而不是“怎样做”,第二步才是“怎样做”。 面向对象正是在发现“做什么”的指导思想下在需求分析中 提炼解决问题的对象。面向对象把其抽象法具体到实际的应 用中去就形成了找名词、动词等等这些十分具体和规范的技 术步骤。由于分析实体的属性、功能是很具体的,这也导致 了面向对象法是从小到大,而结构化是从大到小;面向对象 法是自下而上,而结构法是自上而下。在面向对象方法中第 一件要做的事是找实体。所以,我们也可以说,面向对象法 比结构化方法和其他方法更加接近真实的世界。
护和改进越来越困难,问题成几何级数地增长。使用了面向
对象技术会使软件开发周期变短,开发的软件使用周期变长,
最终导致开发费用降低。
❖ 使用面向对象技术之所以能达到这样的效果,在于它具 有以下几个特点:
❖
.从应用设计到解决方案更加抽象化,而且具有极强的
对应性;
❖
.在设计中容易和客户沟通;
❖
.把信息和操作封装到对象里去;
❖ 7.3.1 对象(Object)
❖
一个对象由私有数据及其一组操作组成。对象的动作取决于发送给
该对象的消息表达式。消息表达式告诉对象要求完成的功能(what to
do)。对象首先根据对象名字选择相应的操作,执行该操作后再将控制返
回给引用者(消息发送者)。
❖
这表明对象具有某种“知道”如何完成相应消息操作(how to do)的
“职工名单”等逻辑实体。人们在现实生活中,为应付现实世界的复杂
性,已逐渐形成了很强的对客观事物概括分类和抽象的能力。在我们的
词汇中,几乎每个名词都是一类对象,都含有一组属性和行为特性。面
向对象的方法正是利用了我们对事物的分类和抽象的这样一种自然倾向,
将我们感兴趣的或要研究的事物及概念都统称为对象。在分析问题和解
❖ 7.2.2 面向对象的设计思想
❖
结构化方法把视野集中在对一个产品的解决方案和实
施上,而面向对象的方法则采用了完全不同的途径,其抽
象技术把焦点集中在存在于应用世界的术语、资源以及抽
象中。换句话说,面向对象的方法比其他方法更接近于真
实世界。
❖
从概念上讲,面向对象方法把设计分成两个层次:一
个叫做应用域,也就是我们要研究的问题范围;另一个叫
❖ 我们知道,一个系统的成功与否很大程度上取决于其对 应用需求的抽象是否恰当。如果两人同时对同样的应用进行 开发,结果是可以抽象出两种不尽相同的模型。例如一个字 处理软件的开发,采用结构化方法可以得到如图7.3的设计 结构。但是对于另外的设计者,可能认为“输入”与“修改” 功能非常相关,“显示”与“打印”功能只是输出到不同的 设备,“存储”与“读取”是互相制约的互逆过程,因此会 得出与图7.3的完全不同的设计结构图7.4。由此可以看出, 结构化设计方法是一种不规范的设计方法。
逐渐扩展到了系统分析、软件开发、程序设计以及数据库技
术等各个方面。特别是进入90年代以后,面向对象技术已经
比较成熟,由于它解决了传统的面向过程的结构化软件设计
方法所面临的许多困难,因此得到了越来越广泛的应用。
❖
软件危机是面向对象方法得以迅速发展的主要动因。而
造成软件危机的主要原因是软件越来越复杂,越来越大,维
❖ (3)确定实体间的关系。
❖ (4)从实体中建立面向对象方法语言的设计结构。
❖ (5)编程。
❖ (6)调试。
❖ (7)测试
❖
其中,第(2)步和第(3)步包含了需求分析和设计的重叠部分,第(4)
步和第(5)步包含了设计和编程的重叠部分。
❖ 7.2.4 面向对象方法与结构化方法在设计思想上的差异
❖
不管采用何种设计方法,成功的关键在于对应用的深刻
理解。在应用面向对象方法作设计时,我们需要有一个详细
的需求分析报告。这和其他的设计方法的要求是相同的。但
是,在有了需求分析后,其他的方法在开始解决问题时,在
设计思想和设计方法上就存在着缺陷:一是难于对一个复杂
问题进行分解;二是可以用多种方法来设计。也就是说结构
化方法的设计思想和方法,没有一个很好的规范。前面,我
智能功能。传统语言的程序设计员也许对此不甚了解,但这正是对象风
格与传统语言的操作符/操作数风格之间的不同之处。传统语言的操作数
据是被动地等待相应的操作去处理,但对象是个主动的数据实体,其中
封装了一组在该数据上的操作,所以对“对象”和传统的“数据”的使
用方式也不同。我们可以用函数来调用数据,但不能调用对象中的数据。
❖ 下面,我们通过比较传统的结构化设计方法和面向对象 技术的设计方法的不同,进而更好地理解面向对象方法的设 计技术。
❖ 7.2.1 结构化方法的设计思想
❖
结构化方法在设计时是从产品的应用着手,把应用分成不同的子系
统,再把子系统分成许多模块,最后把模块分成许许多多的函数。它是
一种从上到下、从大到小的设计方法。我们可以用图7.1表示结构化方法
们已经看到了面向对象方法在应用域和解决域的规范的严谨
性。这种严谨的规范也存在于面向对象方法解决问题的开始。
❖ 面对一个应用问题,结构化方法首先做的是怎 样分解子程序、模块等等。如果我们所面对的应用 是一个很复杂的问题,可能子程序还可以分成子程 序,模块还可以套子模块,解决方案可能变得很复 杂。前面已经提到过,怎么去做一个复杂的应用, 涉及经验和对问题进行抽象的能力,用一句话说, 结构化方法在于着手解决问题时首先考虑的是“怎 样做”。
的设计思想。
❖
设计中的每一个模块(包括子系统、模块、函数等各级)
可以看作是一个如图7.2的“黑箱”,其他模块通过输入
接口给“黑箱”一定的输入,“黑箱”在输出接口产生期
望的输出。黑箱内的过程对黑箱外是完全封闭的,系统中
的其他部分不需要干预和知道黑箱内是如何工作的。该方
法有助于各个模块较为独立的设计。
第7章 面向对象的仿真 技术
面向对象(0bject—0riented)的仿真技 术是当前仿真领域最新的研究方向之一,特 别是对大型的、复杂的仿真系统,面向对象 的仿真技术为系统开发的需求分析、结构设 计、软件实现三个阶段都提供了一种更加自 然的描述模式,并且提供了非常规范的设计 方法。
❖ 7.1 什么是面向对象方法