函數式編程與面向對象編程[3]:Scala的OOP-FP混合式編程與抽象代數理論

函數式編程與面向對象編程[3]:Scala的OOP-FP混合式編程與抽象代數理論


之劍 2016.5.4 23:55:19


<div id="category"></div>


Scala的設計哲學

Object-Oriented Meets Functional---當面向對象遇上函數式:

Have the best of both worlds. Construct elegant class hierarchies for maximum code reuse and extensibility, implement their behavior using higher-order functions. Or anything in-between.

典型特征

  • 支持面向對象編程范式
  • 支持函數式編程范式
  • 語法動態簡潔表達力豐富
  • 具備靜態強類型和豐富的泛型

Scala, A Scalable language

Scala,一個可擴展的語言.
Scala精心整合了面向對象和函數式編程語言。

面向對象(Object-Oriented)

Scala是純種的面向對象的語言。從概念上講,每一個值都是一個對象,每一個操作都是一個方法調用。語言支持通過類和特征的高級組件架構。

面向對象編程是一種自頂向下的程序設計方法.萬事萬物都是對象,對象有其行為(方法),狀態(成員變量,屬性).

許多傳統的設計模式Scala已經原生支持。單例模式對應object對象定義,訪問者通過模式匹配支持。使用隱式類,Scala甚至允許你對現有類型類進行操作,無論他們來自Scala或java!

函數式編程(Functional)

Scala也是骨子里透著函數式編程范式的語言。函數是一等公民(當然,這個在你使用面向對象編程范式風格的時候,這個函數公民也只能退后了),不可變數據結構庫等。不變性有助于編寫并發程序.

函數式編程方法通過組合和應用函數來構造邏輯系統.函數式編程傾向于把軟件分解為其需要執行的行為或操作,而且通常采用自底向上的方法.同時,函數式編程也提供了非常強大的對事物進行抽象和組合的能力.

Scala不固執己見;你可以自由使用任何你喜歡的風格。面對有多種不同需求的問題領域,你可以在一個解決方案的不同部分,采用最適合的編程方法.

除了命令式,函數式,還有哪些其他的編程范式?

與JVM的無縫集成(Seamless Java Interop)

Scala在JVM上運行。java和Scala類可以自由地混合,無論他們居住在不同項目或同一項目。Scala可以自由使用java庫、框架和工具。像Ant或Maven工具,IDE如Eclipse或NetBeans,框架,IntelliJ,Spring。

Scala可以運行在所有常見的JVM, 當然還有Android OS。
甚至,Scala都想把前端JavaScript的事情也給干了.

Scala社區是java生態系統的重要組成部分。流行的Scala框架,包括Akka, Finagle, and the Play web framework include dual APIs for Java and Scala.

函數式編程的思想是開發一個小的核心結構,可結合靈活的方式,然后進行組合。

Future-Proof

Scala particularly shines when it comes to scalable server software that makes use of concurrent and synchronous processing, parallel utilization of multiple cores, and distributed processing in the cloud.
未來Scala在可伸縮的服務器軟件,利用并行和同步處理,多核并行使用,在云計算的分布式處理等領域將大放異彩。

Its functional nature makes it easier to write safe and performant multi-threaded code. There’s typically less reliance on mutable state and Scala’s futures and actors provide powerful tools for organizing concurrent system at a high-level of abstraction.

抽象代數理論

每一次“揚棄”都拋棄了一些非本質特征而提煉出更普適的精髓特征,因而每一次抽象都是在透過現象看本質,每一次提煉都是一次質的飛躍和升華,從而使由此得到的新理論更具普遍性與包容性。例如量子力學不僅能解釋經典力學的各種現象,還能解釋微觀世界里特有的(不能被經典力學或經典電動力學解釋的)現象,如AB效應。

直觀感性的形象思維方式:幾何

曾經我很迷戀幾何(各種奇妙曲線和曲面),就像當初迷戀普通物理(各種奇妙現象);現在我轉向理論物理,更愿意從純理性的角度去思考一些本質(透過現象看本質),對數學也因而更偏重代數。代數和理論物理的美是內斂的,就像那種內斂的人,長得很抽象,你不去接近她而只是從外部看看,就不會發現她的魅力所在。

代數與抽象思維

從直角三角形的直觀,到勾股定理的抽象,再到三角函數的演繹,再到傅里葉變換,小波變換,都是思維層次一步步的高層抽象.

抽象有什么好?抽象可以使理論更加普適。什么歐式幾何、仿射幾何、射影幾何、微分幾何… 林林總總,眼花繚亂。它們之間就沒有聯系嗎?有!不識幾何真面目,只緣身在幾何中——必須從幾何中跳出來,才能旁觀者清。這個旁觀者就是代數。

1872年,德國數學家Klein在Erlangen大學的報告中指出,一種幾何學可以用公理化方法來構建,也可以把變換群和幾何學聯系起來,給幾何學以新的定義:

給出集合S和它的一個變換群G,對于S中的兩個集合A和B,如果在G中存在一個變換f使f(A)=B,則稱A和B等價。

可以根據等價關系給集合分類,凡是等價的子集屬于同一類,不等價的子集屬于不同的類。將這一代數理論翻譯到幾何中,相應的版本便是:

集合S叫做空間,S的元素叫做點,S的子集A和B叫做圖形,凡是等價的圖形都屬于同一類(圖形等價類)。

