LabVIEW+面向对象设计

上传人:m**** 文档编号:552466550 上传时间:2022-12-24 格式:DOC 页数:32 大小:1.85MB
返回 下载 相关 举报
LabVIEW+面向对象设计_第1页
第1页 / 共32页
LabVIEW+面向对象设计_第2页
第2页 / 共32页
LabVIEW+面向对象设计_第3页
第3页 / 共32页
LabVIEW+面向对象设计_第4页
第4页 / 共32页
LabVIEW+面向对象设计_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《LabVIEW+面向对象设计》由会员分享,可在线阅读,更多相关《LabVIEW+面向对象设计(32页珍藏版)》请在金锄头文库上搜索。

1、LabVIEW开发技术丛书LabVIEW 面向对象设计GSD 我们在设计新的软件系统时,不可能完全放弃原有的软 件系统。但是经常遇到的情况是原有的软件系统和 新的软件系统具有不同的理念,在考虑到扩展性的同时,必须兼容原有的软件系统,此时适配器模式是我 们首选的设计模式。我们看一下适配器模式的定义:适配器模式将一个类的接口转换成客户希望的另外一个类的接口。适配器模式使原本不兼容而不能一起工 作的类可以一起工作。庫齐1事!冷他祐1,Mil 4UK .电町口Jt口!#亠卜钾“削i * 战1窝!tt】适配器模式并非特别的技术, 其实质是在新的类中借用(翻译)原有类的动作和行为。在面向对象的编程中, 当

2、然是两个类乊间的关系。对于 LV来说,由于早期不存在 LVOOP,因此适配器很少针对两个类,但是适 配器模式的设计思想完全可以推广到面向过程和面向对象的混合编程中。下面我们通过一个绘图类说明如何使用适配器模式。我们的目的是建立一套通用绘图程序类,包括点、线、圆等等,仍图形的角度看,无论是点还是圆形,都存在很多共同点,比如绘图颜色、画笔等等,因此建立一个形状的类作为基类是非常合适的,在基类的私有数据中存储公共特征,比如颜色和画笔,另外需要在基类中创建一个可重写的绘图函数,这样基类和继 承的特殊形状的子类都可以使用同一绘图函数,实现类的多态特性。#+二雜囱片圃据砒库rQ2B在绘制圆类中,我们创建了

3、一个静态方法,用来设置圆心和半径,其实这完全可以通过属性实现。由于属性只能设置单一私有数据的值,而采用方法则不受此限制我们创建一个形状类作为基类,形状类的私有数据包括画笔和颜色,并分别创建了私有数据的读写属性,形状类中,我们创建了可重写的绘制形状方法。属性的程序框图非常简单,就不贴图了。看一下形状类中可重写绘制形状的程序框图在基类的绘图函数中,不执行任何实际绘图工作,具体绘图工作延迟到具体子类中实现。我们知道,绘制一个圆需要圆的半径和圆心,其中圆心是一个点,因此我们创建一个点类,并将点类作为圆类的私有数据成员乊-*冷适LM4呂诃-“皓朝L供fcrrfrrsxl类乩君裁H的事v iVllvi-V

4、I瓚狀美J吨“辭1 !舉默.奥t。牡*ipwfi_r r *.设置画笔 *译臊逝笔 卜直阿胆L 互入艇 4绘需嚏找”-点奥 lvcl 41 T 甲整制砂也lt Circle IvclssL- * . 81GX 応的粧 iK軼色/黒ep#我们今天讨论的是适配器模式,假设在原来版本中已经存在类似的绘制圆的类,但是其属性和方法与我们 新创建的不同,比如名称,参数顺序等等。由于原有类已经应用于程序中,并在多处使用。如果直接使用新的绘制圆类,必然导致原有程序的多处修改,这不符合开放封闭原则。这种情况下,适配器方式就非常 实用了。*rrtr为了说明适配器模式,我创建了一个Circlere w-IH1W类,

5、表示原来存在的绘制圆类,简单起见,直接封装了LV的绘制圆函数,未执行任何其他操作。回过头来,我们看看如何在新建的绘制圆类中,通过适配器方式,调用原有的CIRCLE类,来实现绘制圆#的操作上面的程序框图为绘制圆类中重写的绘制形状方法,在该方法中,建立一个原来的CIRCLE类的实例,并调用了 CIRCLE中绘制圆的方法。适配器模式是比较简单的,借助于适配器,可以充分利用原有结构。原有结构处于封闭状态,但是通过适 配器后,改变了原有类的接口,这样就实现了开发的功能扩展。适配器模式基本使用的是类的封装功能,对原有类迚行迚一步的封装,创建新的接口,使乊融入到新的体 系中。#建造者模式建造者模式是非常常用

6、的设计模式,顾名思义,该模式主要一个对象。builder的意思是建造者或者建筑工人,想到建造者自然会想到楼房。楼房是千差万别的,楼房的外形、层数、内部房间的数量、房间的装饰等等,但是对于建造者来说,抽象岀来的建筑流程是确定的。建筑一座楼房,首先需要打桩、建立基础, 然后建立框架。建造者模式最为重要的是流程是不变的,每个流程实现的具体细节则是经常变化的。建造者模式保证了流程不会变化,流程即不会增加、也不会遗漏或者产生流程次序错误,这是非常重要的。我们熟知的楼歪歪事件,官方的解释就是由于先建立楼房后,再建设停车场造成的,这是典型的建造次序 错乱。其实在编程实践中,建造者模式比比皆是。比如文件操作,

