LabVIEW Pro 專業論壇-程式分享區-輕鬆理解物件導向
 
     
 
 
 
LabVIEW 討論區基礎教學每月專題分享技術問題精選online Test
技術討論區 程式分享區 教育訓練與認證區 閒話家常區 工作機會討論區 回報區 ✦LabVIEW NXG 特區✦ 高手專訪系列
 熱門關鍵字 
    TOP 資源排行榜    量測概念充電站    3小時內學會 LabVIEW    CLD 考前衝刺    取得 NI 協助
 您的位置:首頁 > 程式分享區 > 輕鬆理解物件導向
  程式分享區   板主:meiae
 之1(9篇)
輕鬆理解物件導向 
 
drinjp

2013 LabVIEW 至尊爭霸賽 Top 20    
暱稱:阿群
經驗值:1584
等級:舵主
發文:6
回文:91
版本:LabVIEW 2011
闖關狀態:
英雄殿
前往地圖:
 
字級設定

"物件導向"這個名詞,我想學程式的人一定都會遇到。
不知道是不是因為翻譯的關係,第一次接觸的人往往都覺得這是很玄的東西。
 
群工第一次學的時候,學長也是叫我先不要在意細節,把物件導向想像成堆樂高一樣。
思考如何把程式碼歸納成一塊一塊的樂高塊(class:類別)。而樂高塊又可以組成一個模組,
模組又可以堆成更大的模組或是成品。
 
接著物件導向通常會提到3件事
 
1. 繼承 
2. 封裝
3. 重載/多載
 
這3個觀念我會以附件的範例來說明。
這個程式是以RPG遊戲的概念來製作,畢竟物件導向真的是太適合RPG遊戲了。
 
範例程式中會有 羊麻吉(Yangmachi) , 羊駝(Alpaca) 這兩個角色,
這兩個角色是從角色範本(CharacterBase)衍生的類別(class)
 
[+]放大圖片
 
 
[+]放大圖片
 
1. 繼承
 
   相信大家都有玩過RPG的經驗,RPG中有各式各樣的角色,例如魔法師,戰士...等等。
   每個角色都有自己的HP/MP值,必殺技。如果新增一個新角色就要重寫所有程式碼
   那就真的太辛苦了。因此物件導向提供了"繼承"功能來解決這個麻煩。
   
   首先先把角色中共用的功能先定義出來
   所有角色都會需要設定HP/MP/Name等屬性
   因此你可以在CharacterBase 中看到以下的vi
  
   SetHP.vi
   SetMP.vi
   SetName.vi
 
   這些VI的功能不會因為角色的不同而改變,在Labview 中可設為 Static Dispatch VI
 
   每個角色又需要定義初期條件以及描繪圖案,
   但這些功能會因為角色不同而需要調整,這些VI我們在原生類別只會定義框架
   (Dynamic Dispatch VI)   
 
   Constructor.vi
   Render.vi
   
   這些VI會在後續衍生的物件被覆寫(這部分會在第3部分說明)
 
   接著Yangmachi跟Alpaca 只要設定了繼承
   就不用寫任何程式碼就可以使用CharacterBase的功能,只需覆寫不一樣的地方就好
   有沒有覺得超級方便 !
 
[+]放大圖片
 
 
2. 封裝
 
    每個類別都把屬於自己的資料以及功能放在同一空間稱為封裝
    SetMP/SetHP 都是屬於角色的功能,因此把它們規納在一起
    另外類別中需要的資料也在專屬的xxx.ctl中
 
[+]放大圖片
 
 
3. 重載/多載
 
    這個部分是物件導向最方便也是神奇的部分
    簡單的說就是你可以把原生類別的功能給覆寫或是加工。
 
    以這個範例來說Yangmachi 跟 Alpaca 的"繪圖"功能在原生類別定義為"render"
    雖然名稱一樣,但Yangmachi 跟 Alpaca實際繪出的東西肯定不一樣。
    所以我們需要覆寫的動作
    因此你可以看見Yangmachi 以及 Alpaca 也有自己的render.vi
 
    接著我們把render.vi 的程式打開來看,你可以看到"Call Parant Method"
    這裡代表的意思是,你除了可以描繪自己的圖形外,
    還可以繼續執行原生物件的render.vi,這時就可以達到加工的效果。
    哪天Yangmachi 持續升級為新的角色,
    需要疊上新的裝飾品時,這個功能就十分的實用。
 
[+]放大圖片
 
 
在DEMO1.vi 中展示了程式碼不變,抽換源頭物件就可以達到不同的結果。
因此以後晉升主管後,你只要定義父類別的架構,剩下就讓部屬繼承去覆寫 (誤?)
 
[+]放大圖片
 
 
[+]放大圖片
 
[+]放大圖片
 
 
看到這邊,也許你還是覺得沒有物件導向也能活得很好,靠著熱血與毅力還是有辦法寫完。
那我們再來看一下DEMO2.vi
 
在RPG遊戲中難免需要組隊,而這個隊伍的人數與職業是可以任意變動。
我想如果沒有把物件陣列化執行的話,應該是會做到哭出來....
 
[+]放大圖片
 
[+]放大圖片
 
 
感謝大家的收看,希望大家不要再被物件導向這個名詞給嚇到了。
 
 
  
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
附件檔案:    
LVOOPDemoforLabviewProv2010.zip
LVOOPDemoforLabviewProv2016.zip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  文章人氣: 5542 讚:10 文章日期:2017/12/20 12:30
mingyenwei

暱稱:銘延
經驗值:2922
等級:總舵主
發文:6
回文:845
版本:LabVIEW 2013
闖關狀態:
飄渺嶺
前往地圖:
1樓
字級設定

好棒的文章,還有那個羊駝大頭照為什麼那麼**!!

(為什麼 可 愛 會被擋住Q_Q?)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2017/12/14 15:44
joannachen

暱稱:Jo
經驗值:4901
等級:總舵主
發文:220
回文:1124
版本:請選擇
闖關狀態:
迷霧之森
前往地圖:
2樓
字級設定

可 愛 可能成為色 情 文關鍵字,被我們過濾了~哈

 

 

引言自 mingyenwei:


好棒的文章,還有那個羊駝大頭照為什麼那麼**!!

(為什麼 可 愛 會被擋住Q_Q?)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:1 文章日期:2017/12/14 15:58
drinjp


2013 LabVIEW 至尊爭霸賽 Top 20    
暱稱:阿群
經驗值:1584
等級:舵主
發文:6
回文:91
版本:LabVIEW 2011
闖關狀態:
英雄殿
前往地圖:
3樓
字級設定

因為提供給我圖的插畫家太厲害了呀!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:1 文章日期:2017/12/14 17:22
giraffe

暱稱:giraffe
經驗值:793
等級:高手
發文:5
回文:71
版本:未使用過 LabVIEW
闖關狀態:
冰火山
前往地圖:
4樓
字級設定

抱歉,想請教版主

請問 CharacterBase.ctl 跟 Yangmachi,ctl 與 Alpaca.ctl 

不是應該要是同樣的東西嗎?

為什麼 Yangmachi,ctl 與 Alpaca.ctl 跟父那邊不一樣呢?

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2017/12/14 20:38
drinjp


2013 LabVIEW 至尊爭霸賽 Top 20    
暱稱:阿群
經驗值:1584
等級:舵主
發文:6
回文:91
版本:LabVIEW 2011
闖關狀態:
英雄殿
前往地圖:
5樓
字級設定

Hi giraffe:

 

CharacterBase類別的資料空間(CharacterBase.ctl)會被繼承 ,

但Yangmachi,ctl 與 Alpaca.ctl 是衍生類別自己的資料空間,我做個類別的示意圖你會比較清楚

[+]放大圖片
 

 

在LVOOP的設計中,資料空間只能是私有的。衍生類別不能直接存取父類別資料

(可以想像成CharaterBase.ct 存在在Yangmachi class 中但不能直接連結CharaterBase.ctl)

必須設計accessor VI去做存取。所以你會看到SetHP/SetMP...等vi去存取父類別的資料空間

Yangmachi.ctl 就是放羊麻吉的圖檔資訊,因為這不是所有角色必須共用的資料,

因此沒有設計在父類別中。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:1 文章日期:2017/12/15 09:35
polung


2013 LabVIEW 至尊爭霸賽 Top 3    
暱稱:polung
經驗值:4258
等級:總舵主
發文:21
回文:594
版本:LabVIEW 2015
闖關狀態:
英雄殿
前往地圖:
6樓
字級設定

不錯的範例耶!

 

但重載 (override) 我會將它歸在繼承裡,所以我在教 OOP 是從抽象、封裝、繼承以及多型這四個特性來談,你的 CharacterBase 算是抽象層,封裝基本的資料和方法讓底下繼承的類別使用或重載,最後將底下繼承的 Yangmachi 和 Alpaca 的物件可以放在一起 Build Array 就是多型的特性。

 

FGV 其實也有封裝的味道,但它少了繼承,重用性就差很多了,所以我開始寫 OOP 之後就沒在用 FGV 了,哈!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2017/12/15 11:48
jordanwu21

暱稱:Jordan
經驗值:1112
等級:堂主
發文:8
回文:161
版本:LabVIEW 2010
闖關狀態:
飄渺嶺
前往地圖:
7樓
字級設定

超級淺顯易懂的範例RRRRR

跪求樓主大大提供2010版本 ...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2017/12/19 11:46
drinjp


2013 LabVIEW 至尊爭霸賽 Top 20    
暱稱:阿群
經驗值:1584
等級:舵主
發文:6
回文:91
版本:LabVIEW 2011
闖關狀態:
英雄殿
前往地圖:
8樓
字級設定

重新上傳了一個版本....突然發現忘了改資料夾名稱跟刪掉一些垃圾。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2017/12/20 12:32
olitec83

暱稱:Paul
經驗值:2659
等級:總舵主
發文:3
回文:400
版本:LabVIEW 2010
闖關狀態:
英雄殿
前往地圖:
9樓
字級設定

好文,只能頂上去了

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2018/10/16 15:16
 之1(9篇)
 
 
   會員中心 
帳號:
     
密碼:
     
  以後自動登入
 
註冊
   待回覆文章 
1. 讀取TDMS 2D矩陣後再濾波
 
   Top 5 熱門討論 
1. 矩陣中數值極限為何?
2. 使用ULN-2803 驅動高壓幫浦
3. 如何讓元件輸入任何數之後,control 元件中顯示空白?
4. 讀取TDMS 2D矩陣後再濾波
 
 
 
LabVIEW討論區 站長信箱 關於我們 站內聲明
國家儀器股份有限公司贊助;Sponsored by NI.
© 2010 National Instruments, Taiwan. All rights reserved. design by begonia