labview利用簇模拟汽车控制_在LabVIEW应用程序中何时应采用面向对象技术 (翻译)...

在LabVIEW应用程序中何时应采用面向对象技术 (翻译)

在LabVIEW中应用面向对象编程技术并不是一件特别容易的事情,尤其是先期的学习成本很高,但是在开发大型、复杂的、长期维护的程序时,使用面向对象技术会带来较好的回报。

自从LabVIEW8.2版本引入面向对象编程范型后,至今已经有近十多个年头了,在面向对象的基石上,陆续积累很多好的开发框架(如Actor Framework)和测试样板例程(HAL),以及两个优秀的开源面向对象实现工具包(G#和GOOP),并且在NI美国的英文社区论坛上有大量的面向对象的相关资料,而相应的在国内的讨论中,相关内容研讨的很少,如果你咨询NI的技术工程师为啥面向对象的中文资料如此匮乏的时候,他会建议你去上《面向对像编程》的三天付费培训课程,因此在此我来充当一下知识的搬运工,将一些内容翻译后供大家一起学习与讨论!

这篇博文原作者写作的大约时间是在8.2版本刚刚引入面向对象范型后不久写的,其作者Elijah_K是NI公司资深的开发专家,这篇博文中主要简单介绍的面向对象的技术要素,数据和行为混装一起提供整体封装,通过继承可以形成层次类型系统以便更具编程表达力,并且结合多态(动态分配)完成归一化处理调用,从而达到上层框架的复用。原文中给出了很好的面向对象的出发点:硬件抽象层及被测试设备的泛化场景。

本篇资料文章为NI开发经理Elijah_K在2009年撰写的博客,讨论在应用程序中何时应采用面向对象技术!
When Should You Use LabVIEW Classes? Author Elijah_K

原文链接decibel.ni.com

111ed60f6f5423e010505eac2cc4a903.png


你应该在什么时候应用LabVIEW类呢?
I often have customers ask me if they should be using classes in in their LabVIEW application. Many of the people asking this question are long-term LabVIEW users who are new to the concept of an object-oriented development approach and they're struggling to identify how and where classes would benefit their application. If you've ever asked this question, or if you've ever wondered where in your application you would use classes, I'll do my best to shed some light on the topic and explain some of the primary benefits…
经常会碰到有客户询问我:“在他们的LabVIEW应用程序中是否应该使用类(面向对象编程)?”,在咨询此问题的人当中有些人已是长期的LabVIEW开发者,只是对于面向对象编程概念感到陌生,另外他们已经开始努力识别如何及在何处使用类,从而使得他们的应用程序从中受益。或者你已经在考虑在应用程序的哪里使用类,那么我将尽我所能的分享一些该主题的启发,并解释其主要的好处...
To put it simply, classes aim to make it easier to represent collections of items within software. Consider that real-world objects have attributes (colors, weight, size, etc..), and they also have things they can do (open, close, move, etc...). As you might expect, object-oriented programming allows you to define a class of objects, all of which have attributes (known as properties) and things they can do (known as methods).
简单来说,类的目标是使它更容易的表示软件中的事项集合,考虑到现实世界中的对象,它们拥有属性(如颜色,重量,尺寸,等等),它们也有相应的事情可做(如开启,关闭,移动,等等)。如你所期望的,面向对象编程范型允许你定义一个代表着所有的对象的类,它具备所有的特性(也称之为属性)和能够有能力做的事情(也称之为方法
Consider some contrived examples:

  • 1.Vehicles - properties: color, size, weight, occupancy, fuel efficiency, methods:accelerate, brake, roll down windows

  • 2.Cell Phones - properties: battery size, call time, weight, size, methods: place call, end call, send text message

  • 3.NetworkPacket - properties: port, IP Address methods: send, print string

举一些具体的例子来说:
1.车辆 属性:颜色、大小 颜色,尺寸,重量,体积,燃油效率;
方法:加速,制动,升降门窗
2.手机 属性:电池尺寸,通话时长,重量,尺寸;
方法:拨通电话,结束通话,发送短信
3.网络包 属性:端口,IP地址
方法:发送,打印字符串
Now, you might be thinking to yourself, "Can't I just use a cluster?" The answer is generally 'yes.' In fact, if you've recently begun developing an application that relies upon a large, complex cluster that you're passing around your application, it may be an excellent candidate for replacing with a class. This is especially true if you're passing around an array of clusters that are used to represent items that your program needs to be able to communicate and interact with. Making the switch from a cluster to a class offers several benefits - I want to highlight the following (although there are many more):
现在,你可能会想“难道不能使用簇来解决吗?”,答案当然是肯定的。实际上,如果你已经开始开发个应用程序,并且依赖一个大型复杂簇在整个程序中传递使用,这种情形该簇很可能(注意只是可能,并不是决定性的!)是类的很好的候选者,这种方式特别适合当你在整个程序传递簇数组的时候,每个簇都是用来表示一组特定的事物并且程序各个部分都需要与之通信及交互,(这里面的每个簇都是分类好的事物,已经具备类的雏形),驱动从簇转化成类能够提供一些好处,虽然有很多但是我想重点突出一下几点优点:
1.Inheritance - so far, I've described explained that you can define a class of objects and give it properties and methods. What makes this even more powerful is the ability to define children of that class, which have the same properties and methods, as well as some of their own. They may also want to override the methods or properties of their parent class. In my list of examples, I mentioned 'vehicles.' As you can imagine, there are many different types of vehicles, some of which have very unique properties and things that they can do. If you consider 'pickup truck,' as an example, one of it's properties might be 'bed size,' which wouldn't make any sense when applied to a car or a motorcycle. 
1.继承,到目前为止,我已解释可以定义一个代表对象的类,并赋予该类属性和方法,从而进一步定义该类的子类得以提供更为强大的编程能力,子类通过继承获得同样的属性和方法,这些属性和方法与它们父类完全相同,子类也有可能覆写父类的属性和方法,在我前述的例子中,我提到了“车辆”,大家可以会想到有多种不同类型的车辆,其中的一些车辆具有非常独特的属性和特别能力方法,如果你考虑皮卡车型的时候,例如它的一个可能的属性是“后货仓尺寸”,这个属性如果应用赋予汽车或者摩托车肯定是没有意义的!

2.Dynamic dispatching - If we have an array of similar objects, they likely share methods and properties. In LabVIEW, we create wrappers using VIs to access and modify these values. If we want the wrapper VI for a specific child class to do something different, we can create a VI to override the parent VI automatically. LabVIEW will automatically run the version of the VI that is appropriate for the current class. To put it simply, LabVIEW dynamically runs the VI based upon the class of the object supplied to it - this assumes that the object is a child of the generic class.
2 .动态分配,如果我们有一个包含着相似的对象数组,它们可能共享一些方法和属性。在LabVIEW中,我们使用VIs创建包装器来获取和修改这些值,如果我们需要这些包装器VI来针对一个特殊的子类做一些不同的事情时,我们可以创造个VI来自动的覆写原先父类VI,LabVIEW将会自动的运行与之当前类相匹配对应的VI。简而言之,LabVIEW动态运行VI时是依据这个类的实际对象来匹配(并且还需要确保该对象是通用泛型类的子类)
As a software engineer, it's important to be able to recognize the potential benefits and when the use of classes may make more sense. LabVIEW is almost always used to interface with hardware, so the I/O in your application may be the perfect place to start. Consider these examples:
作为一名软件工程师,重要的是何时正确、有意义的使用类并且有能力识别出这样做(即使用类)所带来潜在的好处,LabVIEW(的开发使用场景)几乎总是用来与硬件设备进行操控,所以在你的程序里有关I/O(输入输出)部分的也许是完美的开始(采用面向对象),考虑以下这些例子,
1.Hardware Abstraction Layers - This white paper on hardware abstraction layersillustrates some excellent examples of the benefits of classes and how they can be used to mitigate the risk of hardware obsolescence. Classes have been defined for certain subsets of functionality (ie: a generic Scope). When a specific instrument is connected or added, it inherits the properties and methods of the parent class, but may add additional functionality (ie: an Agilent Scope could be replaced with an NI Scope, or visa versa).
1.硬件抽象层,关于硬件抽象层的白皮书展示了一些优秀的例程,通过采用类(面向对象)技术获取益处并能够适用于减轻由于硬件设备废型停产而带来的风险,类可以用来定义一些特定功能函数子集(例如:一个通用的示波器类)。当一个特殊的设备驱动被使用或新增时,它将从父类继承属性和方法,子类也有可能增加特殊的功能函数(例如:一台安捷伦示波器可以容易被NI公司的示波器替代,或者通用的VISA驱动)。(备注:这就是接口继承,或者说是契约继承)
2.Devices Under Test - Consider the task of testing a large number of very similar, yet slightly different devices such as cell phones. One production line may be responsible for testing a variety of different types of phones, but they almost certainly all have similar properties. The code can be written using a generic cell-phone class, but the method to execute a specific operation may require slightly different commands be sent to the test executive. This can easily be added later on without major modifications to the code through the creation of a child-class.
2.被测设备—考虑测试大量非常相似的,但略有不同的设备如手机。一条生产线也许是负责测试各种不同类型的手机,但是几乎可以肯定的是各种类型手机都有类似的属性,这段类似代码可以用更为通用(泛化)的手机类来编写,但是一个特定的方法可能需要略有不同的命令用来发送到设备来执行测试。这可以很容易的后期创建一个子类来增加代码,并且不会对原先代码较大的修改。(备注:这就是实现继承的应用)
Personally, I recently adopted the use of classes in my projects - I went back in one of my largest projects and replaced an array of clusters with an array of classes. In my experience, the use of classes forced me to write code that has clearly defined 'ownership' - in other words, my code is cleaner and more modular because I've forced myself to say, 'this function is a member of this class - therefore, it is only responsible for operating upon the data available in this object' - this benefit is often referred to as encapsulation. This helps me avoid unnecessary coupling between sections of your application that make reuse difficult later on.
就我个人而言 ,我最近采用了类(面向对象)技术在我自己的项目中,我重构了一个自己最大的项目,将簇数组用类数组所代替。在我的经验中使用类迫使我在写代码的时候需要清晰的明确“所有权”(及这代码属于谁)-换句话说:这样的代码更清楚和模块化,因为我强迫自己“这个函数是该类的成员”,因此它相应的只能操作该类中的数据成员。-这样的好处常常被认为是封装技术所带来的,这样能够帮助我避免程序区段间的耦合并且降低以后重用的困难
The concept of a class is not unique to LabVIEW. In fact, the use of classes is probably most commonly associated with C++, which was basically C with classes added. However, most modern programming languages, including Java and C#, heavily emphasize the use of classes. Classes were introduced to LabVIEW in 8.2, but have been continuously improved and refined since then.
类概念(面向对象)并不是LabVIEW编程语言所独有的,事实上,使用类(面向对象)往往更加常见的与C++相关联上,C++是基本由C语法并增加了类功能的编程语言。但是,现代大多数编程语言(包括java和c#),非常强调类(面向对象)的使用。类(面向对象)是从LabVIEW8.2中引入的,自此还在不断的改进和逐渐的完善中。
For examples and illustrations of object-orientation at work, check out the following:

  • Creating a class in LabVIEW

  • Changing the inheritance of a LabVIEW Class

  • Object Oriented FAQ for LabVIEW

  • LabVIEW OO: The Decisions Behind the Design

  • Applying Common C Reference Architectures to LabVIEW Using Classes


如果需要面向对象如何使用的例程和说明,可以查看以下的链接

  • 如何在LabVIEW中创建一个类

  • 在LabVIEW类中改变继承

  • LabVIEW面向对象编程常见问题集

  • LabVIEW面向对象编程:设计背后的抉择

  • 在LabVIEW中应用通用的面向对象设计模式

There is a lot more to be covered and discussed on the topic of classes in LabVIEW, including by-reference implementations and Endevo's GOOP toolkit. Look for more in future entries.
上述链接中覆盖了诸多的类(面向对象编程)主题,诸如 by-reference 实现,另外还可以Endevo's GOOP toolkit(工具包)中查找到更多的相关内容。
A final tip: there are a number of settings and options when creating and managing classes, some of which are intended for advanced use-cases. If you're having trouble figuring out how to configure something, I highly recommend consulting the LabVIEW documentation. Also, feel free to post your questions below.
最后的小贴士:当在程序中创建和管理类的时候有大量的设置和管理选项,有一些配置是只适用于较为高级的用户场景。当你碰到如何配置及使用面向对象技术的时候,我强烈建议你查询LabVIEW随机文档。当然也可以在这篇博文下面张贴你的问题。

(全文完)

本文转载知乎大神“李时珍” 

f40bd8e9d4dbfbc1016ee028372ba637.png

更多内容欢迎关注公众号

5fbcf05e25e735f4b18c42c8337ec976.png

喜欢就点个在看再走吧 1657aa2e8245fa9829e1505919b32b7d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华gt2升级鸿蒙,华为手表GT2 Pro已开始内部测试,升级鸿蒙操作系统

据悉,华为鸿蒙应用已经开始在手表上布局。根据鸿蒙OS分布式计算的特点,它最终可以实现手机计算、手表优化显示、功能扩展和续航的需求。而华为WATCH GT2 Pro将成为华为首款支持鸿蒙应用的手表产品,不过要等到10月30日之后我们才能够购买到。在…

flutter 如何判断在哪个页面_Agora 教程:构建你的第一个 Flutter 视频通话应用

作者:张乾泽,声网Agora 工程师我们基于 Agora SDK 封装了 Agora Flutter SDK ,开发者可以在 Flutter 应用中快速实现稳定、可靠的实时音视频通话、互动直播应用。本文将介绍如何使用 Agora Flutter SDK 快速构建一个简单的移动跨平台视频通话…

.net core高并发_高并发下的Node.js与负载均衡

阅读本文约需要6分钟大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了下浅谈前端自动化构建的相关知识,今天跟大家分享浅谈前端自动化构建的相关知识参考…

android arm 寄存器,ARM汇编

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?Android Native 进程启动流程ARM传参,R0-R3传递前四个参数1. Thumb 指令集特点Thumb 指令集指令长度:16或32,16为为主Thumb-16 …

如何制作印章_用Word也能做出逼真的电子印章!简单3步!1分钟搞定

我们在办公的时候经常需要用到印章,以前可能是在纸上盖章,现在电子文档比较多,电子印章也开始流行使用,那么我们如何制作一个逼真的印章呢?很简单,用Word就可以搞定啦!一、印章制作1、圆圈制作首…

鸿蒙唯独没有手机,想用鸿蒙OS,却没有华为手机?华为高层:还有1亿台设备可体验...

不再是PTT系统!鸿蒙OS真的要来了,年内初步实现全场景交互从2019年开始,有关 鸿蒙OS 的消息越来越多,不仅公布了发展规划,也确定将适配多款机型,期待度直接拉满。可惜以目前的情况来看,鸿蒙OS 适…

@kafkalistener中id的作用_SSM框架(十一):Spring框架中的IoC(1)

控制反转 IOC:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection&#xff…

keras优化算法_目标检测算法 - CenterNet - 代码分析

代码出处吃水不忘打井人,分析github上的基于keras的实现:xuannianz/keras-CenterNet​github.com代码主体结构模型训练的主函数流程如下所示,该流程也是使用keras的较为标准的流程。其中代码篇幅较大的是数据准备的部分,通常的代码…

c语言中创建一个整数数组_VBA中动态数组的创建及利用方法

大家好,后疫情时代一定会到来,各行各业,都将是一场战胜萧条的无声的战役。无论怎样,我们一定要坚信,疫情终将会过去,曙光一定会到来。后疫情时代将会是一个全新的世界,很多理念都将被打破&#…

用计算机求函数公式,计算机常用的函数公式有哪些?

01计算机常用的函数公式包括RANK函数、COUNTIF函数、IF函数、ABS函数、AND函数、AVERAGE函数、COLUMN 函数等。RANK函数是Excel计算序数的主要工具,它的语法为:RANK(number,ref,order),其中number为参与计算的数字或含…

golang 读取文件最后一行_python3从零学习-5.4.3、文件输入流fileinput

源代码: Lib/fileinput.py此模块实现了一个辅助类和一些函数用来快速编写访问标准输入或文件列表的循环。 如果你只想要读写一个文件请参阅 open().典型用法为:import fileinputfor line in fileinput.input(): process(line)这将遍历sys中列出的所有文件的行。argv[1:]如果…

云计算机具体应用场景,云计算的定义、类型及应用场景

云计算是20年来IT行业出现的最激动人心且最具颠覆性的技术,甚至比大型主机向客户端/服务器架构的迁移还更具颠覆性。无论是IT服务的交付方式,还是企业消费这些IT服务的方式,都因云计算而改变。用户也正在快速应对新架构带来的变革&#xff0c…

dataframe for循环 筛选_Python循环12种超强写法,又快又省内存

0 前言说到处理循环,我们习惯使用for, while等,比如依次打印每个列表中的字符:在打印内容字节数较小时,全部载入内存后,再打印,没有问题。可是,如果现在有成千上百万条车辆行驶轨迹,…

html5文字飞入插件,jquery使用CSS3实现文字动画效果插件Textillate.js

jquery使用CSS3实现文字动画效果插件Textillate.jsTextillate是一款基于CSS3动画效果的 JavaScript 库,您可非常轻轻松地把这些动画效果应该于网页中的任何文字。使用方法引入核心文件构建html标签My Title写入JS,初始化$(function () {$(.tlt).textilla…

工业机器人导轨 百度文库_工业机器人或许开创一个全新的PLC时代

自机器人诞生之日起人们就不断地尝试着说明到底什么是机器人。但随着机器人技术的飞速发展和信息时代的到来,机器人所涵盖的内容越来越丰富,机器人的定义也不断充实和创新。机器人技术作为20世纪人类最伟大的发明之一,自20世纪60年代初问世以…

银联分账与银联代付_第三方分账系统到底有哪些作用?

随着监管越来越严,业务越来越复杂,所有平台电商企业都需要通过第三方分账系统解决支付清算及二清等问题。作为第三方分账系统行业从业者,整理了部分关于系统的相关问题及解答,希望对大家有所帮助。问题一:第三方分账系…

计算机更改桌面,2010年职称计算机考试:更改桌面背景和颜色

Windows XP提供了各种桌面的颜色和背景方案,用户可以根据自己的爱好进行选择。颜 色充当桌面的最底层,背景覆盖于颜色之上。(l)桌面背景的更改在"显示属性"对话框中,选择"桌面"选项卡。在"桌面"选项卡上有一个"背景"列表框,选择列表框…

dell t40 固态系统盘_笔记本怎么安装固态硬盘 笔记本安装固态硬盘教程【详解】...

首先我不得不介绍一下我这古董级别的笔记本 硬件升级,然后给大家介绍一下笔记本安装固态硬盘的教程。dell戴尔1320,cpu t6500 主频2.1ghz 。内存运用了淘汰的ddr2 分别是两条1g,共2g 800频率。这样的古董用的着用固态么?SATA2.0接口完全成为…

如何进入zabbix的wab界面_如何不用光盘重装系统呢?

如果身边没有系统光盘如何重装系统呢?小鱼系统可以帮助你一键重装系统和U盘重装系统的方法,下面一起看下小鱼系统教你的如何不用光盘重装系统吧。一键重装系统方法1、首先请备份好电脑C盘重要资料,然后打开【小鱼系统】,进入电脑环…

全国高中计算机大赛,2019年含金量最大的中小学全国性竞赛活动——五大学科竞赛...

五大学科竞赛历史是我国含金量最高的中小学全国性竞赛活动,在各高校自主招生过程中,具有较高的参考价值。对相关方面有一定兴趣的同学,也可以积极参与。五大赛面向的对象都是高中学生。一、全国中学生数学奥林匹克竞赛此项竞赛的主办单位是中…