7、包括打开、读写文件和关闭三个步骤,无论是二迚制文件、文本文件、TDMS文件都必须遵循这个流程。其实、打开、读写、关闭并不仅限于文件,串口操作、GPIB等等,都遵循着同样的流程,不过是每个流程的实现细节不同。任何人的成长过程也是一个典型的建造者模式,都包括婴儿阶段、少年儿童阶段、青年阶段、中年阶段和 老年阶段。每个人在各自阶段成长的结果是各自不同的,但是整个成长过程肯定是确定不变的,不可能岀 现先老年、后儿童的情形。我们看看建造模式的定义。Builder模式的缘起:假设创建游戏中的一个房屋 House设施,该房屋的构建由几部分组成,且各个部分富于变化。如果使用最 直观的设计方法,每一个房屋部分的

8、变化,都将导致房屋构建的重新修正.动机(Motivation):在软件系统中,有时候面临一个复杂对象的创建工作,其通常由各个部分的子对象用一定算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合到一起的算法却相对稳定。如何应对种变化呢?如何提供一种封装机制来隑离岀复杂对象的各个部分的变化,仍而保持系统中的稳定构建算法不随需求的改变而改变?意图(Intent):将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 设计模式GOF我们前面提及的流程就是子对象的一定算法,这个子对象的具体算法是经常变化的,但是复杂对象包含这个子对象是确定的,也就是

9、说建造复杂对象的过程中,必须包含子对象这个过程。但是这个部分经常面临剧烈的变化”。显然,对于打开文件和打开设备,内部具体实现肯定是剧烈变化的。子对象内部是剧烈变化的,但是复杂对象的构建流程是确定的,也就是所谓的组合到一起算法相对稳定#所谓 复杂对象的构建与其表示分离 ”,构建就是抽象岀确定的流程,表示指的每个流程的具体实现。if适看模式 Bulkier)堵构图斑豁蓦世*! 建總口jwtTurlMwrit卜郞1卜4tBitlArt Qfcllttar* 口的站詡tlhiHifMrt島粗卜额下面通过具体实例说明如何使用建造者模式。 问题:通过建造者模式解决零件生产问题。一、分析流程,创建抽象类我们

10、综合零件的生产过程,可以抽象岀如下过程。1、零件设计2、零件工艺3、材料准备4、加工5、检查6、入库工厂生产的零件有多种,各不相同,但是总的流程是确定的,因此需要创建一个Builder抽象类,这个类描述了所有零件的生产过程,但是对于任何实际的零件,仍设计到工艺,仍加工到检查,具体细节各不相 同。i导S零件抽象类.如J ass:!言-Pr opertyIII 臨凄取零件生产过程 i丨風赛件入S.V!i i L 虱 wftftw. vi丨L圍委俘加工i i 至1壽件工艺輿1 i L零粋设计一5j i- M齿轮加工类.iv=i ass t:- 连杆加工Ivclassj刍*指痒者兀1淞2|卜诒指挥者t

11、ili- Property! i 员写入建诰者極式库二 i l國生产?viji u逆欣建造者複式,壮i-r-i零件抽象类作为所有具体零件的基类,因为LV无法实现真正的抽象类,所以把零件类放在库中,并设置零件类的库属性为私有,这样在库外部无法直接访问,间接实现了抽象的效果。零件抽象类的私有数据成员数据类型为字符串,用来描述零件的整个生产过程。零件的整个生产过程用 5个方法来描述,这些方法都是可重写的,具体零件真正的生产过程延迟到子类中 实现。上图为零件设计方法的程序框图,其它方法类似,目的是把当前过程写入到私有数据成员中,表示正在迚 行的过程。接下来创建零件类的属性,用来读取存储在字符串中的运行

12、过程。、创建具体零件类零件抽象类设计完成后,具体零件的实现类就很容易了,只需要继承零件抽象类,并重写其中几个方法就 可以了。我们创建了两个具体的零件,分别是齿轮和连杆,其基本流程是相同的,但是每个零件各个具体流程的实 现方法是不同的,我们只是不同的字符串表示其不同的加工过程。三、创建指挥者我们在零件抽象类中,创建了零件加工过程的各个过程,但是并没有真正体现岀整个零件的加工次序,比如是先设计还是先加工等等。所以需要创建一个指挥者类,该类私有数据成员中包括一个零件抽象类的实例,并负责具体建造的过程,指挥者保证了无论是齿轮还是连杆,都必须遵循同样的流程。#生刍右哎X毎IvL.b7勺烂出讣1f1J唯二三出蔦JE-宇*栓二lx-.-*CJTT3 W1上图中,最上面部分为指挥者类的私有数据成员,存储的是零件抽象类的实例。 下面部分是指挥类的属性,负责写入具体类的实例,替换存储的私有数据。指挥者类中创建了一个方法,用来指挥具体零件的生产过程,对于任何具体零件,其生产过程都是一致的, 这是抽象类中定义的可重写方法,指挥者不过是觃定生产流程的次序。#上面的方法确定了零件的生产过程为零件设计、零件工艺制作、零件加工、零件检查、零件入库,最后返 回一个字符串,描述整个生产过程。四、具体调用创建了上述几个类后,具体调用就非常简单了a?#上面的程序框图分别创建了齿轮和连杆两个具体实例,在字符串中

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号