贊助商連結

目前分類:專題學習 LVOOP (3)

瀏覽方式: 標題列表 簡短摘要

在學習LabVIEW物件導向(LVOOP)時,往往資料很多,卻很難從中間找出有用的,這篇整理了一些網路資源,做一些分類,讓學員比較好找出適合自己的學習資源、學習範例、學習的文件等。以下把OOP的文件資源分類成三個等級,學習分享的網站都是以中文網站為主,英文網站為輔,讓出學習的人不會在閱讀上有困難。

初級學習資源: 依照簡易到難的程度排列

  1. LabVIEW Pro 精選文章: 輕鬆理解物件導向

這篇有個淺顯易懂的範例程式,用簡單的例子引導新人撰寫,適合超級新手

  1. LabVIEW_淺談(LV)OOP物件導向是什麼?為什麼要用物件導向?_Part1

這篇強調的是為何要用物件導向,物件導向和平常使用的state machine差別,若是對LVOOP的應用層面有疑慮的人可以閱讀。

  1. LabVIEW_淺談(LV)OOP物件導向怎麼寫?實作範例_Part2

這篇有淺顯易懂的範例程式,還有文字、流程圖講解架構程式,適合超級新人

  1. Getting started with LVOOP

這篇是一篇英文教學,英文文字簡單,並利用大家熟知的的哺乳類動物的例子講解不同物種例如狗、貓、人類等彼此間的繼承關係,另外這篇作者也分享了程式碼可以下載來練習,是一篇很不錯的教材、範例程式。

 

中級學習資源: 依照簡易到難的程度排列

  1. LabVIEW Pro 文章: 簡單工廠模式混合使用範例

這篇有一個簡易而且有註解的範例,可以下載來看簡易的工廠模式架構

  1. LabVIEW Pro專題: LabVIEW 物件導向

著重在如何架構LVOOP程式,由於他範圍比較廣要搭配DAQ來理解,說明文字較少,所以歸類到中級的範圍。

  1. LabVIEW 物件導向程式設計樣式

這篇有很多LVOOP的架構可以參考,會把這篇放在中級程度的人閱讀,是我認為在了解基本的LVOOP功能後、可以多閱讀不同的架構(不一定要採用)來增加程式的彈性和活用度。

 

高級學習資源: 依照簡易到難的程度排列

  1. Design Pattern Part 4

這篇是一篇介紹軟體架構的文章,介紹了4種比較高階的程式架構,其中還包含目前當紅的Actor Framework;而這4種程式架構都是用到OOP的技巧,不過相對於普通的OOP程式,這份資源重視的是架構的應用,建議在熟練OOP技巧後在試著根據專案的不同選擇不同的架構應用。這份文件很清楚的解釋那種架構適合怎樣的專案類型、或是應用層面,是值得收藏的好文。

  1. NI LabVIEW 物件導向程式設計 (Object-Oriented Programming) 常見問題集

LVOOP後再來閱讀的文件,其中解釋了很多相容性的問題。

  1. NI LabVIEW 物件導向程式設計 (LVOOP) 於設計背後所做的決定

LabVIEW底層中LVOOP如何建構、適合使用LVOOP一陣子後的人閱讀。

4.Object Oriented Testcase Executive With LabVIEW

   Object Oriented Alarm Handling With LabVIEW

   Object Oriented Feedback Control With LabVIEW

  最近看到不錯的範例,是針對Log(系統歷程)所開發的OOP應用。

 

 

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

 

文章標籤

安伯伯 發表在 痞客邦 留言(1) 人氣()

前言: 身為 LabVIEW 的開發者,每當我們想要新增功能時,就必須考量到:旗下的多數客戶,皆不是程式設計人員。本技術文章將說明,如何建立簡易的LabVIEW 物件導向程式設計 (LVOOP) 專案,包含使用 LabVIEW 物件導向程式設計的優點與方法,以及 LabVIEW 物件導向程式設計的技術細節與更多資源 此篇承接上一篇LabVIEW_OOP物件導向是什麼?為什麼要用物件導向?_Part1 而寫,建議先複習此篇,再繼續閱讀本技術文章。另外整理了一些國內的中文LVOOP資源:LabVIEW_物件導向(LVOOP)資料、範例程式蒐集整理給大家參考。

在寫程式前,先來說說LVOOP的最核心三個觀念:

1.繼承 (Inheritance)

2.封裝 (encapsulation)

3.多型 (Polymorphism)

繼承 (Inheritance),這個是最好理解的,在父類別裡寫好的方法,子類別繼承下來直接使用,是要達到"程式碼再利用"(Code Reuse) 

