labview面向对象程序设计.

上传人:小** 文档编号:57343927 上传时间:2018-10-21 格式:PPT 页数:70 大小:3.71MB
返回 下载 相关 举报
labview面向对象程序设计._第1页
第1页 / 共70页
labview面向对象程序设计._第2页
第2页 / 共70页
labview面向对象程序设计._第3页
第3页 / 共70页
labview面向对象程序设计._第4页
第4页 / 共70页
labview面向对象程序设计._第5页
第5页 / 共70页
点击查看更多>>
资源描述

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

1、LabVIEW面向对象程序设计,Intelligent Electronics Institute Huazhong University of Science & Technology,2,目录,面向对象 LabVIEW与面向对象程序设计 LabVIEW对象基本实现 LabVIEW对象高级技巧 实例介绍 提示与建议 习题,3,6.1面向对象,对象与类的概念 对象是系统中用来描述客观事物的一个实体,是构成系统的基本单位,由属性和对这些属性进行的操作等构成; 类是对象的抽象及描述,是具有共同属性和操作的多个对象的统一描述体,类也是对象,是一种集合对象; 在类的描述中,每个类要有一个名字,要表示一

2、组对象的共同特征,还必须给出一个生成对象的实例的具体方法; 类中的每个对象都是该类的对象实例,系统运行时通过类定义属性初始化可以生成该类的对象实例。,6.1面向对象,属性与方法的概念 对象是属性及方法的封装体; 对象的属性是指描述对象的数据,这些数据可以是系统或用户定义的数据类型,也可以是一个对象的数据类型; 对象的方法是指定义在对象属性上的一组操作的集合; 方法是为响应消息而完成的算法,表示对象内部实现的细节,对象方法集合体现了对象的行为能力; 对象的属性和方法是对象定义的组成要素,它们统称为对象的特征。,4,6.1面向对象,面向对象中的三要素:在面向对象的程序设计中,封装就是把相关的数据和

3、代码结合成一个有机的整体,形成数据和操作代码的封装体,对外只提供一个可以控制的接口,内部大部分的实现细节对外隐蔽,达到对数据访问权的合理控制; 在面向对象程序设计中,继承表达的是类之间的关系,这种关系使得一个类可以继承另一类的属性和方法,从而提供了通过现有的类创建新类的方法,也提高了软件复用的程度; 多态是面向对象程序设计的重要特性之一,是指不同的对象收到相同的消息时产生不同的操作行为,或者说同一个消息可以根据发送消息的对象的不同而采用多种不同的操作行为。,5,封装,继承,多态,6.2LabVIEW与面向对象程序设计,LabVIEW引入面向对象编程时的术语LabVIEW依然使用家族关系术语:父

4、与子、兄弟与堂兄弟等,这些都是用户已经熟悉的术语,当提到某个类的父类时,都可以理解这两个类之间的关系; LabVIEW类成员的限定性术语:依然采用“私有的”、“共有的”和“受保护的”等词汇。,6,6.2LabVIEW与面向对象程序设计,继承 LabVIEW在实现继承特性时坚持这样一条原则:LabVIEW用户能够实现类的继承,可以选择一个已有类作为父类,创建一个子类,并且可以覆盖父类中的方法; LabVIEW提供了(Object)类,作为所有LabVIEW类的祖先; LabVIEW目前只支持公共继承,而不支持私有继承和多继承。,7,6.2LabVIEW与面向对象程序设计,封装 LabVIEW实现

5、了类的封装,但对封装特征进行了选择; LabVIEW类只包含对私有数据的支持,不提供公共数据和受保护的数据两种属性; LabVIEW类中的方法,不仅可以是私有的,还可以是公共的或受保护的。,8,6.2LabVIEW与面向对象程序设计,多态 多态性表现有两种,即编译时的多态性和运行时的多态性。编译时的多态性是用函数的重载来实现的,运行时的多态性是用虚函数来实现的,而这两种方式在LabVIEW的类中都没有实现。 首先,LabVIEW类不支持重载,但这种多态性的思想在LabVIEW的早期版本中就一直存在并发挥着重要作用,主要表现为多态的函数、VI和单位; 其次,对于虚函数而言,“虚拟”和“虚拟分配”

6、的概念在LabVIEW中也面临一些问题,LabVIEW面向对象编程选择了“动态”和“动态分配”来代替这两个术语。,9,6.3LabVIEW对象基本实现,创建类 通过菜单“FileNewClass”或者在项目浏览器的右键快捷菜单中选择“NewClass”项,都可以创建LabVIEW类; 创建类时,LabVIEW将创建一个新的类库文件(.lvclass),该文件可以记录类的私有数据控件(Private Data Control)和所有被创建的成员VI的信息,包括VI列表及VI的属性等; 类的数据被定义在私有数据控件中,私有数据控件是一个数据簇,与类库文件是一一对应的,并保存在类库文件中,私有数据控

7、件的名称以“.ctl”作为扩展名。,10,6.3LabVIEW对象基本实现,私有数据控件示例,11,类库文件中的私有数据控件,6.3LabVIEW对象基本实现,编辑私有数据成员 在项目浏览器窗口双击类的私有数据控件,可以对类中的数据成员进行编辑,将需要的控件放置到该类的定义私有数据控件中,作为类私有数据簇中的成员。,12,私有数据成员,6.3LabVIEW对象基本实现,设置继承 在LabVIEW中,通过“继承”可在现有类的基础上创建一个新类; 当一个新类被设置为继承另一个LabVIEW类时,这个新类就可以使用它所继承的类中“公共”及“保护”型的成员VI; 在LabVIEW中,所有的类都默认继承

8、LabVIEW Object的基本类。,13,6.3LabVIEW对象基本实现,设置继承示例,14,默认继承关系,6.3LabVIEW对象基本实现,改变类的继承关系 在类名称上右击,进入属性设置对话框,选择“继承”(Inheritance),然后单击“更改继承”(Change Inheritance),可改变类的继承关系。,15,更改后的继承关系,6.3LabVIEW对象基本实现,创建方法 在类名称上右击,选择需要创建VI的类型:普通成员VI、动态成员VI或重写VI(Override VI)。,16,6.3LabVIEW对象基本实现,新建静态成员VI 新建静态成员VI后,会打开一个空面板的VI

9、,用户可以根据应用需要添加程序代码; 静态方法只有单个VI,在子类中无法创建与父类静态成员VI相同名称的成员VI。,17,6.3LabVIEW对象基本实现,新建动态成员VI 新建动态成员VI后,会打开一个含有部分代码的VI,其中包括错误输入簇、错误输出簇、用于错误处理的条件结构,以及输入LabVIEW类和输出LabVIEW类; 动态成员VI主要出现在具有继承关系的LabVIEW类中,只有当子类需要继承并重写父类中的某些VI时,这些VI才有必要设置为动态成员VI。,18,“大四学生”类中获取成绩的程序框图,6.3LabVIEW对象基本实现,创建重写成员VI 重写成员VI是对祖先类中动态VI的重写

10、,必须与祖先类中的同名成员VI具有相同的重入设置、首选执行设置、优先级设置、连线板接线端、连线板模式和访问范围; 创建重写成员VI时,LabVIEW会自动调用父类方法的节点、动态输入和输出类接线端及其他匹配祖先类VI所需的接线端并放置在程序框图中; 当选择创建时若不存在可重写的祖先类成员VI,LabVIEW将禁用重写成员VI的选项。,19,6.3LabVIEW对象基本实现,右击“保研生”类,选择“新建”下拉列中的“用于重写的VI”,会出现一个提示框用于选择需要重写的动态VI。我们选择“大四学生”类下的“获取成绩.vi”,LabVIEW会自动生成一个“保研生”类下的“获取成绩.vi”。,20,“

11、保研生”类中获取成绩的程序框图,6.3LabVIEW对象基本实现,输入或输出接线端 对于动态VI,右键单击连线板上的输入或输出接线端,会发现其连接为动态分配模式。,21,“保研生”类中获取成绩的输入端口,6.3LabVIEW对象基本实现,动态分派程序 在编写程序时,动态成员VI在程序背面板上就像一般的子VI一样,不过当运行时,输入端口传递进来的数据就决定了调用哪个类中的成员VI。,22,6.3LabVIEW对象基本实现,访问范围设置 LabVIEW类只包含私有成员数据,但可以为类的成员VI指定访问范围。成员VI的访问范围选项包含如下设置: 公共(Public),任何VI都可以调用该成员VI;

