2011-06-22 56 views
3

OO system是Mathematica面向對象的免費開源軟件包。通過使用面向對象系統,我希望從兩全其美(OOP/Functional)中受益。Mathematica面向對象系統(或其他)?

  • OO的做什麼和不該做什麼 Mathematica的系統?
  • 您是否知道(更好)打開 源替代品?
  • 你願意展示一些你的 面向對象系統類嗎?
  • 關於OOP一般的說法 Mathematica?
+1

你有什麼樣的應用?只需瞭解您可能需要的功能_ –

+0

場景圖管理器 - > 3D可視化器。 –

回答

5

一個免責聲明:我沒有使用任何現有的OO mma擴展(尤其是OO系統),所以這篇文章是基於一般參數(但是我在使用Java時使用了OO,並且使用了一些面向對象的元素,我自己實現)。我同意opinion OO是一個移動的目標,所以你必須在你想要的功能方面更具體,以獲得更有用的答案。它也很大程度上取決於你的目標是什麼 - 你想簡化你自己的生活,做你自己的項目規模,還是你想簡化將由幾個(許多)開發者開發的項目的溝通,以及強制執行某些規則和協議(編碼標準,最佳實踐,設計模式等),還是希望面向對象重用現有的庫。

我認爲,業界OOP的大部分使用都屬於第二和第三類。如果這也是你的情況(我猜想它不是),那麼在Mathematica中使用OOP可能是有意義的,儘管這還不清楚。例如,WolframAlpha在其代碼庫中有數千萬行代碼,並且在那裏使用了AFAIK no OO系統。如果你想爲獨奏開發者帶來好處,那麼我會選擇我喜歡的那些OO功能並自己實現它們 - 即創建你自己的對象模型。這在Mathematica中並不難。

如果使用此擴展構建大量經過良好測試的開源庫和易於部署的機制,使用Mathematica的某些特定OO擴展將會更有意義。我不知道有任何現有的OO mma擴展(這可能是由於我的無知)構建的任何重要的mma代碼庫(庫)。因此,如果您需要面向對象來重用現有的庫,那麼像J/Link或.Net/Link這樣的東西可以更好地爲您提供服務,因爲您可以訪問所有的Java或.Net。

如果你想讓技術擴展你的項目,那麼面向對象不是你唯一的朋友。儘管對於mma來說這可能不是一個很好的探索領域(WRI除外),但其他函數式語言(如閉包,LISP宏,運行時代碼生成等)的某些技術可能適用於mma。例如,我正在開發的mma項目中有一個包含40多個包和10,000多行mma代碼,並且它非常易於管理(WorkBench)。我使用閉包和宏,還有一些面向對象的功能,但沒有任何通用的面向對象的擴展。重要的事情是信息隱藏,失去耦合,可組合性和可測試性,再次,面向對象不是唯一的方法來做到這一點。

IMO,可以通過mma(也許,類似於Python)的OO語言層完成的一件非常好的事情就是隱藏評估者和模式匹配器的複雜性,因爲在很多情況下,這些都是不需要,可能會讓經驗較少的用戶感到困惑。我曾(現在仍然)很少有時會錯過這樣的語言層。這樣的圖層的設計者將面臨一個艱鉅的任務,使它與mma的其他部分真正完美地結合在一起。除此之外,我看到頂級mma中構建的通用OO系統存在兩個主要障礙:性能低下,沒有自動垃圾收集。我認爲,在解決這些問題之前,他們排除了底層OOP的大量使用(創建數百萬個對象等)。 OOP的某些功能對於高級別項目體系結構可能仍然非常有用,但正如我所說的那樣,它們很容易實現。這並不是說你不應該嘗試現有的OO擴展,我只是針對他們將強加給你的代碼的必要限制特別針對mma來減輕他們的好處。

+0

謝謝。 - 我的大部分編程經驗都是用Java編寫的,我最初的「設計」總是在類,屬性和方法方面。我想成爲一名能夠從中獲得經驗的人。使用面向對象系統使我能夠整齊地組織我將要生成的代碼。面向對象系統是開源的,非常緊湊,我可以在需要時維護自己。 - 鑑於似乎沒有太多的用戶羣,我會期待它的問題。我曾嘗試聯繫作者,但他沒有回覆。該網站上的最新活動可以追溯到幾年前,我想他會繼續。 –

+0

在這種情況下,我建議首先嚐試實現你喜歡的面向對象的功能(我會選擇類,繼承,接口,異常,私有和匿名類 - 我在Java中喜歡它們很多, ),保持代碼最小化,然後查看面向對象系統的具體情況 - 以這種方式,您將更好地掌握它。我也很早就決定是要靜態還是動態的輸入 - 根據這個選擇,事情會有很大的不同。另外,我還記得在JAVA中從IDE獲得多少支持 - 在基於mma的OO系統中需要額外的努力。 –

1

您可能還會發現MathOO有趣(請注意,我從來沒有使用它)。

+0

謝謝acl。我還沒有使用它,但是這個產品似乎要求類定義必須在筆記本中進行。 (!) - 我真正喜歡的,來自OO系統的(sofar)是類在單獨的類文件中定義。 (因爲它應該是imho。) - 它看起來來自Maeder教科書的重做。 –

+0

而我不喜歡的是:「您可以在到期日期之前自由使用MathOO 1.0b。」 - 在我的名單上試圖從SAGE內部運行Mathematica,它將Python作爲其母語。它需要一個linux(虛擬)系統的事實讓我感到困擾。 –

相關問題