至於封裝、多型,可能就比較難解釋,這裡先提一下,後面會再解釋,

封裝 (encapsulation) 每個類別都把屬於自己的資料以及功能放在同一空間稱為封裝。這麼一來比較不會產生「牽一髮而動全身」的狀況,降低模組間相互依賴的程度,也等於是降低複雜度,讓開發與維護更容易。

 

多型 (Polymorphism) 指的是不同型態的物件,由於被呼叫者 (Callee) 有著相同的介面,呼叫者並不用指定特別型別,實際執行的物件動態(Dynamic)決定,藉此增加程式碼的彈性。

 

繼上一篇提到,

客戶需求現在有手機專案要開發,其中有三種不同款式的手機程式,分別是 :一般手機、兒童機、網美機,

它們個別有各自功能的需求如下:

  • 一般手機功能: 撥電話、拍照,文字大小為 20
  • 兒童手機功能: 撥電話、       ,文字大小為 40
  • 網美手機功能: 撥電話、拍照,文字大小為 12,另外拍照須加上美肌功能

 

依照需求整理如下表:

依照這個需求,可以發現三種手機都有撥電話、拍照(兒童機除外)、設定文字大小的功能,而網美機另外還須加上美肌的功能,

若稍微修改一下,加上LVOOP的觀念近,可以把需求稍做改變如下,兒童和網美機繼承了一般手機的撥電話功能,卻又有一些改變,

有了這個架構後,開始來寫程式,首先創立一個Project 叫做:Cell Phone Project

接著在My Computer下面新建立Class: Normal Cell Phone ,也就是這個專案的一般手機

接著要建立的是這物件的方法: Setting設定、Picture(拍照)

對著Normal Cell Phone.lvclass 按右鍵選擇New->VI from Dynamic Dispatch Template 新增兩個動態的的功能叫做:Setting、Picture

這裡會有靜態呼叫、動態呼叫的分別,是因為 撥打電話(Call)在不同款的手機中不會不同,而設定(Setting)、拍照(Picture)會因為手機不同而有所改變,所以選擇動態(Dynamic Dispatch)

創建好後呈現會是這樣,

接著要來"複製"這些功能到不同的手機上,複製兩次分別取名為: Child Cell Phone.lvclass、Beauty Cell Phone.lvclass 也就是本專案的"兒童機"、"網美機"

一切就緒後,要來介紹第一個觀念

繼承

首先我們需要把Beauty Class、Child Class這兩個子物件都繼承父物件Normal

Child Cell Phone.lvclass->Properties->Inheritance->Change Inheritance->選擇Normall Cell Phone->OK,以此類推設定好Beauty Cell Phone

這時候在Normal Class 按右鍵->Show Class Hierarchy,就可以看到Child和Beauty已經在Normal Class下面,可以繼承Normal Class功能

接著,對著Normal Cell Phone.lvclass 按右鍵選擇New->VI from Static Dispatch Template 新增一個靜態的的功能叫做:Call

可以從下面這個動畫看出直接繼承的樣子,可以看到不管哪種Class,Call這個功能都是使用Normal 的撥號方法(綠色),而且Child Cell Phone、Beauty Cell Phone在使用時完全不需要做任何修改,直接引用即可以。

封裝

每個類別都把屬於自己的資料以及功能放在同一空間稱為封裝
另外類別中需要的資料也在專屬的xxx.ctl中

多型

第二個要介紹的是多型,也可以叫做重載、多載

因為網美機在像機部分做了一點修改,所以我們對Beauty Cell Phone 底下的Picture.vi做點修改,我們除了本身一般手機的功能另外還要加上其他進階功能,

加入Call Parent Mehod.vi到picture.vi裡面,去使用父物件的方法(Mehod)

完成後,這樣Beauty Cell Phone的照相功能,不只有原本一般手機的照相功能,另外還加上自己的額外進階美肌功能 (重載)

接著要設定字體大小,打開Normal Cell Phone.ctl在裡面加入Front Size,重複在Beauty、Child也加上Front size,

在Normal Cell Phone->Setting.vi中加入Bundle by Name

接上Class 接角,和Connector Output,完成後如下圖

接著重複在Child Cell Phone Class、Beauty Phone Class 重複此動作,這樣就能達到在不同的物件下做不同的資料設定。

(這裡不使用Data Member Access,後面章節在介紹)

特別針對Beauty Class的功能再加上個別的參數,Beauty Setting

這樣我們在使用Beauty物件裡的功能時候都有專屬的Beauty Setting參數可以使用,這是在其他的物件裡面不能看到的

這樣我們就完成此專案的需求了,試著調換不同Class,就可以看就多型帶來的好處

 

