【LabVIEW技巧】你可以不懂OOP,卻不能不懂封裝


前言

大多數寫LabVIEW程序的工程師都不是一個純軟的工程師,很多做硬件的、做機械的、甚至學化學的也會學習LabVIEW。

由於主要重心不在軟件,所以LabVIEW程序基本上能用行,也就得到入門容易的稱號。

然而,當程序規模逐漸擴大時,沒有軟件設計思想的輔佐,采用畫框圖方式寫程序便慢慢顯得力不從心,甚至有的人稱LabVIEW程序畫不出來或干脆斷言LabVIEW做不了大程序。

其實,對於我們大多數非軟件工程師而言,所認為的大程序在軟件行業基本屬於中型或者更小的程序。滿足測量測試領域的非大型平台類軟件,LabVIEW是有能力勝任的。

今天小編聊一些虛的東西,雖沒有專業軟件工程師的水准,但是解決測控領域的集成軟件,還是非常實用的。

正文

今天接觸的內容與LabVIEW中的OOP思想相關。

如果你深入調查,LabVIEW OOP在眾多的編程語言中並不是特別出色,但是存在皆有道理,我們也當抱着兼容並濟,吸收各家所長的態度去了解其中的一些 設計 思想。

本文只接觸OOP的三大特性(封裝,繼承,多態) 之封裝,簡單介紹一下LabVIEW程序設計中,如何利用封裝規范軟件。

我一直認為:你可以不懂LabVIEW OOP,可以在程序中不使用OOP的相關內容,卻不能不懂OOP設計的思想。

什么是封裝

在百度百科中,封裝這樣解釋:

封裝,即隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別;將抽象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成“類”,其中數據和函數都是類的成員。

實際上,封裝不是面向對象中的特有概念,面向過程程序設計中也普遍存在封裝特性。

在傳統LabVIEW程序設計中,初學者常將子VI的編寫稱為封裝,這種級別的封裝層級相對較低,其復用度也比較低。在程序函數量較少時 可以滿足設計需求,稍微編寫多個模塊配合的中型程序已經出現結構組織問題

相對而言,如果想要更多的復用,則必須在庫函數或模塊的層級上做出努力。

為什么進行封裝


LabVIEW已經集成設計了大量的工具包,但如何設計工具包或者一些封裝的注意事項你可能從沒有了解過。

函數庫層級設計時,設計一個方便有用的庫除了VI設計技巧,還有一些軟因素需要注意,封裝即是關鍵內容之一。

百度百科對為什么使用封裝這樣解釋:
封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過外部接口,以特定的訪問權限來使用類的成員。

通過對函數和方法的訪問屬性設置,我們可以避免用戶在不知情的情況下錯誤的使用一些私有的方法,從而導致程序運行邏輯錯誤,產生一些意外情況

而且好的庫函數封裝,可以讓用戶簡單易用,不需要過多的說明也可以快速實現特定功能。

怎么進行封裝

在LabVIEW工具包或者庫中,我們通常會有Public和Private屬性,設計程序中,這兩個屬性起到關鍵的封裝作用。

工具包設計中,如果我們准許用戶利用的VI,則將其設置為Public,如果只是工具包內部使用的工具,則將其設置為Private。這樣即可通過屬性設置輕松控制 哪些可以給外部調用,哪些只需要內部調用。

在我程序設計的初期,由於不了解封裝思想,一直無法區分Public Protect Private的區別,所以我的程序大都全部使用Public屬性。這樣在給別人使用工具包的時候,大家都會困惑:“這么多的函數,我只想用工具包還需要全部讀懂嗎?"。另外,由於訪問全部公有,如果一旦亂用我的VI,導致輸出錯誤,我定位問題也會花費很長時間。


為了達到用戶拿到工具包即可使用的要求並且控制其使用方式,減少說明時間和出錯的定位時間,我們可以使用VI訪問屬性來控制外部的調用。

如圖所示,在LabVIEW OOP工具包設計過程中,通過訪問屬性可以控制外部調用規則
1.把希望用戶使用的接口放置於Public屬性下,在任何程序位置均可以調用,VI上沒有任何顏色的鑰匙;這樣如果調用后出錯,可以快速定位出問題的VI模塊
2.把不希望用戶接觸的內容全部放置於Private的屬性下 ,VI上具有紅色的鑰匙,這樣只要外部調用則VI會提示斷線,避免用戶隨意使用VI
3.如果接口需要在子類中繼承和修改,則可以將其設置為Protect屬性 ,VI上具有黃色的鑰匙
3.還有一種是藍色的鑰匙,屬於友元的訪問,這里不再細聊



在程序設計過程中,如果你不確定某一個VI是否需要外部訪問,那么優先設置為Private屬性,避免由於錯誤調用導致系統問題。

當你的代碼和模塊這樣設計的時候,與你合作的同事將會非常輕松,他可以快速知道哪些內容需要使用,哪些內容簡單了解即可。他只看懂PublicVI如何使用即可,出BUG直接找你,由你維護細節即可。在程序配合中,這樣操作實現了特定功能的高內聚,低耦合,一旦底層庫更新,只要PublicVI不變,文件覆蓋即可,代碼的維護也局限於一個小模塊,避免大面積改動。

面向過程中如何使用封裝呢?

如果你不懂LabVIEW OOP,又想要設計一個很好的模塊怎么辦呢?

你可以使用文件夾分類的方法,將你的模塊同樣區分為Public,Private

其中頂層的VI為我們提供了常用的操作,底層的VI則通過內部調用的方式,避免用戶過多接觸;

最外層再放置一些LabVIEW的Demo程序,可以供其他開發人員快速理解程序,這樣程序的可讀性就大大提高了。

下圖是一個德國人寫的工具包,其設計就非常規范
 使用庫函數而不使用類也可以設置訪問的Scope屬性
 

后記

軟件設計就像修行,既要有外功,懂得各個模塊如何使用;也需要有內功,了解一些心法,兩者結合才可以讓你的程序更加的強大。否則,幾招外功就認為天下無敵,總會吃不懂內功的虧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM