我初學(xué) LabVIEW 面向?qū)ο缶幊蹋∣OP)時犯的四個錯誤(漫談labview面向?qū)ο螅?/h1>
面向?qū)ο缶幊蹋?span id="qsh1b7padf" class="candidate-entity-word" data-gid="4492978">OOP)是一項(xiàng)功能強(qiáng)大的編程技術(shù),使用得當(dāng)時能夠讓我們的程序?qū)崿F(xiàn)更好的模塊化封裝、代碼高內(nèi)聚、低耦合,并讓程序易于擴(kuò)展,便于維護(hù),從而大大提升開發(fā)效率和降低維護(hù)成本。
LabVIEW于2006年的LabVIEW 8.2版本開始推出面向?qū)ο缶幊谭缎?,在LabVIEW 歷次版本發(fā)布中,不斷迭代,逐漸更新,并在LabVIEW 2020版本中推出接口(Interface)最新功能,使得LabVIEW的面向?qū)ο缶幊坦δ苋遮呁晟啤?/p>
但是,強(qiáng)大的編程武器需要經(jīng)過艱苦的學(xué)習(xí)才能掌握,特別是沒有人指點(diǎn)的自學(xué),更是難上加難!今天我就和大家說道說道:我剛開始學(xué)LabVIEW面向?qū)ο缶幊虝r犯得四個錯誤。
首先,是類爆炸的問題
就是偏好把什么都當(dāng)成了類,造成了過多的、不必要的類,典型的一個不必要的類,就是除了設(shè)置Setter和獲取Getter方法外,就沒有其它特別需要處理的方法,這就是犯了”把數(shù)據(jù)類型直接當(dāng)作了類“的錯誤。
實(shí)際上,類是數(shù)據(jù)類型和功能單元方法的聯(lián)合體,更應(yīng)該強(qiáng)調(diào)功能方法的作用,數(shù)據(jù)類型是作為方法內(nèi)部實(shí)現(xiàn)計(jì)算和暫存狀態(tài)的數(shù)據(jù)容器。另外,從功能方法上劃分上,需要更加聚焦,適當(dāng)?shù)臍w并聚集一下,從而降低瑣碎的小類的數(shù)量。
其次,抽象的本質(zhì)含義理解不透徹
LabVIEW中的類(lvclass),包括LabVIEW 2020版本引入的接口(Inteface)概念,都是用來抽象和封裝相關(guān)編程里的單元元素概念的。而單元元素概念,有時候是和現(xiàn)實(shí)物理實(shí)體概念映射是一致的,這時候就比較好抽象編程。
在入門級別的面向?qū)ο缶幊虉D書中,為了小白好理解和降低認(rèn)知門檻,也是多是使用這些生活中的實(shí)際物體和伴隨場景(諸如:汽車、手機(jī))來舉例示范說明類封裝。但是,該方式也讓初學(xué)者忽視了面向?qū)ο缶幊讨械念惓橄蠓庋b,多數(shù)還是針對純編程元素的概念。如測試文件數(shù)據(jù)的保存、數(shù)據(jù)庫服務(wù)器的操作、界面顯示單元等等。針對這些編程概念的合理抽象封裝,可以更好的實(shí)現(xiàn)對具體變化支持,也是針對抽象編程本質(zhì),從而實(shí)現(xiàn)面向?qū)ο缶幊讨械拈_閉(OCP)原則效果。
第三、在設(shè)計(jì)模式上誤入歧途
初學(xué)者在了解面向?qū)ο缶幊痰某橄?、封裝、繼承和多態(tài)編程基礎(chǔ)知識后,不可避免的就會接觸到面向?qū)ο笤O(shè)計(jì)模式(Design Pattern),我自己也在設(shè)計(jì)模式認(rèn)知和學(xué)習(xí)過程上反復(fù)過好多回。
初學(xué)者最容易犯的一個錯誤就把面向?qū)ο蟮脑O(shè)計(jì)模式讀死,以為了解一下概念,學(xué)習(xí)一下范例,就可以在設(shè)計(jì)模式中輕松的應(yīng)用起來。實(shí)則不然,設(shè)計(jì)模式本質(zhì)是針對某個特殊的開發(fā)場景,使用面向?qū)ο缶幊碳夹g(shù)給出的建議固定套路設(shè)計(jì)方案,而這種設(shè)計(jì)方案在程序開發(fā)整體中是片段化、可組合的,并且其核心內(nèi)涵就是SOLID設(shè)計(jì)原則。
我個人的的建議:就是快速大致的了解一下相關(guān)簡易的設(shè)計(jì)模式(策略、適配器、工廠等)概念后,不要刻意在自己的程序中去采用設(shè)計(jì)模式,而是應(yīng)該更加注重SOLID設(shè)計(jì)原則的應(yīng)用,在實(shí)施設(shè)計(jì)原則設(shè)計(jì)過程中,不斷的迭代重構(gòu)更新程序,不知不覺中,你就會發(fā)現(xiàn)自己的程序較為符合SOLID設(shè)計(jì)原則時,或多或少都已經(jīng)實(shí)現(xiàn)了若干個設(shè)計(jì)模式。
等入了設(shè)計(jì)模式的門后,再有意識地強(qiáng)化學(xué)習(xí)一下難度大的設(shè)計(jì)模式(橋接、訪問者、命令者、狀態(tài)),再結(jié)合一下LabVIEW的經(jīng)典框架(Actor Framework )的源碼閱讀,掌握具體的設(shè)計(jì)模式在應(yīng)用程序中的開發(fā)應(yīng)用。
最后,與眾不同的LabVIEW面向?qū)ο髮?shí)現(xiàn)
LabVIEW的面向?qū)ο?,從?yán)格意義上講,是完全符合經(jīng)典的面向?qū)ο缶幊谈拍畹?,特別是后期的消息驅(qū)動的操作者框架(Actor Framework)。但是為了符合LabVIEW的圖形數(shù)據(jù)流、天然多線程的編程特質(zhì),LabVIEW的類定義實(shí)現(xiàn)為傳值(By-Value)拷貝傳遞的方式。
傳值方式和其它主流的面向?qū)ο笪谋揪幊陶Z言(如Java、C 、C#)傳引用有著顯著的不同。另外,為了兼容性LabVIEW 開發(fā)者的使用習(xí)慣,在一些概念術(shù)語上并沒有約定成俗的遵循常規(guī)套路。
但是LabVIEW的面向?qū)ο缶幊碳寄艿呐嘤?xùn)與教育,又完全離不開其它文本編程語言的各種經(jīng)典內(nèi)容。因此,LabVIEW的面向?qū)ο笾髟O(shè)計(jì)師、編程大神Stephen Loftus-Mercer特意寫了兩篇關(guān)于LabVIEW面向?qū)ο缶幊痰脑O(shè)計(jì)決策技術(shù)白皮書,讓從其它語言O(shè)O知識過渡過來的開發(fā)者,深入理解這之間的差異性,從而更好的適配LabVIEW編程語言。
對這兩篇技術(shù)白皮書感興趣的同學(xué)請移步至知乎進(jìn)行搜尋查看。
另外,我把自己摸索學(xué)習(xí)LVOOP編程過程,寫成了一系列的學(xué)習(xí)文章,這就是《LabVIEW面向?qū)ο缶幊蘝初窺門檻》系列編程文章的由來,如果感興趣,可以去看看我的知乎個人主頁中置頂匯總文章的第五章節(jié)的具體鏈接指向。
最后,希望大家都能夠在學(xué)習(xí)LabVIEW面向?qū)ο缶幊痰缆飞仙僮邚澛?,快速成長!
相關(guān)新聞
面向?qū)ο缶幊蹋?span id="qsh1b7padf" class="candidate-entity-word" data-gid="4492978">OOP)是一項(xiàng)功能強(qiáng)大的編程技術(shù),使用得當(dāng)時能夠讓我們的程序?qū)崿F(xiàn)更好的模塊化封裝、代碼高內(nèi)聚、低耦合,并讓程序易于擴(kuò)展,便于維護(hù),從而大大提升開發(fā)效率和降低維護(hù)成本。
LabVIEW于2006年的LabVIEW 8.2版本開始推出面向?qū)ο缶幊谭缎?,在LabVIEW 歷次版本發(fā)布中,不斷迭代,逐漸更新,并在LabVIEW 2020版本中推出接口(Interface)最新功能,使得LabVIEW的面向?qū)ο缶幊坦δ苋遮呁晟啤?/p>
但是,強(qiáng)大的編程武器需要經(jīng)過艱苦的學(xué)習(xí)才能掌握,特別是沒有人指點(diǎn)的自學(xué),更是難上加難!今天我就和大家說道說道:我剛開始學(xué)LabVIEW面向?qū)ο缶幊虝r犯得四個錯誤。
首先,是類爆炸的問題
就是偏好把什么都當(dāng)成了類,造成了過多的、不必要的類,典型的一個不必要的類,就是除了設(shè)置Setter和獲取Getter方法外,就沒有其它特別需要處理的方法,這就是犯了”把數(shù)據(jù)類型直接當(dāng)作了類“的錯誤。
實(shí)際上,類是數(shù)據(jù)類型和功能單元方法的聯(lián)合體,更應(yīng)該強(qiáng)調(diào)功能方法的作用,數(shù)據(jù)類型是作為方法內(nèi)部實(shí)現(xiàn)計(jì)算和暫存狀態(tài)的數(shù)據(jù)容器。另外,從功能方法上劃分上,需要更加聚焦,適當(dāng)?shù)臍w并聚集一下,從而降低瑣碎的小類的數(shù)量。
其次,抽象的本質(zhì)含義理解不透徹
LabVIEW中的類(lvclass),包括LabVIEW 2020版本引入的接口(Inteface)概念,都是用來抽象和封裝相關(guān)編程里的單元元素概念的。而單元元素概念,有時候是和現(xiàn)實(shí)物理實(shí)體概念映射是一致的,這時候就比較好抽象編程。
在入門級別的面向?qū)ο缶幊虉D書中,為了小白好理解和降低認(rèn)知門檻,也是多是使用這些生活中的實(shí)際物體和伴隨場景(諸如:汽車、手機(jī))來舉例示范說明類封裝。但是,該方式也讓初學(xué)者忽視了面向?qū)ο缶幊讨械念惓橄蠓庋b,多數(shù)還是針對純編程元素的概念。如測試文件數(shù)據(jù)的保存、數(shù)據(jù)庫服務(wù)器的操作、界面顯示單元等等。針對這些編程概念的合理抽象封裝,可以更好的實(shí)現(xiàn)對具體變化支持,也是針對抽象編程本質(zhì),從而實(shí)現(xiàn)面向?qū)ο缶幊讨械拈_閉(OCP)原則效果。
第三、在設(shè)計(jì)模式上誤入歧途
初學(xué)者在了解面向?qū)ο缶幊痰某橄?、封裝、繼承和多態(tài)編程基礎(chǔ)知識后,不可避免的就會接觸到面向?qū)ο笤O(shè)計(jì)模式(Design Pattern),我自己也在設(shè)計(jì)模式認(rèn)知和學(xué)習(xí)過程上反復(fù)過好多回。
初學(xué)者最容易犯的一個錯誤就把面向?qū)ο蟮脑O(shè)計(jì)模式讀死,以為了解一下概念,學(xué)習(xí)一下范例,就可以在設(shè)計(jì)模式中輕松的應(yīng)用起來。實(shí)則不然,設(shè)計(jì)模式本質(zhì)是針對某個特殊的開發(fā)場景,使用面向?qū)ο缶幊碳夹g(shù)給出的建議固定套路設(shè)計(jì)方案,而這種設(shè)計(jì)方案在程序開發(fā)整體中是片段化、可組合的,并且其核心內(nèi)涵就是SOLID設(shè)計(jì)原則。
我個人的的建議:就是快速大致的了解一下相關(guān)簡易的設(shè)計(jì)模式(策略、適配器、工廠等)概念后,不要刻意在自己的程序中去采用設(shè)計(jì)模式,而是應(yīng)該更加注重SOLID設(shè)計(jì)原則的應(yīng)用,在實(shí)施設(shè)計(jì)原則設(shè)計(jì)過程中,不斷的迭代重構(gòu)更新程序,不知不覺中,你就會發(fā)現(xiàn)自己的程序較為符合SOLID設(shè)計(jì)原則時,或多或少都已經(jīng)實(shí)現(xiàn)了若干個設(shè)計(jì)模式。
等入了設(shè)計(jì)模式的門后,再有意識地強(qiáng)化學(xué)習(xí)一下難度大的設(shè)計(jì)模式(橋接、訪問者、命令者、狀態(tài)),再結(jié)合一下LabVIEW的經(jīng)典框架(Actor Framework )的源碼閱讀,掌握具體的設(shè)計(jì)模式在應(yīng)用程序中的開發(fā)應(yīng)用。
最后,與眾不同的LabVIEW面向?qū)ο髮?shí)現(xiàn)
LabVIEW的面向?qū)ο?,從?yán)格意義上講,是完全符合經(jīng)典的面向?qū)ο缶幊谈拍畹?,特別是后期的消息驅(qū)動的操作者框架(Actor Framework)。但是為了符合LabVIEW的圖形數(shù)據(jù)流、天然多線程的編程特質(zhì),LabVIEW的類定義實(shí)現(xiàn)為傳值(By-Value)拷貝傳遞的方式。
傳值方式和其它主流的面向?qū)ο笪谋揪幊陶Z言(如Java、C 、C#)傳引用有著顯著的不同。另外,為了兼容性LabVIEW 開發(fā)者的使用習(xí)慣,在一些概念術(shù)語上并沒有約定成俗的遵循常規(guī)套路。
但是LabVIEW的面向?qū)ο缶幊碳寄艿呐嘤?xùn)與教育,又完全離不開其它文本編程語言的各種經(jīng)典內(nèi)容。因此,LabVIEW的面向?qū)ο笾髟O(shè)計(jì)師、編程大神Stephen Loftus-Mercer特意寫了兩篇關(guān)于LabVIEW面向?qū)ο缶幊痰脑O(shè)計(jì)決策技術(shù)白皮書,讓從其它語言O(shè)O知識過渡過來的開發(fā)者,深入理解這之間的差異性,從而更好的適配LabVIEW編程語言。
對這兩篇技術(shù)白皮書感興趣的同學(xué)請移步至知乎進(jìn)行搜尋查看。
另外,我把自己摸索學(xué)習(xí)LVOOP編程過程,寫成了一系列的學(xué)習(xí)文章,這就是《LabVIEW面向?qū)ο缶幊蘝初窺門檻》系列編程文章的由來,如果感興趣,可以去看看我的知乎個人主頁中置頂匯總文章的第五章節(jié)的具體鏈接指向。
最后,希望大家都能夠在學(xué)習(xí)LabVIEW面向?qū)ο缶幊痰缆飞仙僮邚澛?,快速成長!