物件導向程式設計為什麼沒有在科學計算領域獲得普及?

時間 2021-05-09 07:15:34

1樓:追尋煉金師的腳步

這個問題大多是歷史遺留問題。

像orca pyscf 這些比較新的量化計算軟體基本都是物件導向寫的。

程式開發也有路徑依賴,需要高手花費很大精力的。

2樓:polossk

換個思路,底層維護乙個記憶體池和計算任務分發器,上層把基本的封裝成計算問題,中間搭建一層從計算問題到計算任務的類似編譯的過程。

目前這套框架我寫的很爽,改得更爽,跑得飛起。

3樓:ivy zheng

針對問題先說兩個現象:

(1)OOP在科學計算中是有的,構建複雜平台自然而然的會用到,但不會作為主要宣傳點,這個後面說。

(2)OOP也跟語言相關,有些語言設計時就沒考慮到OOP的問題,自然難以使用OOP,比如matlab。

這些現象,實際與科學計算的特點、OOP形成的歷史緊密相關。

對於程式設計來說,科學計算與工程問題追求的目標是完全不同的。

在計算機發展的初期,大家關心的主要是執行效率。有了面向過程的語言後,大家都覺得面向過程可以做任何問題,於是專案越來越大,直接導致了一次軟體危機。當年近十個世界頂級軟體專案開發失敗,使人們從執行效率轉向了開發效率,OOP應運而生。

有了OOP,可以做更大的專案。甚至,到目前來說,OOP幾乎無所不能。到最近大家關注維護效率多於開發效率了,技術基礎仍然是OOP。

也就是說,工程問題所關注的開發效率和維護效率,均可以用OOP解決,因此OOP是主要賣點。

但是,科學計算關注的是執行效率,是乙個演算法能跑多快,OOP是犧牲執行效率換取開發效率和維護效率的,自然不會是科學計算的重點。

但如果做科學計算的平台,就涉及工程問題了,這時候OOP被採用也是正常。比如當年魔改賈揚清同學的CAFFE,很明顯能看出要組織這麼大乙個專案,需要OOP在裡面串聯起來。有人會吹噓CAFFE的OOP嗎?

顯然不會。畢竟,能不用就不用,執行效率第一,為了一般化才不可避免的用,它的首要問題是執行效率,你說設計了乙個好的演算法,犧牲了執行效率,那用這個演算法做甚。

總之,科學問題主要解決n很大的情況,執行效率第一;工程問題一般n比較小,硬體的發展完全不在乎那點執行速度,OOP犧牲執行效率換取開發效率和維護效率。兩者追求不同,自然技術路線不同。

4樓:楊贇

物件導向和面向過程聽起來很像CUDA中選擇AOS(array of structure)還是SOA(structure of array)作為資料儲存方式。AOS的想法很自然,多個物件組成陣列,但在很多計算任務中AOS的記憶體組織方式較為凌亂,不利於有效利用cache的資料,因而會導致程式執行變慢。

5樓:flyable

計算庫都是面向直接操作最底層硬體的,能用彙編都不會想用c,你見過寫圖形shader還用物件導向封裝的嗎?

套c++都只是因為計算庫規模變大後普通人腦管理不了。速度才是計算庫的追求。

6樓:逆光

我覺得真正的原因並不是物件導向會影響執行速度,而是會影響程式設計速度。

大多數搞數值計算的都不是科班出身,基本都是邊學邊寫,入門語言的選擇也就那幾個fortran c c++。這裡面有兩個不帶oop,更何況很多老教授寫了半輩子的fortran,讓他再轉其他語言基本不可能。c++基本是現在大多數做數值計算的入門語言了,一般自己寫的,能用三行把公式寫明白誰會花大功夫去寫oop,更何況大多數做數值計算的都是給自己算。

如果想用c++寫oop並保證速度的話,最起碼你要把指標用的賊6。這能是乙個非科班邊學邊寫的水平嗎???還有學並行,openmp,cuda,你要是非把這些都掌握了才開始寫程式,別人都畢業了。

當然,隨著經驗的增加,開始慢慢注重oop,還有很多優秀的數值計算路eign,mkl,不用自己造輪子。

所以我覺得速度和oop並不是衝突的事,但是你讓乙個剛開始一兩年的人既要保證程式的速度,又要有可維護性,而且還要保證本專業的學習,這是不是有點太強人所難了。

當然,我並不是說程式的可維護性不重要,隨著乙個人的經驗的積累,寫出的程式當然越來越好,但是願不願意在回頭改自己的屎山,就是另一回事了

7樓:小說讀者

物件導向程式設計,不是必須的,樓主對物件導向程式設計還不是很理解,1)一些純計算的程式,不適合物件導向,比如計算你們家的水費之類,還有物理過程的程式,比如作業系統的程式,也不宜用物件導向寫,以前在網上,看到乙個人問 linux發明者,為什麼不用C++,覺得也是乙個外行問的問題。簡單地說,物件導向,適合大程式,而且是面向應用,而不是乙個客觀的物理過程。面向應用的程式,往往需要總結成一些抽象概念,比如介面程式,資料處理程式,等等,按人的思維,如果你覺得需要把程式規整成幾個主觀概念時, 那就可以用到物件導向了。

8樓:「已登出」

1、物件導向程式設計在計算科學領域已經得到了普及。

拿計算化學來說,火爆的量化軟體orca和皇族血統的Qchem都用上了c++。分子模擬物件導向已經是完全的主流,gromacs,lammps,NAMD都是c++

2、為什麼這些軟體沒有宣傳oop?這些軟體吃飽了撐的才會去宣傳oop。一款軟體要宣傳的是功能,是速度,用物件導向還是面向過程亦或者是函式式程式設計那是作者關心的事情,向使用者宣傳這個幹啥?

幾時見到office宣傳自己是oop了?

物件導向程式設計比傳統的面向過程程式設計更有什麼好處?

Ivony 我記得OO的流行是因為GUI的流行,傳統的面向過程的語言在編寫和設計GUI應用的時候顯得非常的吃力。將GUI的介面元素抽象為控制項,再使用物件來實現之,比起傳統的面向過程能夠更好的開發和設計GUI的應用程式。物件導向也只是眾多程式設計正規化中的一種,一般認為物件導向比較適合應用於GUI開...

什麼是物件導向程式設計?它與面向過程程式設計的異同有哪些?

張昊 樓上們解釋的通俗且專業,我就說一下我的簡單理解 物件導向 物件就是物體,這種程式設計思想就是設定乙個有一定功能的物體,然後利用這個物體的功能做你想做的事情。這個物體有attributes,比如名字啊,年齡啊等等等等,有methods,比如吃喝拉撒睡等等等等,功能 methods 面向過程 你想...

什麼是物件導向程式設計啊?

lalalalal 不請自來 將物件導向與面向過程比較可能更好理解一點。面向過程是一股腦按照邏輯解決問題,舉個生活例子 學校食堂打飯 似乎暴露了什麼 宣告多個變數如視窗飯菜餘量,視窗等待人數以及打飯者飯卡餘額和在等待佇列中的位置等 打飯者開啟執行緒等待,當等待佇列到了打飯者的位置時,打飯者執行緒開始...