欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第7章面向对象的仿真技术精选文档.ppt

    • 资源ID:47956010       资源大小:2.25MB        全文页数:51页
    • 资源格式: PPT        下载积分:18金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要18金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第7章面向对象的仿真技术精选文档.ppt

    第7章面向对象的仿真技术本讲稿第一页,共五十一页v71 什么是面向对象方法v 所谓面向对象是指着眼于对象的一种方法,也就是把现实世界模型化的一种方法。众所周知,现实世界是由许多事物(对象)构成的,事物之间通过互相发出消息进行联系。因此,面向对象是不以控制为中心,而是以事物(对象)的属性与行为为中心来考察问题,并使之能在计算机上进行处理的一种体系。v 这里的“事物”不仅指人、机器等物理实体,还包括“库存表”、“职工名单”等逻辑实体。人们在现实生活中,为应付现实世界的复杂性,已逐渐形成了很强的对客观事物概括分类和抽象的能力。在我们的词汇中,几乎每个名词都是一类对象,都含有一组属性和行为特性。面向对象的方法正是利用了我们对事物的分类和抽象的这样一种自然倾向,将我们感兴趣的或要研究的事物及概念都统称为对象。在分析问题和解决问题时,以对象作为基本元素,去构造所要研究的系统模型。显然,面向对象的方法十分符合人的认识规律。因而易于被人们所理解与接受。本讲稿第二页,共五十一页v 面向对象这一术语来自于60年代推出的Simula仿真语言,但其概念可以追溯到40年代末人们利用数学仿真作为分析工具时的“类(C1ass)”的概念。后来面向对象方法的应用范围逐渐扩展到了系统分析、软件开发、程序设计以及数据库技术等各个方面。特别是进入90年代以后,面向对象技术已经比较成熟,由于它解决了传统的面向过程的结构化软件设计方法所面临的许多困难,因此得到了越来越广泛的应用。v 软件危机是面向对象方法得以迅速发展的主要动因。而造成软件危机的主要原因是软件越来越复杂,越来越大,维护和改进越来越困难,问题成几何级数地增长。使用了面向对象技术会使软件开发周期变短,开发的软件使用周期变长,最终导致开发费用降低。本讲稿第三页,共五十一页v 使用面向对象技术之所以能达到这样的效果,在于它具有以下几个特点:v 从应用设计到解决方案更加抽象化,而且具有极强的对应性;v 在设计中容易和客户沟通;v 把信息和操作封装到对象里去;v 设计中先产生各式各样的部件,然后由部件组成框架,以至于到整个应用程序;v 由面向对象技术设计出来的过程软件具有易重复使用、易改进、易测试、易维护和易扩充的特性。本讲稿第四页,共五十一页v 如果说应用的设计和开发可以分为需求分析、设计和开发三个阶段。则面向对象的方法不仅仅是一个具体的开发工具或者是一种设计手段,实际上它更是一种方法论上的指导思想,它贯穿于整个从分析设计开发的全过程,而所有的工具和支持环境等等都只是辅助手段。本讲稿第五页,共五十一页v72 面向对象的设计思想v 面向对象技术的一大特点是它比其他方法更加抽象化和更具有对应性。面向对象的抽象技术是从非常具体到抽象的,而且非常规范。这种抽象技术最基本的特征是它存在于实际应用需求的术语、资源和抽象中。v 面向对象技术在解决实际问题时是从一个具体的实体着手,它通过找术语的方法找出需要研究的实体,然后去研究每个实体的属性、特征和功能。而其他方法则从一开始就着眼于产品的最终解决方案,或者是产品的开发。v 下面,我们通过比较传统的结构化设计方法和面向对象技术的设计方法的不同,进而更好地理解面向对象方法的设计技术。本讲稿第六页,共五十一页v721 结构化方法的设计思想v 结构化方法在设计时是从产品的应用着手,把应用分成不同的子系统,再把子系统分成许多模块,最后把模块分成许许多多的函数。它是一种从上到下、从大到小的设计方法。我们可以用图7.1表示结构化方法的设计思想。本讲稿第七页,共五十一页v 设计中的每一个模块(包括子系统、模块、函数等各级)可以看作是一个如图72的“黑箱”,其他模块通过输入接口给“黑箱”一定的输入,“黑箱”在输出接口产生期望的输出。黑箱内的过程对黑箱外是完全封闭的,系统中的其他部分不需要干预和知道黑箱内是如何工作的。该方法有助于各个模块较为独立的设计。本讲稿第八页,共五十一页v 我们知道,一个系统的成功与否很大程度上取决于其对应用需求的抽象是否恰当。如果两人同时对同样的应用进行开发,结果是可以抽象出两种不尽相同的模型。例如一个字处理软件的开发,采用结构化方法可以得到如图73的设计结构。但是对于另外的设计者,可能认为“输入”与“修改”功能非常相关,“显示”与“打印”功能只是输出到不同的设备,“存储”与“读取”是互相制约的互逆过程,因此会得出与图73的完全不同的设计结构图74。由此可以看出,结构化设计方法是一种不规范的设计方法。本讲稿第九页,共五十一页本讲稿第十页,共五十一页本讲稿第十一页,共五十一页v 结构化设计方法还存在着另一方面的问题。仍然以上述字处理软件为例,软件中各个模块需要解决许多相同的问题,例如,在各种文体和图形的建立过程中,甚至显示、打印中,都需要解决颜色问题。虽然可以考虑把颜色问题作为一个单独的模块来处理,但实际设计却存在与众多模块接口格式的统一问题。因此,实际设计时,往往不得不在各个模块中分别设计颜色处理子模块。由此可见,结构化设计方法往往存在着大量冗余代码的问题。本讲稿第十二页,共五十一页v722 面向对象的设计思想v 结构化方法把视野集中在对一个产品的解决方案和实施上,而面向对象的方法则采用了完全不同的途径,其抽象技术把焦点集中在存在于应用世界的术语、资源以及抽象中。换句话说,面向对象的方法比其他方法更接近于真实世界。v 从概念上讲,面向对象方法把设计分成两个层次:一个叫做应用域,也就是我们要研究的问题范围;另一个叫做解决域,就是我们的解决问题的全部范围。面向对象的方法在对应用域进行需求分析时寻找的是实体,这些实体最终被抽象成类型。这段文字可以用图75来描述。本讲稿第十三页,共五十一页本讲稿第十四页,共五十一页v 图75中的实体、类型、对象和种类的概念都是指一组实体、一组类型、一组对象及一组种类这样的概念。虚线箭头表示具有一定的关系,实线箭头表示抽象的概念。实体是具体的,可以被抽象成类型。对象是具体的,是其抽象体种类的实现。应用域的实体可以在解决域中找到其相对应的对象。同样,类型也可以找到其相对应的种类。面向对象的方法明确地规定其设计是从对应用中实体的研究开始的,然后在解决域中求出种类,再进行编程。这是一个十分严谨的设计过程。本讲稿第十五页,共五十一页v723 面向对象方法的规范性v 我们已经看到了面向对象方法在设计思想和方法上从一开始就提供了十分明确的规范。这种严谨的规范始终贯穿整个面向对象方法的三个步骤:需求分析、结构设计和实现。面向对象方法中从具体到抽象及从应用域到解决域的这种极强的一一对应的解答现象在其他方法中是没有的。它把从需求分析、设计和实现这三个过程完整地、有机地、紧密地结合在一起了。我们可以用图76来描述这个现象。本讲稿第十六页,共五十一页本讲稿第十七页,共五十一页v 从图76中可以看出,需求分析和设计是重叠的。设计和实现是重叠的。也就是说,面向对象方法在需求分析中产生出来的类型和种类可以直接在设计中使用。而编程时可以直接使用设计中产生出来的种类。v 我们可以在面向对象方法设计过程中看到其中的重叠现象:v(1)在应用域中确定实体。v(2)确定实体的属性和特性。v(3)确定实体间的关系。v(4)从实体中建立面向对象方法语言的设计结构。v(5)编程。v(6)调试。v(7)测试v 其中,第(2)步和第(3)步包含了需求分析和设计的重叠部分,第(4)步和第(5)步包含了设计和编程的重叠部分。本讲稿第十八页,共五十一页v724 面向对象方法与结构化方法在设计思想上的差异v 不管采用何种设计方法,成功的关键在于对应用的深刻理解。在应用面向对象方法作设计时,我们需要有一个详细的需求分析报告。这和其他的设计方法的要求是相同的。但是,在有了需求分析后,其他的方法在开始解决问题时,在设计思想和设计方法上就存在着缺陷:一是难于对一个复杂问题进行分解;二是可以用多种方法来设计。也就是说结构化方法的设计思想和方法,没有一个很好的规范。前面,我们已经看到了面向对象方法在应用域和解决域的规范的严谨性。这种严谨的规范也存在于面向对象方法解决问题的开始。本讲稿第十九页,共五十一页v 面对一个应用问题,结构化方法首先做的是怎样分解子程序、模块等等。如果我们所面对的应用是一个很复杂的问题,可能子程序还可以分成子程序,模块还可以套子模块,解决方案可能变得很复杂。前面已经提到过,怎么去做一个复杂的应用,涉及经验和对问题进行抽象的能力,用一句话说,结构化方法在于着手解决问题时首先考虑的是“怎样做”。本讲稿第二十页,共五十一页v 而面向对象方法在解决问题的一开始就和其他的涉及方法不同。面向对象方法认为其他的方法在开始解决问题之前,缺少了一个十分重要的步骤。也就是首先应该问的问题是“做什么”,而不是“怎样做”,第二步才是“怎样做”。面向对象正是在发现“做什么”的指导思想下在需求分析中提炼解决问题的对象。面向对象把其抽象法具体到实际的应用中去就形成了找名词、动词等等这些十分具体和规范的技术步骤。由于分析实体的属性、功能是很具体的,这也导致了面向对象法是从小到大,而结构化是从大到小;面向对象法是自下而上,而结构法是自上而下。在面向对象方法中第一件要做的事是找实体。所以,我们也可以说,面向对象法比结构化方法和其他方法更加接近真实的世界。本讲稿第二十一页,共五十一页v 从程序设计的角度来看,对象的概念设计是现实世界中实体在程序设计时的抽象化。状态(数据)与操作(过程)是对象的两个组成部分。比如一盏灯,如果我们把它看作一个研究的对象,那么开着或关着(即亮或灭)就是灯的两个状态,而开灯或熄灯就是灯的两个操作。面向对象的抽象设计与目前人们所熟悉的面向过程的程序设计思想主要差别就在于:在面向过程的程序设计中,程序体现的是一种信息处理过程,它与数据的内在联系被人为地割裂了,而面向对象的方法则保持了对象的完整性。v 我们在上面提到,不同的人在相同的应用问题上,运用结构化方法可以产生不尽相同的结果。这种现象在面向对象法中会得到很好的限制。越到开发的底层,这种限制越明显。本讲稿第二十二页,共五十一页v73 面向对象的主要术语v731 对象(Object)v 一个对象由私有数据及其一组操作组成。对象的动作取决于发送给该对象的消息表达式。消息表达式告诉对象要求完成的功能(what to do)。对象首先根据对象名字选择相应的操作,执行该操作后再将控制返回给引用者(消息发送者)。v 这表明对象具有某种“知道”如何完成相应消息操作(how to do)的智能功能。传统语言的程序设计员也许对此不甚了解,但这正是对象风格与传统语言的操作符/操作数风格之间的不同之处。传统语言的操作数据是被动地等待相应的操作去处理,但对象是个主动的数据实体,其中封装了一组在该数据上的操作,所以对“对象”和传统的“数据”的使用方式也不同。我们可以用函数来调用数据,但不能调用对象中的数据。由于对象中的数据是私有的,所以要想访问其数据的唯一方式是向该对象发送消息,让对象选择自身相应的过程运行,以完成对该数据的访问。本讲稿第二十三页,共五十一页v732 类(Class)v 将具有某种相同属性和操作的对象组成一组,进行统一的说明和实现,即称为类。因此,类是对象的抽象数据类型,对象是类的一个实例。面向对象的方法提出了类的概念,显著地减少了开发工作量,避免了重复说明。人们认识事物时,总是把事物通过分类而体系化,而面向对象方法中的类便相当于人的这种分类。v 类由“类说明”和“类实现”两大部分组成。v 类说明统一描述类的属性(数据),应遵守的约束规则,以及可执行的操作等,以便使用户了解类的具体作用和功能。也可由用户根据需要自己定义和声明类中应具有的功能。类说明部分是用户使用面向对象方法必须了解的。有三种声明形式:私有的(private)、保护的(protect)和公有的(public)。v 私有部分通常定义基本数据类型的数据结构(属性),同时也定义只能在本类的内部可以访问的方法。这些方法通常用作支持公有部分的实现。v 保护部分定义的数据和方法除了从这个类中派生的子类外,在这个类外面不能被访问,它兼顾了类的继承性和封装性。v 类实现是实现类说明功能的详细过程和方法。它往往由系统开发人员研制,用户不必了解,也就是隐藏了详细实现的全部细节。这就是面向对象方法的信息隐藏性。本讲稿第二十四页,共五十一页v733 方法(methods)v 方法是指在对象中被定义的过程,即对类的某些属性进行操作以达到某一目的的过程。它的实现类似于非面向对象语言中的过程和函数,它是与类的属性封装在一起的。如果一个类的公有方法可用在许多应用领域,这个类就可作为重复利用的软件组件(software component)。本讲稿第二十五页,共五十一页v734 消息(message)v 前面我们谈到“要求”对象完成某种功能,从程序设计语言的角度来说,就是要执行一个消息表达式。消息是对象间唯一的接口方式,即当多个对象联系在一起,进行一个处理时,便要使用消息。面向对象软件的实现过程,就是发送消息,激活所需类的“方法”的过程,这相当于非面向对象方法中的函数调用。除了具备提供动态约束的选择机制(selection mechanism)以外,消息表达式类似于普通的函数调用,两者都带有变量,并返回值,调用时,其环境都被压入堆栈内保护起来,在执行时,调用者被挂起,在调用完成后再恢复其运行环境。虽然“消息”这个词似乎带有并发处理的含义,但消息发送并不是一个发送机制,而是一个模块机制,它保证了将数据及其操作过程封装成对象实体。本讲稿第二十六页,共五十一页v 然而,函数调用和消息传送在以下三方面仍然有所区别:v (1)函数调用可以带或不带参量,但消息至少带一个参量,它表明调用该消息的对象,消息中告诉接收对象做什么的部分称为消息操作(message selector)。v (2)消息操作名类似于函数名,但它们之间的本质区别在于:函数名代表一段可执行的代码,但消息操作名具体功能的选定还取决于接收对象的消息本身。v (3)函数调用是过程式的(how to do),消息传送是说明式的(what to do),具体“如何做(how to do)”由对象收到的消息自行确定。v 例如,一个开方函数sqrt唯一标识了对一自变量为浮点数类型的量进行开方运算的代码。为保证开方运算结果和平方根的数学概念一致,要求调用者必须保证自变量是浮点数类型。但是sqrt为一消息操作名时,只能表示是对一个量的开方运算,而具体是哪一种类型的量还取决于该消息的接收对象,即具体执行开方运算的相应代码,由对象(消息接收者)自行确定,与用户(消息发送者)无关。本讲稿第二十七页,共五十一页v 面向对象设计风格和传统设计风格相比,其最大的特点是对象具有“智能”因素-选择机制。例如,向一对象desk Top发送一消息print,这表明机器要执行一个消息表达式,其接收对象是desk Top,消息操作是print,消息的具体概念通过激发选择机制来完成:首先在对象desk Top的调度表中查找过程print,再转至过程print的代码段运行。所谓的“智能化”的选择机制其实并不神秘,只不过在对象的过程表中对消息操作名进行按名搜索而已。所以执行一个消息表达式就是触发选择机制在相应的调度表中进行搜索,如搜索成功则转向相应消息操作的过程中运行。v 除了选择机制外,下面这些术语的含义和传统设计中的相应名词是对应的:v 对象 数据块v 对象标识符 指向数据块的指针v 向对象发送消息 函数作用于数据本讲稿第二十八页,共五十一页v74 面向对象方法的主要技术v741 封装v 面向对象的风格与传统风格的本质上的区别在于选择机制。选择机制将用户选择与相应操作匹配的数据类型的负担转移给了系统设计员,而在传统设计中,这是由用户自己完成的。v 选择机制是一个简单而又有效的系统设计工具,它使系统设计员能够清晰地表明他们所提供的服务界面,用户可以全部看见对象提供的操作,但看不到其中的数据。从用户的角度来讲,对象提供了一组服务,而服务的具体实现却与用户屏蔽。如图77是一个对象“笔”的使用示意图。本讲稿第二十九页,共五十一页本讲稿第三十页,共五十一页v 这实际上就是封装。对象中的操作如何实现,内部数据如何管理,这些都封装在过程界面的内部,用户通过过程界面来访问对象。v 封装是把数据结构同操作数据的函数(方法)组合在了一起,因此它使数据和过程实现了一体化,封装是借助于类这种新的结构和数据类型机制达到的。v 封装限制了类的属性(数据)和方法的可访问性,使各类成为独立的模块。由于其他类不得引用本类的私有数据与操作,因此避免了传统程序设计中大量的数据传递,减少了数据误操作的可能,提高了软件的可靠性和可维护性。本讲稿第三十一页,共五十一页v742 继承v 在面向对象的方法中,类是按一定层次组成起来的,称为类层次,即通过类层次把类进行体系化。面向对象方法规定下位类(或称子类)继承上位类(或称父类)的数据和方法,即子类可以照样使用父类的数据和方法,子类可以照样使用父类定义的内容。利用这种特性,在生成新类时,可以只定义与已定义的父类不同的数据和操作。因此,继承的重要作用在于:其一是避免公用代码的重复开发,减少程序的代码量;其二是通过增强一致性来减少模块间的界面。v 继承性常常用来反映在一个应用领域中的抽象与结构,最早见到的例子如图78所示。正方形是一种特殊类型的多边形,正方形通过对多边形的继承,可获得多边形的全部属性。此外,多边形是个封闭图,所以正方形也将继承封闭图的全部属性。本讲稿第三十二页,共五十一页本讲稿第三十三页,共五十一页v 在一个图形系统中,所有的图都具有线宽、颜色、能被标定(比例尺)、定位以及绘图的特性。这些属性被定义在根类“图”中。此外,封闭图具有周长、面积等属性;多边形再要加上多边形边数这一属性。根据继承性,一个正方形具有线宽、颜色、比例尺、周长、边长及计算面积等属性与操作。v 下面以图形系统为例来说明继承性。我们先定义图,它在类层次中处于最上层。在一个图形系统中,所有的图都具有以下属性:线宽、颜色、能被标定、定位、绘图的有关特性。图可以分成开放式图和封闭图两类,它们是图的子类,即具有图的所有属性与操作。本讲稿第三十四页,共五十一页v 继承机制使系统自然地形成了清晰的层次结构,并且与现实事物的分类习惯相吻合,使人易懂易实现。对父类的数据及操作的继承性可大大提高代码的重要性。v 继承机制是组织、构造和重用类的一种工具,如果没有继承概念的支持,则所有的类就像一盘散沙,分别是一个个独立的实体。每次开发仍然要从“一无所有”开始,这样,由于类的开发者在构造方法时仍然都各自为政,使得类与类之间失去了联系。本讲稿第三十五页,共五十一页v743 消息映射v 消息传递是指示对象做什么的唯一手段。在面向对象的方法中,由于只有通过“消息”才能使对象进行某种操作,因此可防止对象被错误地使用。消息传递同非面向对象方法中的子程序调用有所类似,但子程序调用时要移交程序的控制,它自己知道哪一类数据要用哪一种处理。本讲稿第三十六页,共五十一页v744 动态联编(dynamic binding)v 动态联编也称迟后联编(late binding),它是指允许一个操作有多个可实现的版本(称为多态性),对于到底使用哪个版本事先不必规定,可以直到运行时根据所给定的参数值再选用。这就使用户在运行前可随时修改、增减自己所需的操作版本,为用户提供了高度的灵活性。但是,必须注意,这种性能是以失去了先前联编的速度优势为代价的,因此动态联编是以计算机具有足够高的速度为前提的。本讲稿第三十七页,共五十一页v75 面向对象程序设计过程v 由上所述,我们可以将面向对象的程序设计归纳为以下4步:v (1)标识组成系统的对象类,即对你所要研究的现实世界进行分析,找出组成它的各种对象,并加以分类、分层。v (2)定义每一类对象的属性及操作。v (3)具体实现对象的结构。v (4)写程序。这一步就是按照对象提供的属性及操作产生与处理对象。本讲稿第三十八页,共五十一页v76 控制系统的面向对象设计举例v 用面向对象的方法来分析是符合人认识事物的规律的。从名词上来看,“事物”即对应于“对象”,“类别”对应于“类”,“属性”往往对应于一系列各种数据结构的变量,而“行为”往往对应于一系列以这些变量(属性)为中心的函数。为了说明这个问题,下面,我们分析一下控制系统中算法模块类的设计过程。在下面的分析中所使用到的程序语法是C+语言的语法。本讲稿第三十九页,共五十一页 通过对如图79所示的基本控制系统的分析中可以看到,控制系统是由算法模块对象和信号线对象这两类对象构成的,由此可以抽象出算法模块类和信号线类这两个基类。具体的算法模块种类很多,如PID、常系数(增益)、积分等等,但这些算法模块显然具有许多共性,因此可以看作是从一个共同的算法模块基类派生出来的。遵循本章72节提出的由具体到抽象的原则,我们可以从一个具体的算法模块开始进行系统分析(需求分析)。本讲稿第四十页,共五十一页 在各类算法模块中,最简单的莫过于“常系数”模块了,如图710所示,常系数模块完成的功能是对输入的变量值inData乘以一个常系数Const,再通过变量值outData送出。v 首先我们看看常系数模块所具有的属性,模块的属性分为两种:其中一种是指可以被别的对象的行为改变的或者在别的对象的行为中可以接触到(使用)的,称之为“公有”属性;另一种是指不能被别的对象所改变或接触,只能被自身的变化行为所改变或接触的,称之为“私有”属性(实际上,还有一种“保护”属性,这里不再介绍)。v 常系数模块所具有的公有属性包括:本讲稿第四十一页,共五十一页本讲稿第四十二页,共五十一页本讲稿第四十三页,共五十一页 通过分析我们可以看到,在常系数模块的属性中,除了常系数“Const”以外,常系数模块的其他属性也是所有算法模块所具有的,只是输入值inData和输出值outData的个数可能不同,但只要把inData和outData变量设置成指针变量就可以了。同样在常系数模块的行为中,所有的行为(函数)都是在其他的算法模块中会遇到的。通过抽象与继承技术,则我们可以抽象出一个通用模块的类CModel,这个类是所有具体模块类的基类,也就是说所有算法模块类都是从这个类派生(“派生”是“继承”的逆过程)出来的,它们都继承了CModel类的这些共有属性和行为,CModel类定义如下:本讲稿第四十四页,共五十一页本讲稿第四十五页,共五十一页本讲稿第四十六页,共五十一页v 注意在函数Draw()、onopen()和Calculate()前使用了一个符号“virtua1”,这个符号表示该函数是一个“虚(virtua1)函数”,虚函数是一个使用动态联编机制的典型方式。为什么要使用虚函数呢?大家知道,由上述模块类CModel派生出来的各个具体的算法模块类,它们的算法是各不相同的,也就是说它们的Calculate()函数是不一样的,这样我们使用CModel类生成一个对象(实例)时,总是无法事先知道这个对象将进行怎样的计算。使用虚函数,则函数的调用是在运行时刻进行的,也就是说,究竟调用哪个算法模块类的Calculate()函数,将推迟到运行期间在知道了相关对象的类型以后才自动决定。同样的原因,各个算法模块类的方框中所画的内容以及打开的对话框也是不同的。v CModel类中其他的变量和函数在派生的算法模块类中都是一样的,因此在这些派生的算法模块类中已经继承了这些属性和行为,不再需要重新定义了。只要再加入新的、父类中没有的属性和行为就可以组织出具体的算法模块类了。例如常系数模块类的定义如下:本讲稿第四十七页,共五十一页本讲稿第四十八页,共五十一页v 变量Const被定义成私有(private)形式,这样别的模块就不能接触到了。v 其他的算法模块类也基本上是如上形式,只不过是在“private”后面跟的是各自不同的变量,另外就是三个虚函数内部的计算过程各本相同。v通过这种方法,我们可以很容易的组织出其他的所有算法模块类,而且由于面向对象的封装性,不必考虑变量和函数的重名、多次调用等等许多问题。在使用到某个模块的对象时,只要通过下面的方式简单地用该算法模块类生成一个实例就可以了:v CmodelConst*pConst=new CmodelConst (position);v 这样pConst就具有了CModelConst类的一切属性和行为,它将显示在屏幕上的position这个位置,并且可以完成诸如计算等等各种功能了。v 当然,上述过程是一个高度简化了的面向对象分析过程,实际设计要具体很多,一方面有很多属性和行为没有列出;另一方面类的层次结构关系没有完整描述,此外,最后生成的类的实例对象需要挂到一个复杂链表中,然后设计一段运行控制程序,这段运行控制程序通过调度模块对象链表来完成计算和显示等任务。本讲稿第四十九页,共五十一页v77 小 结v 面向对象的方法可以较好的解决结构化设计方法存在的不规范问题和冗余代码问题。通过上面的示例可以看到,任何设计者对类的抽象结果是不会有太大差异的。同时,基类完成了大量相同的工作,在其派生类中不需要再重复这些工作了。例如在我们开发的控制系统计算机辅助工程CAE2000软件中,算法模块仅对左鼠标键、右鼠标键以及鼠标移动三个鼠标事件的消息处理函数(响应行为)即多达数千行程序。算法模块数量多达60余种,如果每个模块孤立地各自处理这些函数,冗余代码量将大得惊人,而采用面向对象的方法,只需在基类里一次性统一处理就可以了。v 面向对象的方法使得仿真软件开发过程可以实现流水线式的开发形式,在多人参与的大型项目中,每一个开发者只需专注自己的类的设计,比如具体算法模块的开发者不需要涉及大量软件界面方面的知识,只需掌握相关算法的知识就可以胜任相关的工作。这使得大型项目的开发成为可能,而且使得软件的界面风格具有高度的一致性和专业性。本讲稿第五十页,共五十一页v 但是,面向对象的方法也不是万能的。一方面,对非常复杂的、明显有大量子系统构成的、分布式的系统,面向对象的方法描述困难,特别是一些基类的先期设计缺陷在后期往往很难克服。另一方面,在具体的函数(行为)描述中,面向对象的方法不像结构化设计方法那样有着清晰的逻辑结构。所以,在具体开发中,各种方法应该综合使用。比如在火电站仿真机这样的大型分布式系统的整体规划中,可以来用结构化设计方法把任务分解到物理节点级(计算机)和进程级(多个程序);每个程序内部采用面向对象的方法进行需求分析和结构设计;在具体函数内部的设计中,采用结构化设计方法或者流程框图可以得到清晰的逻辑结构。本讲稿第五十一页,共五十一页

    注意事项

    本文(第7章面向对象的仿真技术精选文档.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开