我來討論一下純理論的老問題.長方形和正方形的繼承關係.
類的定義中,大家一直爭吵不休的就是正方形和長方形的關係.所說,正方形不是長方形的子類,因為它違反了長方形的行為.
然而計算機世界應當是當前世界在計算機中的對映.那麼我們來考察長方形和正方形的定義,長方形也就是矩形:為四個內角相等的平行四邊形。正方形,是平行四邊形;. 有一個角是直角;. 有一組鄰邊相等。
可是oo物件中,卻不能是繼承關係。為什麼?因為裡面的概念已經被偷換了,我們所定義的只是我們在某方面運用到的長方形和正方形。它的定義是全新的,包括了裡面所有的資料和所有的方法。不再是我們在數學中定義的長方形和正方形。
也就是說我們的oo定義的類,和現實世界不能完全對映上,只是反映其中我們想要得部分。它的定義是不完整的,過於簡單,無法反映資料和資料間的關係,契約太過強硬,只要是所用到的行為子類都要遵守。於是我們很著急,這違反了oo初衷。哲學上告訴我們片面的抽象擴大化,會走到我們所期望的反面。可以說這就是一個例子,原本現實分類中很明顯的繼承關係,反而到了oo中,不成立了,或者說成為一個問題。不象現實中那樣清晰。
我們為了簡化而把事情搞複雜了。也許我們在純粹的程式世界裡面還可以不大在意這件事,按照自己定義的就可以了。但是我們要做需求分析時,這就成為大問題。那是必須和現實世界對映上的,任何的扭曲都會帶來很多的麻煩。現在工作中我們的麻煩確實很多,原本清晰可見的關係,我們要重新調理。於是我們開始思考。
我們要用現實世界中的關係來指導oo設計,於是什麼LSP,DBC都冒出來告訴我們怎麼做。可是還是不行。
下一篇討論這個問題在做用例分析時可能造成的泥潭。如何迴避。
在我的blog:http://yingyiyy.blog.163.com/有後續文章。講談到這在工作中的實際意義。
然而計算機世界應當是當前世界在計算機中的對映.那麼我們來考察長方形和正方形的定義,長方形也就是矩形:為四個內角相等的平行四邊形。正方形,是平行四邊形;. 有一個角是直角;. 有一組鄰邊相等。
可是oo物件中,卻不能是繼承關係。為什麼?因為裡面的概念已經被偷換了,我們所定義的只是我們在某方面運用到的長方形和正方形。它的定義是全新的,包括了裡面所有的資料和所有的方法。不再是我們在數學中定義的長方形和正方形。
也就是說我們的oo定義的類,和現實世界不能完全對映上,只是反映其中我們想要得部分。它的定義是不完整的,過於簡單,無法反映資料和資料間的關係,契約太過強硬,只要是所用到的行為子類都要遵守。於是我們很著急,這違反了oo初衷。哲學上告訴我們片面的抽象擴大化,會走到我們所期望的反面。可以說這就是一個例子,原本現實分類中很明顯的繼承關係,反而到了oo中,不成立了,或者說成為一個問題。不象現實中那樣清晰。
我們為了簡化而把事情搞複雜了。也許我們在純粹的程式世界裡面還可以不大在意這件事,按照自己定義的就可以了。但是我們要做需求分析時,這就成為大問題。那是必須和現實世界對映上的,任何的扭曲都會帶來很多的麻煩。現在工作中我們的麻煩確實很多,原本清晰可見的關係,我們要重新調理。於是我們開始思考。
我們要用現實世界中的關係來指導oo設計,於是什麼LSP,DBC都冒出來告訴我們怎麼做。可是還是不行。
下一篇討論這個問題在做用例分析時可能造成的泥潭。如何迴避。
在我的blog:http://yingyiyy.blog.163.com/有後續文章。講談到這在工作中的實際意義。
相關文章
- 就是單純的討論一下程式碼
- 我們來討論一下apache 的 Turbine專案吧。Apache
- 關於 Service Worker 和 Web 應用對應關係的討論Web
- 純 CSS 實現自適應正方形CSS
- [技術討論]業務建模和使用者業務的關係
- 討論個有關模組化設計的問題
- 關於UI的一次討論——來自專案管理群的討論UI專案管理
- 再來一篇不錯的文章,討論Interface與Abstract的關係
- 繼承關係和魔術方法繼承
- 正方形計數 題解
- 關於專案經理的討論 (轉)
- c++中的繼承關係C++繼承
- PHP中類的繼承關係PHP繼承
- 我們現在沒有討論的但有必要討論的模式模式
- 關於rails和Grails的效能討論AI
- Java面試題:Java中的集合及其繼承關係Java面試題繼承
- 利克特的支援關係理論(轉載)
- 提一個巨難的問題,請高手們來討論..
- JSP的中文問題再問(一些理論上的探討)JS
- CSS > 關於雪碧圖預處理和後處理方案的討論CSS
- [技術討論]關於低耦合開發的討論
- 單獨補題-數正方形
- JAVA類的頂層Type抽象和繼承關係Java抽象繼承
- ArrayList繼承關係分析繼承
- AIX 程式設計大賽---AIX正方形問題AI程式設計
- [軟體人生]一場無傷的辯論——關於韓國曆史和滿漢朝之間關係的討論
- 關係型資料庫理論資料庫
- 各位道友,進來討論個介面設計問題!
- [全程建模]元用例和需求與績效之間的關係討論
- 【DP】最大正方形
- 關於oracle SCN 的討論Oracle
- 關於部落格評論外掛的討論
- 和開發同學討論的一個技術問題
- K君關於“IT 新人就業方向問題“討論就業
- [軟體人生]一場無傷的辯論——關於韓國曆史和滿漢朝之間關係的討論(續)
- 關於資料庫 Block 儲存細節問題的討論資料庫BloC
- 關於javascript中陣列元素刪除問題的討論 (轉)JavaScript陣列
- 微服務架構的理解以及和 RPC 的關係(理論篇)微服務架構RPC