我來討論一下純理論的老問題.長方形和正方形的繼承關係.
類的定義中,大家一直爭吵不休的就是正方形和長方形的關係.所說,正方形不是長方形的子類,因為它違反了長方形的行為.
然而計算機世界應當是當前世界在計算機中的對映.那麼我們來考察長方形和正方形的定義,長方形也就是矩形:為四個內角相等的平行四邊形。正方形,是平行四邊形;. 有一個角是直角;. 有一組鄰邊相等。
可是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/有後續文章。講談到這在工作中的實際意義。
相關文章
- 就是單純的討論一下程式碼
- 關於 Service Worker 和 Web 應用對應關係的討論Web
- 正方形計數 題解
- 繼承關係和魔術方法繼承
- 討論個有關模組化設計的問題
- c++中的繼承關係C++繼承
- Hibernate 一個更新問題的 討論
- 單獨補題-數正方形
- 深入Spring Boot:ClassLoader的繼承關係和影響Spring Boot繼承
- JAVA類的頂層Type抽象和繼承關係Java抽象繼承
- 微服務架構的理解以及和 RPC 的關係(理論篇)微服務架構RPC
- ArrayList繼承關係分析繼承
- Java面試題:Java中的集合及其繼承關係Java面試題繼承
- 【DP】最大正方形
- K君關於“IT 新人就業方向問題“討論就業
- 近期討論過的一些MySQL問題MySql
- laravel 事件系統 問題討論Laravel事件
- [提問交流]關於onethink模型這塊的討論模型
- 繼承問題繼承
- 當我們在討論CQRS時,我們在討論些神馬?
- 5. JPA物件繼承關係物件繼承
- 邊界都是1的最大正方形大小
- 當我們在討論遊戲社群時,我們在討論什麼?遊戲
- [iOS Monkey 討論帖] 整套新的 fastmonkey 討論iOSAST
- 關於“斯金納箱”及相關理論在遊戲設計中應用的討論遊戲設計
- 遊戲系統開發繼承帶來的問題遊戲繼承
- 一個關於月球車的筆試題--求討論筆試
- css實現最大正方形CSS
- 18、繼承以及繼承中成員變數和成員方法的重名問題繼承變數
- delegate 繼承問題繼承
- 關於物件繼承的問題——利用空物件做中介物件繼承
- 一文打盡Java繼承的相關問題Java繼承
- 對容器映象的思考和討論
- 關於神經網路的討論神經網路
- 關於 Angular 應用對瀏覽器 Back 按鈕支援問題的討論Angular瀏覽器
- [討論]資料庫設計,ER 中的實體關係如何確認?資料庫
- Flutter 吐血整理元件繼承關係圖Flutter元件繼承
- 既然大家如此熱烈討論 AI,那我來問一下,該如何學習 AIAI
- 討論一下用例解藕的必要性