LabVIEW程序設(shè)計(jì)模式(一)
我是從LabVIEW的中文版幫助文檔中接觸“程序設(shè)計(jì)模式”一詞的,這個(gè)相對學(xué)術(shù)化的詞語是對一系列用于LabVIEW程序設(shè)計(jì)結(jié)構(gòu)的歸納和總結(jié)。在建造房子時(shí),需要針對房子的用途設(shè)計(jì)整個(gè)房屋的架構(gòu),確保房子在這個(gè)架構(gòu)上的堅(jiān)固性和可建造性。寫程序時(shí)同樣如此,不同的應(yīng)用需要使用不同的程序設(shè)計(jì)結(jié)構(gòu)。例如我們在LabVIEW中構(gòu)建一個(gè)用戶界面型程序時(shí),往往首先在背面板中加入一個(gè)大的while循環(huán)以使程序持續(xù)運(yùn)行。如果需要響應(yīng)用戶界面事件則還需要加入一個(gè)Event事件結(jié)構(gòu)。那么我們是否曾經(jīng)考慮過以下的這些問題:
應(yīng)用中是否存在并行響應(yīng)的情況?如在持續(xù)的數(shù)據(jù)采集過程中,是否需要同時(shí)響應(yīng)單擊菜單的事件?底層獲取的數(shù)據(jù)如何與上層的數(shù)據(jù)顯示部分進(jìn)行數(shù)據(jù)交互?上層的界面如何受底層程序的控制?同一個(gè)循環(huán)中采用哪種方式進(jìn)行數(shù)據(jù)交換?是局域變量、全局變量、共享變量還是移位寄存器?程序是否具有可擴(kuò)展性?如果程序運(yùn)行過程中,發(fā)生系統(tǒng)錯(cuò)誤或者硬件通訊錯(cuò)誤,是否會停止運(yùn)行?待錯(cuò)誤排除后是否會繼續(xù)運(yùn)行?如何組織程序中的核心數(shù)據(jù)結(jié)構(gòu)?是否需要采用面向?qū)ο蟪绦蛟O(shè)計(jì)?如何記錄測試數(shù)據(jù)并生成報(bào)表?如何保存用戶配置參數(shù)?如何處理程序運(yùn)行中的斷電情況?重新啟動(dòng)時(shí)的繼續(xù)運(yùn)行?數(shù)據(jù)的最低丟失?如何實(shí)現(xiàn)運(yùn)行過程的采樣觸發(fā)和多點(diǎn)采樣的同步?當(dāng)然,也許只是使用LabVIEW臨時(shí)地調(diào)試或開發(fā)某個(gè)小的應(yīng)用,無需考慮上述的問題。但是,如果使用LabVIEW開發(fā)一個(gè)典型應(yīng)用的程序卻無法回避這些問題。因此,有必要對各種程序開發(fā)的應(yīng)用進(jìn)行歸納和總結(jié),提取它們對應(yīng)的LabVIEW程序結(jié)構(gòu)中的共性。此外,針對這些共性研究哪種結(jié)構(gòu)更加適合于應(yīng)用。這些結(jié)論綜合起來就形成了程序設(shè)計(jì)的模式。
對于初學(xué)者而言,理解和掌握程序設(shè)計(jì)模式往往能起到事半功倍的效果;而對高級用戶而言,歸納各種程序設(shè)計(jì)模式又能夠不斷完善程序中遇到的問題,并衍生一套符合特定應(yīng)用的特有的程序設(shè)計(jì)模式。