12、保护(Protected),仅该成员VI所在类及其子类中的VI可以调用该成员VI,在项目浏览器窗口中受保护的成员VI图标中有一个暗黄色的钥匙符号; 私有(Private),仅该成员VI所在类中的VI可以调用该成员VI,在项目浏览器窗口中私有型的成员VI图标中有一个红色的钥匙符号。,23,6.3LabVIEW对象基本实现,在类上右击,选择属性后可以设置一个VI的访问范围,24,6.3LabVIEW对象基本实现,使用类 在创建LabVIEW类的实例时,用户可直接将这个类的类库文件(.lvclass)作为控件或常量放置在相应程序的前面板或程序框图中; 在LabVIEW类中,所有的私有数据被定义为一个

13、簇,通过在成员VI的程序框图中调用函数来访问和操作这些数据; 对LabVIEW类进行捆绑或解除捆绑时,节点上仅显示当前类私有数据的接线端,而不显示从父类继承的数据的接线端。,25,使用类获取大一成绩程序框图,6.4LabVIEW对象高级技巧,构造函数与析构函数 在一般的面向对象程序设计语言中,对象在创建和销毁时会自动调用两个函数:构造函数和析构函数; 构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使对象具有自己的特征; 析构函数则用来完成对象被删除前的一些清理工作,析构函数调用完成之后,对象将被销毁,相应的内存空间也被释放; 在LabVIEW的面向对象编程中

14、,构造和析构是隐含的,不需要用户编写或调用。,26,6.4LabVIEW对象高级技巧,内存分布 在LabVIEW中,类的高效存储是一个挑战性的问题。 一个类的数据包括从父类继承来的数据簇和自身的私有数据簇。,27,6.4LabVIEW对象高级技巧,在类实现时,LabVIEW需要为一个类分配数据空间,28,6.4LabVIEW对象高级技巧,动态分配 动态分配是LabVIEW的一个特色,一个看似单个VI调用的节点在运行时实际上调用的是一组VI中的某个,这取决于运行时动态分配输入端连线上的值; 每一个在连线上传递的对象都含有指向其类信息的指针,这个类信息包含了一个“动态分配表”,它是一个VI引用表;

15、 每个类首先复制了其父类的动态分配表,同时它用自身重写的VI方法替换父类中对应的方法,然后将没有重写的父类动态分配VI添加到表中。,29,6.4LabVIEW对象高级技巧,动态分配的示例,30,6.4LabVIEW对象高级技巧,XcontrolXControl可用于在LabVIEW中设计和创建复杂的控件,并且它的运行方式由后台运行的VI决定; XControl包括控件的动作; 在VI中使用XControl可简化该VI的程序框图。,31,6.4LabVIEW对象高级技巧,XControl的创建和应用 创建XControl:两种方法 一是选择菜单项“FileNewOther FilesXContr

16、ol”; 二是在项目浏览器的右击快捷菜单中选择“新建XControl”。,32,6.4LabVIEW对象高级技巧,新建Xcontrol,33,新建的Xcontrol 界面,6.4LabVIEW对象高级技巧,Xcontrol示例:双重温度计,34,Simple Dual Mode Thermometer XControl.xctl,6.4LabVIEW对象高级技巧,每个XControl包含必须以下四个模块: 数据(Data)这是一个自定义类型控件,定义了XControl的数据类型; 状态(State)也称为显示状态,是一种自定义类型控件,定义了所有影响控件外观的信息(除XControl的数据外)

17、; 外观(Facade)外观VI的编写在XControl的设计中最为重要,它的前面板决定了XControl的外观,它的程序框图描述了XControl的功能; 初始化(Init)第一次将XControl放在前面板,或当包含XControl的VI被加载到内存时,LabVIEW将调用Init模块。,35,6.4LabVIEW对象高级技巧,除了4个必须模块以外,在XControl中还可以创建属性、方法、VI、文件夹等; 右击XControl,在“新建”目录下单击“属性”项创建属性,首先需要将属性命名并选择该属性的读/写模式,然后再编写属性的VI; 将XControl拖放到前面板时,它就已经开始工作了,打开XControl的外观VI,其为运行状态,不可编辑,只有当所有调用了该XControl的VI全部关闭之后,才可以编辑外观VI; 调用XControl的属性和方法与一般控件类似。,

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

最新文档


当前位置:首页 > 商业/管理/HR > 宣传企划

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