為什麼物件是大勢所趨?
The Power of Interoperability:Why Objects Are Inevitable一文談了物件導向為什麼如此取得成功的本質原因是什麼?是協同的魅力。
以前物件的本質被看成是資料結構,如果資料結構確實是物件本質,難道是這樣才促成物件導向今天如此成功嗎?
作者認為這個原因是源自於服務的抽象,這種服務的能力可以被擴充,這種擴充具有協同的。而協同性正是可重用以及現代軟體模組化的重要基礎。
文章對這個觀點進行了嚴密的論證,首先作者區別了物件和抽象資料型別ADT的區別:
假設有一個物件型別:
而ADT如下程式碼:
或者用如下Java程式碼:
ADT相比物件缺少的是interoperability協同性或稱互操作性或共同操作性,如果我們再定義一個與inSetA有共同介面的不同類叫IntSetB,如下:
IntSetA和IntSetB並不能比較它們的內容,因為它們是不同的抽象型別,也不是互為子類等情況。
而比較之前的IntSet1和IntSet2它們是共同繼承一個介面,所以,它們能夠進行相互比較。
interoperability的定義:是計算機系統執行來自不同開發商開發的應用程式能力,不管作業系統或物理架構如何,這些程式都可以跨本地和其他計算機互動工作。
物件除了資料以外,還有行為Behavior, 訊息Messages,和服務Services
關於服務抽象,文章以Servlet和Android的ContentProvider為例說明。
如果沒有服務的抽象,將會按照不同的內容性質將輸入的請求分發到不同的內容提供者,每個應用都必須重新實現這些程式碼,這使得協同性interoperability非常困難,降低了整個經濟系統的價值,使用物件進行服務的抽象著重重用,使得內容提供框架能夠被重用。
以前物件的本質被看成是資料結構,如果資料結構確實是物件本質,難道是這樣才促成物件導向今天如此成功嗎?
作者認為這個原因是源自於服務的抽象,這種服務的能力可以被擴充,這種擴充具有協同的。而協同性正是可重用以及現代軟體模組化的重要基礎。
文章對這個觀點進行了嚴密的論證,首先作者區別了物件和抽象資料型別ADT的區別:
假設有一個物件型別:
type IntSet = { bool contains(int element); bool isSubsetOf(IntSet otherSet); } class IntSet1 implements IntSet { ... } class IntSet2 implements IntSet { ... } // in main() IntSet s1 = new IntSet1(...); IntSet s2 = new IntSet2(...); boolean x = s1.isSubsetOf(s2); <p class="indent"> |
而ADT如下程式碼:
module SetModule1 { // implementation... } with signature { type IntSet; bool contains(IntSet set, int element); bool isSubsetOf(IntSet s1, IntSet s2); } <p class="indent"> |
或者用如下Java程式碼:
final class IntSetA { bool contains(int element) { ... } bool isSubsetOf(IntSetA other) { ... } } <p class="indent"> |
ADT相比物件缺少的是interoperability協同性或稱互操作性或共同操作性,如果我們再定義一個與inSetA有共同介面的不同類叫IntSetB,如下:
// different code but the same interface final class IntSetB { bool contains(int element) { ... } bool isSubsetOf(IntSetB other) { ... } } // in main() IntSetA sA = new IntSetA(...); IntSetB sB = new IntSetB(...); boolean x = sA.isSubsetOf(sB); // ERROR! <p class="indent"> |
IntSetA和IntSetB並不能比較它們的內容,因為它們是不同的抽象型別,也不是互為子類等情況。
而比較之前的IntSet1和IntSet2它們是共同繼承一個介面,所以,它們能夠進行相互比較。
interoperability的定義:是計算機系統執行來自不同開發商開發的應用程式能力,不管作業系統或物理架構如何,這些程式都可以跨本地和其他計算機互動工作。
物件除了資料以外,還有行為Behavior, 訊息Messages,和服務Services
關於服務抽象,文章以Servlet和Android的ContentProvider為例說明。
class ContentProvider { abstract Cursor query(Uri uri, ...); abstract int insert(Uri uri, ContentValues vals); abstract Uri update(Uri uri,ContentValues vals,...); abstract int delete(Uri uri, ...); ... // other methods not shown } <p class="indent"> |
如果沒有服務的抽象,將會按照不同的內容性質將輸入的請求分發到不同的內容提供者,每個應用都必須重新實現這些程式碼,這使得協同性interoperability非常困難,降低了整個經濟系統的價值,使用物件進行服務的抽象著重重用,使得內容提供框架能夠被重用。
[該貼被banq於2013-09-15 16:34修改過]
相關文章
- 為什麼 Vue 更符合這個時代的大勢所趨?Vue
- 小程式化是大勢所趨?
- 網站安裝SSL證書已是大勢所趨,到底什麼是SSL?網站
- 大資料是什麼?大資料的趨勢?大資料
- 什麼是YottaChain儲存,為什麼說是未來資料儲存的趨勢?AI
- 開發行業化ERP是大勢所趨(轉)行業
- 低程式碼是程式設計發展的大勢所趨?程式設計
- 主動找智慧鑰匙 PKE取代RKE是大勢所趨
- 什麼是物件,為什麼要物件導向,怎麼才能物件導向?物件
- 目前的大資料趨勢是什麼,主要存在哪些障礙?大資料
- IT 自動化的下一步是什麼: 6 大趨勢
- HTTPS 難道不是大勢所趨嗎?HTTP
- 手機廠商紛紛配置「移動AI晶片」,是噱頭還是大勢所趨?AI晶片
- IPIDEA研究,大資料時代未來的發展趨勢是什麼?Idea大資料
- 為什麼RESTful微服務和非同步程式設計是一種趨勢?REST微服務非同步程式設計
- 雲端計算是什麼?雲端計算的發展趨勢是什麼?
- Python優勢是什麼?為什麼要學習?Python
- 為什麼Java字串是不可變物件?Java字串物件
- 什麼是物件?物件
- 智慧手機發展趨勢是什麼?2019年智慧手機八大趨勢你看好哪個
- 2016 年後 Web開發趨勢是什麼Web
- 為什麼說物件導向是一次偉大的進步?物件
- 什麼是BOM物件物件
- 什麼是Linux?Linux運維未來發展趨勢Linux運維
- WEB3.0+DAO大勢所趨,SAFE開創新世界Web
- js基礎梳理-究竟什麼是變數物件,什麼是活動物件?JS變數物件
- 移動網際網路時代:響應式網頁設計已成為大勢所趨網頁
- “黑五”前夜的裁員:無接觸配送大趨勢為什麼都帶不動亞馬遜無人機?亞馬遜無人機
- 物件儲存的優勢有哪些?為什麼要選擇物件儲存?物件
- 什麼是docker?docker有什麼優勢?Docker
- 什麼是物件儲存?物件
- 大資料技術 - 為什麼是SQL大資料SQL
- AI儲存的需求是什麼?未來趨勢是怎樣的?AI
- 國外遊戲發行商:訂閱服務興起是大勢所趨,獨立開發者快上車遊戲
- 阿里巴巴DevOps實踐指南(一)| 為什麼DevOps的必然趨勢是BizDevOps阿里dev
- 什麼是物件?什麼是抽象?怎麼理解物件導向的程式設計思想?物件抽象程式設計
- 外賣小程式為什麼如此火爆,優勢是啥?
- 所謂DNS汙染和劫持是什麼?DNS