純粹的面向對象語言比不是純粹的面向對象語言比起來,有什麼優點?
01-08
pure object oriented language (like Scala)和不是純粹的object oriented language(Like Java, C++)比起來有什麼優點?或者說為什麼在設計語言的時候,會選擇設計為pure object oriented?
scala 在知乎被黑的最慘的一次....
大概是自豪感比較強吧。
scala一點都不pure嗎,明明除了object oriented以外還有那麼多其他東西。pure的明明應該是Java。你看Java用起設計模式就一點多餘的想法都沒有,不像別的面向對象語言,還有那麼多更好的東西可以用,就會造成學習設計模式的時候,思想不堅定(逃
首先,面向對象是思想,具體的語言只不過是「語法是否更偏向」以及「風格和規範上是否更傾向」OOP,你用C寫代碼,一樣可以通過自己折騰虛表的方式弄出OOP風格,而就算用java,也可以純static方法編程,關係都不是很大
至於說優劣,個人覺得如果一個對象的數據(或設計,比如介面實際不含數據)就能決定它能做什麼,則用OOP,擴展性什麼的好一些,這個不廢話但是如果對一個數據本身可能有各種處理,但你又不可能將其全部實現抽象為方法介面,那麼可能面向過程會更好一些,比如,我們計算平方根:result = sqrt(x)
用OOP的寫法,就是result = x.sqrt()但如果哪天我們需要一個計算立方根的呢,或者其他數學運算,則後者的話,我們可能需要給x的類型添加上相關的方法,因為並不是所有方法都可以在定義x的類型時候完全確定,而且對需求方來說,x的類型很可能是封裝好無法修改的,更進一步的,假設這裡x的類型並非是一個具體的類,而是一個Number介面,引用的對象可能是Integer,Float浮點,Decimal十進位浮點,定點小數,以及可能是複數等,如果給Number加一個介面,則下面所有類都可能編譯不過這時候使用面向過程,只需要新增一個函數,用x做參數即可,只要x提供一些get類的方法能暴露具體細節,讓外部來計算有的語言比如go,可以在不修改原類定義的情況下給類(go的是struct)添加方法,算是能進一步,不過也就是語法糖了
用一些設計模式或許也能解決這類問題,不過我不是很熟,而且估計也比面向過程編程裡面加個函數麻煩很多我只知道「純」面向對象有什麼缺點本來
x = a.v;
就能解決的事大概要寫成
x = A::create(a.getValue());
Code Mesh 2016上Alan Kay已經欽定了Erlang才是純面向對象語言
純面向對象性能有問題,Elixir這種管道方式效能更好。
smalltalkEverything is Object
學習一個去意識形態化吧,少年
居然說Scala是純粹OO,官網標題上面好大的字
沒有任何優點,又臭又長又冗餘
1.純。2.蠢。
那個純是廣告詞,如果非要在面向對象前面加個純字,我覺得是smalltalk
推薦閱讀:
※c++里如何理解vector是動態數組,而這個單詞本義是向量?為什麼這麼叫?
※誰能介紹一下清北的信科體驗營的基本情況?
※為什麼埃式篩法的時間複雜度是O(nloglogn)?
※數學基礎課在計算機領域的應用有哪些?
※車萬翔是誰?在他的背後又有哪些傳奇經歷?