前言
有很多人对LabVIEW OOP存在比较极端的看法,大致分为两类:
1. 绝对否定派认为LabVIEW OOP只不过是LabVIEW为了追求时髦,在面向过程的基础上用簇做了一些特性,实际上完全不必学习
2. 绝对肯定派认为LabVIEW OOP非常好,能解决所有项目中遇到的问题,如代码很难维护,拓展性非常不好等
上面两种观点都有所偏颇,实际上,能在在特定情境下解决特定问题就是好的,工程问题,讲究的是:不管黑猫白猫,能抓老鼠的就是好猫。
既然LabVIEW OOP出现且发展多年有越来越多的人去学习,就说明在特定情景下,LabVIEW OOP更能解决一些问题。那么如何学习LabVIEW OOP呢,从哪里开始,又从哪里结束?
LabVIEW OOP学习阶段
LabVIEW OOP学习不是一蹴而就的,大致学习分为以下几个阶段:
第一阶段:LabVIEW 基础
LabVIVEW OOP的学习前提是你要有至少1-3年的LabVIEW编程经验,能用LabVIEW解决常见的项目问题,毕竟LabVIEW是面向过程的图形化编程语言,如果工具用不好,学习内功心法见效会很慢,甚至连程序都不会写。
第二阶段:LabVIEW OOP基础
如果你学习了LabVIEW,并且可以解决大部分遇到的问题,你可以尝试接触LabVIEW OOP基础知识,这些知识相对来说比较多,如GSDzone中有面向对象的课程,NI官网也可以搜索相关的NI Week视频,NI Community也有一些面向对象的资料。相信能进入第二阶段查找学习资料应该不是问题。
在之前的文章中,我引出LabVIEW OOP的封装特性,这就属于LabVIEWOOP 基础阶段。除去封装特性,还有继承和多态未讲到。
第三阶段:OOP 设计模式
需要注意的是,了解了LabVIEW OOP的编程方法并不代表你会设计OOP程序或者做一个高内聚低耦合的代码。解决问题的钥匙并不在LabVIEW,如果想要在设计思想上进一步,你应当去学习OOP设计模式,从其他语言中找寻设计的灵感,从而规范LabVIEW程序设计。(OOP是面向对象编程,如果想要设计的更好,可以进一步学习OOD,即面向对象设计)
第四阶段:LabVIEW OOP设计
由于LabVIEW并非成熟的OOP编程语言,一些OOP设计模式和用法在移植到LabVIEW中时,会存在各种各样的问题,这时候就需要对LabVIEW中应用OOP有所思考,所幸NI和众多的工程师已经为我们走出了很长一段,GOOP和ActorFramework都为推动LabVIEW OOP设计走出了不同的路线。
本文重点
本文越过了第一和第二阶段,重点给一些想深入学习OOP的一些童鞋一些建议,如果对第二阶段学习有需求的,可以留言,我再补一个文章重点介绍。
对于第三阶段中,我们重点需要学习的是OOP设计中的设计模式,也就是已经形成理论体系的软件工程方法。
第三阶段学习
什么是设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。
需要注意的是,设计模式和设计框架不是同一个概念
设计模式研究的是一个设计问题的解决方法,一个模式可应用于不同的框架和被不同的语言所实现
而框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体
虽然它们有所不同,但却共同致力于使人们的设计可以被重用,在思想上存在着统一性的特点,因而设计模式的思想可以在框架设计中进行应用。
为什么要学习设计模式
在LabVIWE开发程序中,通常会遇到以下的一些问题:
1.项目是一次性的,完成项目后,你将不想再打开以前写过的VI,因为项目渐进明细,代码也越来越混乱,直到最后作者都不想看自己的代码
2.你接手了别人的项目,但是每个人的风格全部不统一,一人一种设计方法,整个程序混乱到无法维护
3.你想要整理一下以前写的比较好的模块,但是模块在不同的项目中应用方法不一样,提取出来的可服用资产只能在工具包层级,而到不了设计层面。
在IT软件设计之初,大家也面临着这样的问题,写出来的面向过程语言各有风格,多人合作时,代码越来越庞大,接口越来越混乱,最终导致程序难以维护,这就是面向过程程序设计中产生的软件危机。
这种无法有序组织大型程序的解决源于OOP编程的产生,OOP设计通过封装、继承、多态等特性,采用系统的代码设计,避免了杂乱设计给软件项目带来的高失败率。
一些好的OOP设计经验被前人给总结,形成了一套设计模式,在设计思想和软件风格上给出了良好的建议。通过对设计模式的学习,则可以让你借鉴别人的设计模式,快速解决特定情境下的问题,从而使代码可维护性和可拓展性得以提高。
设计模式有哪些
百度搜索设计模式会有很多的资料,如果你对感兴趣,可以自己阅读一下,下面是一些常见的设计模式
序号 |
模式 & 描述 |
包括 |
1 |
创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 |
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
|
2 |
结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 |
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
|
3 |
行为型模式 这些设计模式特别关注对象之间的通信。 |
- 责任链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 空对象模式(Null Object Pattern)
- 策略模式(Strategy Pattern)
- 模板模式(Template Pattern)
- 访问者模式(Visitor Pattern)
|
4 |
J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 |
- MVC 模式(MVC Pattern)
- 业务代表模式(Business Delegate Pattern)
- 组合实体模式(Composite Entity Pattern)
- 数据访问对象模式(Data Access Object Pattern)
- 前端控制器模式(Front Controller Pattern)
- 拦截过滤器模式(Intercepting Filter Pattern)
- 服务定位器模式(Service Locator Pattern)
- 传输对象模式(Transfer Object Pattern)
|
下图是各个设计模式之间的关系,可见软件工程理论体系的丰富。
设计模式的学习书籍
如果你有意提高自己的设计思想,推荐两本设计模式学习比较好的书籍:
第一本是Head first设计模式,这本书使用java语言,使用简单易懂的语言,讲解设计模式。这本书对面向对象初学者非常关键,是面向对象思考的入门书籍
第二本是四人帮写的设计模式
这本书相对复杂,提炼了24中常用设计模式,是设计模式类书籍的鼻祖,相比第一本而言,这本书就晦涩难懂,如果啃明白这本书,软件思想将会上一个境界。
如果你有网络,可以去菜鸟教程中学习软件工程中的设计模式
第四阶段学习
这里说明一下,第三阶段和第四阶段不一定非要分开学习,可以针对特定的模式进行第三和第四阶段并行学习,以达到掌握使用的程度。
第三阶段映射到第四阶段中,由于LabVIEW by Value传递数据,无法满足一些设计模式,GOOP和G#做了一些努力实现了大部分的设计模式,其工具包可以在VIPM或者NI官网上下载
在LabVIEW中,为了便于OOP编程,NI推出了ActorFramework,使用ActorFramework可以有序的使用面向对象编程,而且同样采样By Value实现,属于官方工具包
在NI Community有很多学习资料来讲解整个架构的设计思想和编程方法
后记
如果想要学习细节性的内容,或者有想要重点关注的内容,可以后台留言,小黑有时间会进一步深入。
- 【LabVIEW技巧】你可以不懂OOP,却不能不懂封装
前言 大多数写LabVIEW程序的工程师都不是一个纯软的工程师,很多做硬件的.做机械的.甚至学化学的也会学习LabVIEW. 由于主要重心不在软件,所以LabVIEW程序基本上能用行,也就得到入门容易 ...
- 【LabVIEW技巧】策略模式
前言 在之前的文章提到了如何学习OOP以及对应的简单工厂模式,由于时间比较长,我们先回顾一下原有内容,然后继续了解新的模式. 为什么学习OOP 在测控系统的软件开发过程中,LabVIEW工程师一直认为 ...
- 【LabVIEW技巧】LabVIEW中的错误1
前言 前几日,小黑充电学习意外的看到了下面的这个东东. 编程许久竟然没有见过这样子的错误枚举,甚为好奇,问刘大后才知道是Error Ring,为此恶补一下LabVIEW中与错误处理相关的内容. 错误的 ...
- 【LabVIEW技巧】工厂模式_简单工厂
前言 上一个文章介绍了如何学习LabVIEW OOP,简要的提及了一些OOP学习中注意的事项,许多文章的读者反映写的太范,后文会逐步缩小范围,讨论在LabVIEW中各个模式的应用. 工厂模式概述 工厂 ...
- 【LabVIEW技巧】代码块快速放置
前言 之前的文章中介绍了如何使用QuickDrop来实现快速代码放置,今天我们来详细的聊一下如何进行代码块的快速放置. 正文 LabVIWE程序设计中,我们在架构层级总是进行重复性的编写.举一个例子: ...
- 【LabVIEW技巧】路径依赖解除方法
前言 LabVIEW程序开发,让我们的程序设计变的简单容易,但是设计过程中也不乏大量的重复性工作,其中最让人头痛的莫过于依赖冲突问题. 事实上,只要你对文件进行了修改或者移动,必不可少的依赖冲突就会产 ...
- 【LabVIEW技巧】LabVIEW中的错误2
前言 通过上一个文章的介绍,我们发现LabVIEW自带的错误管理依旧比较基础,如果需要对错误进行很好的管理,则需要进一步的进行程序编写. 用于在程序设计的过程中,为了保证程序的健壮性,我们需要 1.忽 ...
- [Labview资料] labview事件结构学习
编程的主要目的是为了实现用户的某种功能,用户通过用鼠标.键盘.程序内部等触发某种程序动作,从而达到某种结果,这些操作都被称作为事件,LabVIEW中相应这些事件最常用的结构就是“事件结构”.事件结 ...
- labview使用场景
测试测量:LABVIEW [6] 最初就是为测试测量而设计的,因而测试测量也就是现在LABVIEW最广泛的应用领域.经过多年的发展,LABVIEW在测试测量领域获得了广泛的承认.至今,大多数主流的测 ...
随机推荐
- 推荐算法相关总结表(包括DM)
推荐算法总结表 表1 推荐算法分类 个性化推荐算法分类 启发式算法 基于模型 基于内容 TF-IDF 聚类 最大熵 相似度度量 贝叶斯分类 决策树 神经网络 专家系统 知识推理 协同过滤 K近邻 聚类 ...
- [luogu3806]【模板】点分治1
description 求树上长度为\(k\)的路径是否存在. data range \[n\le 10000,k\le 10000000\] solution 点分治复习... 使用普通的点分治枚举 ...
- HDOJ(HDU).1058 Humble Numbers (DP)
HDOJ(HDU).1058 Humble Numbers (DP) 点我挑战题目 题意分析 水 代码总览 /* Title:HDOJ.1058 Author:pengwill Date:2017-2 ...
- Mac添加锁屏快捷键
Mac要想添加锁屏快捷键,必须使用Automator. 1. 打开Automator,创建一个新的服务. 2. 在左侧栏中找到 启动屏幕保护 ,将其拖曳到右侧窗口内,并且修改 服务收到改为" ...
- linux tar指定文件到指定目录
项目需求:从远处拷贝压缩文件到本地后并解压,解压后的部分文件拷贝并重命名到其他目录 需求拆分:1.拷贝文件 2.解压文件 3.批量重命名 步骤一查看:http://www.cnblogs.com/dd ...
- 搜索:BFS
如果题目真的要考察宽度优先搜索,那么这类题目往往具有比较大的编码难度,换个说法,就是细枝末节特别多,状态特别复杂.. 剥茧抽丝,这里以一个比较“裸”的BFS作为例子,了解一下实现BFS的一些规范. 直 ...
- J2EE保留小数问题
如果在前台页面,可以直接使用js的toFixed() 方法.number.toFixed(x) 可把 Number 四舍五入为指定小数位数的数字.参数x :必需.规定小数的位数,是 0 ~ 20 之 ...
- 【POJ】1830 开关问题(高斯消元)
http://poj.org/problem?id=1830 高斯消元无解的条件:当存在非法的左式=0而右式不等于0的情况,即为非法.这个可以在消元后,对没有使用过的方程验证是否右式不等于0(此时因为 ...
- quick-cocos2dx lua中读取 加密 csv表
我非常想把一些非必需的信息以CSV表的格式保存到客户端,以减少和服务器的通讯,降低压力.于是写了这么一个. 但因为大家觉得这样的话,需要每次登陆时来检测同步这些数据,会减慢登陆速度,于是没有用到. 我 ...
- VSCode Web Developement for Javascript. Must have plugins.
Es6 Javascript front-end web developemnt must have plugins Prettier - Code Formatter Javascript (ES6 ...