于是同一類里的一切圖形所具有的幾何性質必是變換群G下的不變量,因而可用變換群來研究幾何學——這就是著名的Erlangen綱領,它支配了自它以來半個世紀的所有幾何學的研究。

例如,在正交變換群下保持幾何性質不變的便是歐式幾何,在仿射變換群下保持不變的便是仿射幾何,在射影變換群下保持不變的便是射影幾何,在微分同胚群下保持不變的便是微分幾何。

上面說的是圖形等價關系。代數的普遍性在于,它將各種各樣的相關的、不相關的事物放在一起比較,然后從這些個性的事物中提煉出共性的東西來,比如等價關系。除了上面提到的圖形等價關系,還有各種各樣的等價關系(如同“群公理:只要滿足能封閉、可結合、有恒元和逆元的集合就是群”一樣,只要滿足反身、對偶、傳遞這三條的關系就是等價關系——這樣簡單的條件當然很容易滿足,‘曲不高則和不寡’,所以類似的例子不勝枚舉)

例如,同余等價關系。我們可以按余數給整數分類,余數相同的歸為一類,即同余類。

代數對于普遍性的追求在于,發現同余類后并不就此止步,而是精益求精,進一步去提煉更具普遍性的概念。

既然等價的圖形和等價的余數都可以歸為等價類,何不將等價類做成一個集合呢?由此,又發現了商集(即在一個集合中給定了一個等價關系之后相對于這個等價關系而言的等價類所構成的集合,通俗地說就是將每一個等價類中所有點“粘合”為一個點而得到的集合,如M?bius帶和Klein瓶)、商空間(以同余類為元素構成的集合)、商群(以陪集為元素構成的集合)。

剛才說了等價關系。類似的例子還有很多,再比如說基矢。只要同類的一組元素互不相關,就能充當空間的一組基(將一個量展開為其他量的線性組合,此即泛函分析中的譜定理),哪怕它不是向量(因而生成的不是幾何空間)也無所謂,比如它可以是一組函數(由此生成無限維空間,如量子力學中的Hilbert空間)。甚至,它可以是一個不確定(如無窮小量,要多小有多小但又不是零,到底多大只有上帝清楚)的微分元(比如dx、dy、dz,微分幾何中用到的外微分形式就是用這些微分元為基矢張成的空間——微分幾何運算很復雜,但構成它的理論基礎之一Grassmann代數并不是特別復雜)。

代數的理論是相當普適的。因為它總是通過不斷的抽象來提煉更加基本的概念。

用哲學的話說,便是從具體到抽象,從特殊到一般(例如兩個群,不論它們的元素多么地不同,只要運算性質相同,彼此就是同構的,并且可以因此認為是相同的代數對象而不加區別;不論膨脹、收縮、轉動、反演…都可以統一起來,那就是指數函數;不論弦振動、聲音、流體、電磁波…都可以統一起來,它們在數學中都是雙曲型方程)。


每一次抽象都是一次“揚棄”(留其精髓,去其平庸)的過程。

比如將“距離”概念抽象化而提煉出“單比”概念,進一步將“單比”抽象化而提煉出“交比”概念,于是,從歐式幾何中舍棄“距離不變”而保留更普遍的“單比不變”,得到仿射幾何;從仿射幾何中舍棄“單比不變”而保留更普遍的“交比”,得到一般的射影幾何。

從歐式空間(長度,夾角)到內積空間(模,不嚴格的夾角)再到賦范空間(范,完全拋棄夾角)也是如此,不斷的改良(抽象、提煉),一改再改,但最終改到不能再改時,就完成了一個革命——甚至連范數(最熟悉因而最不愿拋棄的度量或度規)也拋棄了,從不嚴格的距離發展到不確定的距離(鄰域δ,就像前面提到的無窮小量一樣不確定),得到了里程碑式的“拓撲空間”的概念——有史以來最廣泛最深刻的革命!

經由歐式空間的連續函數抽象出度量空間的連續映射,一直到抽象出拓撲空間中的同胚映射,在數學史上經歷了很長時間才完成。無獨有偶,物理學史也是如此。且不說從經典力學到相對論、量子力學(這個過程想必大家都聽膩了),單說相對論本身也是如此。

Einstein說:“為什么從狹義相對論發表到廣義相對論建立又經歷了7年那么長時間?主要原因是,要擺脫坐標必須有直接度量意義這個舊概念是不容易的”。

看來,物理學家和數學家都遇到了擺脫“度量”概念的困難,在擺脫舊概念走向新理論這一點上物理學界和數學界是相通的(數學界走向了拓撲學,物理學界走向了廣義相對論)。


關于作者: 陳光劍,江蘇東海人, 號行走江湖一劍客,字之劍。程序員,詩人, 作家

http://universsky.github.io/?


<link rel="stylesheet" >

<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script src="http://yandex.st/highlightjs/6.2/highlight.min.js"></script>

<script>hljs.initHighlightingOnLoad();</script>
<script type="text/javascript">
$(document).ready(function(){
$("h2,h3,h4,h5,h6").each(function(i,item){
var tag = $(item).get(0).localName;
$(item).attr("id","wow"+i);
$("#category").append('<a class="new'+tag+'" href="#wow'+i+'">'+$(this).text()+'</a></br>');
$(".newh2").css("margin-left",0);
$(".newh3").css("margin-left",20);
$(".newh4").css("margin-left",40);
$(".newh5").css("margin-left",60);
$(".newh6").css("margin-left",80);
});
});
</script>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容