LabVIEW面向对象-类的访问权限/实例化/覆盖

类的访问权限

公有:类内与类外均可访问,类内访问指在同一个类的方法(函数或VI)的代码中可以进行读写,否则就是类外访问。
私有:类内可以访问,类外不可访问。
保护:可以在类内或子类内访问。
友元:指某个类的属性或方法可以被其他一些指定为友元的方法或类访问到。

LabVIEW里类的属性(数据)只能是私有的,类的方法可以是公有的私有的保护的友元的。

在这里插入图片描述
底层的方法尽量设置为私有的,不能够让用户直接使用。

LabVIEW中类是不能嵌套的,但是库可以嵌套。可以在大型项目中划分多个库,库中创建多个类。此时类作为库中的一个成员,也可以设置它是私有或公有。

类的实例化

**类中的属性与方法按照是否必须进行实例化才能调用可以分为静态(静态的属性和方法不需要类实例化就可以被访问)动态(动态的属性和方法只能通过类的某个实例进行访问)**和基于动态分配的模板、基于静态分配的模板完全不同的概念。

LabVIEW类的属性与方法多数是动态的。要添加一个静态方法,在类里添加一个没有类输入控件的那种VI就可以了(相当于利用类的封装特性,把相关VI封装在同一个类里)

一个静态方法
在这里插入图片描述
初始化VI很适合封装到类里,没有类的输入但是可以产生类的实例并对其进行初始化。可以在这个VI里设置一下对象初始资源以及打开所需的文件、仪器等。

一个初始化VI
在这里插入图片描述
在这里插入图片描述

是否需要被子类覆盖

普通函数:LabVIEW中没有对应VI类型的一个东西。别的语言里,普通函数和虚函数都可以被子类继承和覆盖,区别在于普通函数不具备多态(动态绑定)的功能。
虚函数:LabVIEW中的基于动态分配目标VI,表示这个函数或VI是可以被子类继承和重写的,而且有多态功能。
最终函数:LabVIEW中的基于静态分配目标VI,表示这个VI不能被子类中的VI重写,不允许被子类中的函数覆盖。
抽象(纯虚)函数:LabVIEW中设置为必须在子孙类中重写的VI。是一种虚函数(基于动态分配模板的VI),基类只定义了函数的名字和输入输出参数类型 ,并没有编写代码。

在这里插入图片描述
抽象类:不能内实例化的类,只能用于被子类继承(把瓷器类设置为一个 抽象类,会强制只能从茶杯类或茶壶类创建瓷器对象,不会创建出一个不存在的类型的瓷器)
最终类:不能被继承的类。最终函数和最终类的使用一般是出于安全考虑(像是做了个用于验证密码的类,为了防止有人把密码验证逻辑在子类中重写之后传给调用者,可以把验证密码类设置为最终类,防止它被继承后在子类里被重写)

### LabVIEW 中的面向对象编程概念与实现 #### 核心概念 LabVIEW面向对象编程(Object-Oriented Programming, OOP)借鉴了传统编程语言如 C++ 和 Java 的核心理念,包括 **结构**、**封装**、**继承** 等[^4]。这些特性使得开发者能够更高效地管理复杂的应用程序逻辑。 - **结构**: 面向对象编程的基础单元,在 LabVIEW 中可以通过自定义型的创建来表示不同的。每个可以拥有属性和方法,用于描述其状态和行为[^3]。 - **封装**: 封装是一种隐藏内部细节并将数据与其操作绑定在一起的技术。在 LabVIEW 中,通过将 VI 设置为私有或受保护的方式,可以控制外部访问权限,从而增强代码的安全性和模块化程度[^4]。 - **继承**: 继承允许子基于父进行扩展而无需重复编写相同的代码片段。这种机制不仅减少了冗余还提高了代码重用率。例如,在 LabVIEW 中当一个新被定义时可以选择让它继承另一个已存在的的功能[^5]。 #### 实现方式 为了更好地理解和运用 LabVIEW 的 OOP 功能,可以从以下几个方面入手: 1. 创建用户定义的数据型 (User Defined Data Types): 这些数据型实际上就是所谓的“”,它们包含了特定于该别下的所有成员变量(即属性)以及函数(即方法)[^4]。 2. 使用属性节点(Property Nodes): 属性节点提供了读取/写入对象属性的能力,并且支持事件驱动的操作模式[^3]。 3. 设计虚拟仪器(VIs)作为方法(Methods): 方法是用来执行某些具体任务的小型程序块;对于每一个来说都应该至少有一个构造器(Constructor),用来初始化新的实例对象。 4. 应用继承(Inheritance): 当需要建立具有相似功能但又有细微差别的多个时,则应考虑采用继承关系。这样不仅可以共享通用的部分还能各自保留独特之处[^5]。 #### 示例代码 下面是一个简单的例子展示如何利用 LabVIEW 来实现基本的对象模型: ```labview // 定义基 Animal class Animal { string name; public void setName(string n){ this.name = n; } } // 子 Dog 继承自 Animal class Dog extends Animal{ public void bark(){ Print("Woof! My name is "+this.name); } } ``` 注意以上伪代码仅作示意用途,在实际开发过程中需按照官方文档指导完成相应配置步骤[^3]。 #### 总结 通过对上述理论知识的学习加上不断实践探索,相信您可以逐渐掌握 LabVIEW 面向对象编程的强大工具集,进而提升软件工程效率与质量水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值