5.5 来自第三方的 LabVIEW 设计模式 —— 面向组件的设计
LCOD )[上]( LabVIEW design patterns from a third
party - a component oriented design (LCOD) )
版本 5 创建于 : 2011-2-8 下午 8:34 作者 jwdz - 最后修改 : 2011-2-18 上午 7:01 作者 jwdz
面向组件的设计模式 —— LCOD(LabVIEW Component Oriented Design )来自于 Jon Conway ,Steve Watts 所著的《 A Software Engineering Approach to LabVIEW 》一书(原版 2003 )。该书的译者:罗宵、 周毅等,中文版书名为:《软件工程方法在 LabVIEW 中的应用》(中译本 2006 年) 。
笔者相信许多 LabVIEW 开好者和开发者都不止一次的、认真的读过此书。但是,从直接的信息反馈
苦涩难懂、不易理解。来看(主要来自网评),大家对此书的内容褒贬不一。甚至有读者认为此书
苦涩难懂、不易理解。
这本书的确不易读懂, 笔者也曾不止一次的读过此书, 尽管某些地方到现在还无法认识和真正的理解, 但是每次认真读后都会有些体会。
笔者认为:本书从软件工程的角度,提出了 LabVIEW 面向组件的设计模式。尽管面向组件的设计模 式在 LabVIEW 的设计中尚未成为主流(或者根本就不会成为主流的设 计方法),但是它的设计思想和原 则会给我们提供很好的设计借鉴。
5.5.1 软件工程中好的软件 —— 松耦合、强内聚、信息隐藏和封装
与基于文本的编程语言相比 LabVIEW 图形化语言似乎天生就具备了好软件的要求,因为图形化代码 本身就具备 —— 松耦合、强内聚、信息隐藏、抽象的特点,应该讲这些特点 绝对是毋庸置疑的。
尽管如此,在图形化设计中,我们还是会遇到这样或那样的问题。比如:程序代码的重用问题;代码 维护的问题、 程序运行是否安全可靠等等问题。 这些问题不是图形化语言特有的 ,而是所有语言都面临的 问题,也就是软件工程所要求的。如果在设计之初我们就按照软件工程的要求安排和思考设计方案,我们 就会将问题降到最少、将问题的影响降到最低。
图形化代码的松耦合、强内聚
松耦合
软件设计中的耦合指 一一程序模块间无关程度的度量。如果两个模块间很少交互,那么我们称之为松 散耦合。如果两个模块间交互程度很高,则称之为紧密耦合。
众所周知,图形化代码是基于数据流运行机制的,所以 VI间的耦合(数据流动)是不可可少、必然存 在的
但是,从耦合的角度来看,人们自然非常希望每个 VI的输入、输岀连线应最少,并且应该将数据处理 过程尽可能的包含在 VI中,输岀仅仅包含最终的有效数据。
书中提供了一个松耦合测量系统的示例。参见下图。
errof in I hd errorSystem
errof in I hd error
System
图-1松耦合示例(中译本-图3.7)
上图所示的测量系统可以完成某测试系统中的所有测量功能。你所要做的就是告诉它要测量什么,在
输岀端就会得到相应的数据结果(这是一个组件)。
在LabVIEW中,最能体现松耦合的实例就是多功能信号发生器。如果已经确定其它参数不会发生改
变,通过枚举常量就可以任意选择输出信号类型: Sine Wave、Triangle Wave、Square Wave、Sawtooth
Wave。参见下图。
Basic FunrtiDr GnraTDrAi
Basic FunrtiDr GnraTDrAi
图-2松耦合的多功能信号发生器
松耦合能够确保整个图形化程序清晰、可读,并且易于理解设计者的目的和用途。应该是每个图形化
程序设计者所追求的终极目标。
但是,在实际应用开发中我们仍然会遇到这样或那样的问题。比如:虚拟仪器本身要求有良好的、交 互式的人机对话用户界面。这样就不可避免的使得数据在人机对话界面和程序框 图中传递,从而导致了 VI 间复杂的数据耦合关系存在。
如何减少 VI 间复杂的数据耦合关系,簇应该是一个很好的选择。因为簇中可以包含众多的同指向的、 不同数据类型的控件。
面向组件的设计可以满足上面的一些要求,也是作者所一再强调采用面向组件设计的原因之一。
下面我们在来看看软件中的内聚。
强内聚
软件设计中的内聚指 —— 软件模块中各组成部分的相关程度强弱的度量。相关程度越强越好。
对于强内聚的理解,作者给出了一个针对内聚而言比较有说服力的测试系统示例。
整个测试系统是由一台示波器和一台信号发生组成,并通过 GPIB 控制和管理示波器和信号发生器以 及整个测试系统。
测试工作为 30 次独立的测试任
原创力文档

文档评论(0)