程式碼可在這邊下載,若下載請留言告知,謝謝

 

整理了一些國內中文的LVOOP參考資源:

LabVIEW_物件導向(LVOOP)資料、範例程式蒐集整理

 

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(15) 人氣()

前言: 身為 LabVIEW 的開發者,每當我們想要新增功能時,就必須考量到:旗下的多數客戶,皆不是程式設計人員。本技術文章將說明,如何建立簡易的LabVIEW 物件導向程式設計 (LVOOP) 專案,包含使用 LabVIEW 物件導向程式設計的優點與方法,以及 LabVIEW 物件導向程式設計的技術細節與更多資源 這篇的下一篇是LabVIEW_淺談(LV)OOP物件導向怎麼寫?實作範例_Part2另外我還將國內中文的LVOOP資源作整理LabVIEW_物件導向(LVOOP)資料、範例程式蒐集整理可以給大家參考物件導向(LVOOP)在LabVIEW學習初期,並不是一個很強調的學習項目,初期的程式架構主要為Event+State Machine、Producer Consumer...等架構,但是當程式專案越來越大時,這類程式架構卻越來越不敷使用,很容易讓專案呈現巣狀結構,往往在debug或是維護上造成困難

巣狀結構程式(Nested VI)- 明明程式功能沒有很多,程式碼卻層層包層層,不容易閱讀

 

下面舉個例子,比較OOP架構和普通的Case架構所完成的專案,讓大家比較可以比較其中的差別。

現在有手機專案要開發,其中有三種不同款式的手機程式,分別是 :一般手機、兒童機、網美機, 它們個別有各自功能的需求如下:

  • 一般手機功能: 撥電話、拍照,文字大小為 20
  • 兒童手機功能: 撥電話、       ,文字大小為 40
  • 網美手機功能: 撥電話、拍照,文字大小為 12,另外拍照須加上美肌功能

 

依照需求整理如下表:

依照需求用Case寫後,呈現這樣

展開case的結構:

這時候客戶需求又來了,需要加上第四種手機,而這支是針對網美手機加上超美肌的進階版,另外相機的光圈參數也要加到最大


這樣的修改,看似簡單,但是又要多加上獨立的case來區分不同的美肌模式,程式更改如下:

 

從這樣的程式演變,可以看出在程式不斷修改下,程式越來越多case越來越複雜,變成巣狀結構邁進

 

如果換成OOP 物件導向後程式會變成這樣

從程式簡潔度來看,可以發現OOP寫的程式變簡單許多(這邊呢就不多解釋程式碼,有興趣的人可以到下一篇會做程式的詳細介紹)

如果Case展開,將個別的class帶入用動畫呈現會比較清楚;可以看到如果接上不同的Class,就會產生相對應不同的功能。

 

寫到這裡,有感覺到OOP的一點好處了嗎?  其實LVOOP的優點不只如下,後續介紹如何寫的時候也會慢慢地介紹LVOOP的其他優點,但我必須先強調,並不是所有的程式專案都適合LVOOP的架構,在簡單的程式中使用OOP反倒會讓人閱讀更不容易。

下面擷取一段NI官方的LVOOP常見問題集:
4. 誰應該使用 LabVIEW 物件導向程式設計?

  • 需要長時間維護的 VI
  • 大型應用
  • 於相同 VI 中作業的多個開發者


5. 誰不應該使用 LabVIEW 物件導向程式設計?

  • Express 的使用者
  • 若想以快速、單一的 VI 進行量測,則 LabVIEW 類別 (Class) 的功能過強

 

總而言之,如果你要開始的專案是一個龐大而且多人維護的程式,建議用LVOOP的架構,會讓開發更順利

下一章會針對程式手把手的來教導怎麼做出這個簡易的範例。

程式碼可在這邊下載,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

下面整理了關於LVOOP的參考資料:

LabVIEW_物件導向(LVOOP)資料、範例程式蒐集整理

 

這篇的下一篇是LabVIEW_淺談(LV)OOP物件導向怎麼寫?實作範例_Part2,另外我還將國內中文的LVOOP資源作整理,LabVIEW_物件導向(LVOOP)資料、範例程式蒐集整理,可以給大家參考。

 

如果覺得文章有幫助,請不要吝嗇按下側邊的廣告唷~ 謝謝~

 

學習相關LabVIEW文章:

進階程式學習

基礎程式學習

專題學習_LVOOP

專題學習_動態載入

程式分享相關LabVIEW文章:

基礎程式分享

進階程式分享

股票程式分享

考取LabVIEW證照相關:

CLAD

CLD

CLA準備CLA考題分析

文章標籤

安伯伯 發表在 痞客邦 留言(5) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