Matlab面向對象編程是否值得大量使用?
我做過幾年C++,感覺Matlab的OOP速度不如C++的OOP,比C++OOP更容易繞暈新手。不知道實際使用中,如果不製作工具包,單純做演算法的話,matlab的OOP是否值得花力氣學習和大量使用?
代碼如果超過200行的話,oop完全值得。速度上不應該和c語言比,而應該和MATLAB面向過程相比,以我的經驗,一般慢個10%.(運算核心部分,即最耗時的部分,不要用面向對象編程)但是,oop帶來的可維護,思路清晰的優點完全可以彌補這微小的性能差異。MATLAB的oop幾乎覆蓋了oop所有應該有的特性。強烈推薦使用。
推薦使用MATLAB R2015b以上的版本,因為MATLAB的oop速度顯著提升。
推薦教材《MATLAB面向對象編程-從入門到設計模式》, 我是靠它入門的。關於性能方面,最新版本R2015B升級了matlab引擎,全面提升了效率,在Release Notes 中有說:The new MATLAB execution engine includes performance improvements to function calls, object-oriented operations, and many other MATLAB operations.Release Notes for MATLABMATLAB 執行引擎不過具體有多少提升,我好像還沒有看過專門對比OO部分的測試。關於要不要用OO這個主要你自己來回答吧,如果你現在做的事情,例如你說的「單純做演算法」已經可以做得遊刃有餘,那不學OO也沒什麼關係吧。要學的話MATLAB的OO應該也不算難,下邊是OO的文檔的PDF版本:https://www.mathworks.com/help/pdf_doc/matlab/matlab_oop.pdf
作為《MATLAB面向對象編程-從入門到設計模式的作者》,如下的問答可以幫你大致了解在MATLAB中面向對象編程的能給你帶來什麼
【問題】我是理工科學生,MATLAB用的很熟練,我有必要學面向對象編程嗎?
【回答】我們的書籍主要面向的就是理工專業的學生學者,我們希望通過介紹MATLAB OOP來幫助他們更好的解決科研中的問題。或許你曾有這種感覺: 在科研和學習中,寫的程序一但到達一定的規模,維護起來就會很困難, 調試越來越慢。隨著 科研項目不斷有新的要求,程序在不斷的修改和擴展; 函數多達上百個; 一旦有修改則牽一髮則動全身; 有的時候甚至需要做傷筋動骨的修改。MATLAB 的面向對象編程和設計就是專門幫你解決中這種問題的,我們這本書的重點不是介紹一個函數或者技巧,這本書的重點是怎樣從整體上去設計我們的程序,小到一個家庭作業,一個兩個星期的項目,大到碩士或者博士的畢業設計,一個大型的多人合作的項目。面向對象的思想讓你從繁重的程序維護中解脫出來,讓你的注意力放到真正需要解決的問題之上,把需要解決的問題解決好。再次重申,我們不是為了學習面向對象而學習面向對象,作為科研人員,我們都以高效務實為目標,如果一個技術能夠讓我們投資少量的時間去學習,並且學會了之後讓我的科研工作如虎添翼,讓我有更多的時間做其它事情,何樂而不為呢。【問題】面向對象編程難道不是只有計算機專業的人才用的嗎?
【回答】計算機專業背景的科研人員使用面向對象語言編程是一個自然的選擇,因為面向對象可以更好的幫它們解決軟體設計的問題。但是面向對象的方法並不是軟體行業所獨有的,面向對象可以被任何學術背景的研究人員使用,適合解決各個行業的學術問題。由於目前主流的面向對象語言比如C++ JAVA學習周期比較長,面向對象的方法和設計思想被繁瑣的語法隱藏了起來,大多數非CS專業背景的研究人員沒有這樣的時間和精力去先學習C++和JAVA的語法,然後再學習面向對象的編程思想,進而再使用的實際的科研工作中來。而且在科學工程計算中,MATLAB才是主流的語言。MATLAB從2008a之後開始真正的支持面向對象編程。MATLAB的提供了這樣一個寶貴的機會,它能夠讓我們避開繁瑣的語法,直接接觸到核心的面向對象和設計模式的思想。所以這句話應該這麼說,使用MATLAB語言,你不需要CS的專業知識也能學會面向對象和實際模式。【問題】MATLAB已經很簡單了,為什麼我還要學面向對象的MATLAB
【回答】MATLAB致力於提供給用戶簡單的語法,使得用戶上手快,編程語言和實用語言更加的貼近自然語言,但是這並不代表我們要解決的科研問題是簡單的。面向對象是一種系統化編程的思路,教你一開始就去系統化的設計你的程序,設計模式給你提供了十幾種解決複雜問題的套路,如果你能把這些套路使用在你的科研工作編程中,你的科研工作必將如虎添翼。【問題】學習MATLAB面向對象需什麼樣的基礎
【回答】我們寫本書的目的就是要做到讓具有初級的MATLAB語言基礎的讀者能夠迅速地一步到位把面向對象的思想滲透到自己的編程習慣中去。其實只要懂得什麼是變數,什麼是函數,就完全能夠開始學習MATLAB OOP了。對於有經驗的讀者,就是那些熟悉MATLAB語言和各種toolbox的讀者,我們的MATLABOOP書能夠讓他們更深入的了解MATLAB的體系,提高自己的對程序的總體設計,做到事半功倍。【問題】面向對象編程是不是要花很多時間學啊?我還有研究課題要做,沒有這麼多時間啊
【回答】本書的作者都是理工科的背景,秉持高效務實的做事風格,完成每一項工作都非常的注重成本,也就是所花的時間。我們完全沒有興趣編寫一本全面詳盡,但是閱讀起來費時費力的書,這樣的書也不會受到我們目標讀者的歡迎。讓讀者用最短的時間入門面向對象,讓讀者用最小的成本學會面向對象的中級基礎,並且能夠順利的進入到編程思想的學習當中去,越過面向對象語法上的障礙,真正的享受使用面向對象的編程方法。才是我們的目的。我們還盡量的讓書中內容的編排便於查找,讀者完全可以跳躍性的閱讀自己需要的內容,當工作變得複雜,需要更多MATLAB面向對象編程語言特性的時候再會夠頭來查找。【問題】面向對象編程難學么?或者說,我要學多久才能用到實際的 編程中
【回答】面向對象的思想並不難,但是目前主流的面向對象的語言比如C++和JAVA,在語法上的繁瑣使得面向對象這塊寶藏被隱藏在了各種語法規定的後面。MATLAB的面向對象語言的支持提供了前所未有的機會,讓我們能夠迅速的越過這些障礙,真正學習編程的思想。眾所周知,學習一門語言不但需要學習語言的語法,還需要不停的實踐。 對於廣大的研究人員,MATLAB是一門主流的科學計算的語言,你學習了MATLAB 面向對象的語法,第二天就可以直接使用到自己的科研編程中去,哪怕是一個簡單的擬合,做圖,你都可以用使用OOP的思想把你的程序組合起來,你自己的科研就是實踐編程思想的最好的平台,好的編程思想可以讓你的科研工作事半功倍。MATLAB 作為一個高級的工程科學計算軟體,給你提供了前所未有的,在以往只有CS專業背景的人才能夠具有的實踐編程思想的機會。【問題】MATLAB的面向對象編程和C++和JAVA的面向對象編程有什麼不一樣嗎?
【回答】MATLAB作為一個商業軟體,提供面向對象編程的支持,這和C++和JAVA有本質的不同,C++和JAVA給用戶提供"基石",用戶需要花大力氣去首先學習其語法,然後學用這些"基石"的組合來解決複雜的問題,這需要一個較長的學習周期才能上手,這需要相當深厚的基礎知識和時間,而大部分的科研工作者沒有這樣的時間和精力去專門學習一門語言來幫助他們解決問題。MATLAB提供了這樣一種渠道,把這些基石進行相當複雜的組合,然後當作一個語言的特殊功能提供給用戶。我們只需要多這些特殊功能稍加了解,就可以很快掌握,這是一種務實的精神,我們需要在有限的時間內,以最高的效率完成任務。本書還會簡單解釋一些這些特殊的功能是來自何方,大概是怎麼實現的,目的是為了幫助讀者更好的使用這些功能。【問題】面向對象編程和書中的設計模式是一回事嗎?
【回答】面向對象是相對於面向過程的一種編程方式,設計模式是建立在面向對象基礎之上的針對一些常見的複雜問題的抽象解決方法。問題再複雜,都可以被分解成小的部分加以抽象,然後使用設計模式來高效的解決。有的時候是多種設計模式的結合。【問題】MATLAB面向對象不是有一本英文的用戶手冊嗎,你們的這本書和這本英文手冊比有什麼優點【回答】本書部分參考了英文MATLAB面向對象的用戶手冊中的內容,並在此之上做了大量的改進,使其能夠為更多理工科用戶學習和閱讀。具體說來,:首先這本用戶手冊有500多頁英文,通讀起來不是一件容易的事情。第二它只介紹了基本的MATLAB基本的面向對象技術,沒有介紹設計模式,而設計模式才是真正利用OOP的試金石。第三因為OOP的編程和設計模式已經是很成熟的技術,我們還參考了大量的C++,JAVA的面向對象的編程書籍,和設計模式的書籍,我們有信心這本MATLAB OOP的數據將比MATLAB OOP的英文手冊更加的面向中文讀者,而且學習和閱讀的成本很低,就是說我們的目的就是讓讀者花很少的時間和精力去學習並且掌握MATLAB OOP.絕對值得學,我是拿matlab做量化投資的,面向過程的話一個策略需要寫一遍代碼,能把人寫吐。但是面向對象不一樣啊,把數據調用這一塊寫成類,需要什麼策略直接修改幾個地方,一個全新的策略就出來了,而且需要加什麼功能,直接在屬性和方法裡邊修改添加,不需要推倒重來。不知道你是幹什麼的,以我學面向對象來看,最好的辦法不是看書,而是找老司機教你用法,這個很快就學會了,時間成本極低,不過你要是打算精通學會的話,這個可能要費事點。
雖然OOP是個好東西,但作為Matlab老司機,還真不知道Matlab到底在哪些領域應用時一定需要抽象成OOP才好理解……
值得!特別是如果做得工作是長期性、帶有探索性的,非常值得
設計一系列抽象得好的類有助於以後工作的開展,都是數組、元胞的話,留下的程序拓展性不好,有新想法很難迅速得到驗證,不利於後續工作。
我讀研時候做實驗系統的一些特性分析,就感覺到這裡問題,新想法往往是在得到一些抽象的特徵數據之後誕生的,需要在這些數據中進一步進行抽象以及其他分析。但是繼續利用這些數據都要重構程序,思路又不能中斷,到畢業前半年開始寫大論文之前最後一次重構時候,連續一個星期都要熬到自己困了才能停,思路斷了就一點效率都沒有。所以後來就開始考慮OO,而且安利師弟接著做的時候用OO,只從自己的遺產裡面把數據處理的函數抽過去用。
比起寫又臭又長的注釋,OO一層層抽象之後,更容易方便接手的人理解再拓展在題主 「如果不製作工具包,單純做演算法的話,matlab的OOP是否值得花力氣學習和大量使用?」的限定前提下,Matlab OOP 不值得去學和用。一是速度慢二是語法累贅繁瑣三是Matlab的精髓在多維數組數值計算,這一塊和OOP其實先天不合。OOP最適合的是用戶界面GUI開發。
推薦閱讀:
※R相比於matlab有哪些優勢?為什麼現在被越來越多的使用?
※學習 MATLAB 有哪些書籍是值得推薦的?
※數學建模一般用哪種軟體比較好?MATLAB是否有局限性?
※matlab中運行gpuDevice為什麼那麼慢?
※求推薦matlab編程比較好的書籍?