定义一个鸭子的类java_鸭子类型:一切都是为了复用
當小平同志說出“科技是第一生產力”的時候,中國的發展無不是圍繞此展開的。軟件工程亦是如此。雖然小平同志的話只是一個總結。但必須承認,這個總結非常有見地。
軟件發展,你可能已經被各種各樣的名次搞暈了頭。一堆類似OP、OO、SOA等等概念,如果你半年不關心IT,很可能你就發覺被世界遺忘了。
可是推開這些概念的表面迷霧,你會看到,所有這的一切,都是我們在努力提高生產力的結果。而提高生產力的最有效方法就是復用!
從匯編語言的出現,后來高級語言C的出現,面向對象的C++出現,面向類型的動態語言(如Python,Ruby)出現(這是我個人的看法,我若認為動態語言主要是從類型入手進行復用,歡迎指正),個個都是圍繞不同層次的復用,復用二進制指令、復用邏輯、復用對象、復用類型。
這里我特意說一下動態語言中的Duck Type(走起來像鴨子那就是鴨子 it walks like a duck so it must be a duck)。如果說這是一種類型的話,我更愿意稱之為“鴨子理論”。因為不為理論,不足以說明其在思想上的先進性。
def?Sum(aasduck,?basduck):returna+b
上面是一段簡單的語法。如果從實現上講,duck也許只是讓編譯器識別的一個關鍵字而已。代碼執行的時候,會根據duck進行類型推定。但是我們這里講的不是實現,而是藏在duck后面的思想。
那么,為什么要有鴨子出現?回答這個問題很難。因為我們都已經被靜態類型的語言影響很久,甚至可以說毒害不淺,這會讓我們非常難以接受新的思想。
靜態類型中最最關鍵的一點是面向契約編程,即雙方定下調用契約,然后你實現,我調用。這解決了很大問題。可是,你有沒有發現就是因為這點,我可能不能復用很多我原本可以復用的。
談到這里,我先說一下多重繼承。C++語言中一直被人罵的雞肋多重繼承,大家有沒有去想想他出現的根本?原因還在于復用。因為,人們不滿足于只能僅僅復用簡單的個體,很希望能夠吸取多種對象的功能。這和現實是很相近的。一個業務實體往往能夠兼備多種實體的功能。
盡管后來其他語言都是采用接口的機制取代多重繼承,來實現業務實體的多個功能面的契約定義。可是,接口只是解決的契約的定義。另外,對于契約,其實有時候是很不公平的事。這讓我想起一個微軟的認證。
微軟的認證是有階梯約束的。過了初級才能考中級,而不管你是否已經擁有了初級的能力。一句話,你得聽我的!這種契約式的預定,制約了很多已經擁有了能力,但是沒有交錢考試的人!對于他們,這是多么不公平的事?而且,如果有一項任務,必須擁有某種資格認證的人才能做,你是看資質證書呢?還是看能力表現?
這是個非常有意思的問題。如果是你,你會選擇哪個呢?靜態語言選擇了前者,動態語言選擇了后者。
鴨子理論這個時候,就是充分想利用這些沒有獲得契約的資源。在不改變這些對象的前提下,使用這些資源,就是非常大的復用。
所以說,萬變不離其宗!抓住“復用”這點,就能很容易理解很多新技術的背后思想。
我最近在學習動態語言的時候,一直在思考其中的思想。一些感悟,寫出來和大家一起分享。
總結
以上是生活随笔為你收集整理的定义一个鸭子的类java_鸭子类型:一切都是为了复用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 检查 死链接_如何检查网站死链
- 下一篇: 客户成功的起源——SaaS(软件即服务)