JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design » Effective Java  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 [Re:plutotw]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2004-05-27 02:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
plutotw wrote:
繼承算是 雙刃之劍 . 用的好的話,程式碼簡潔,效率極高 ..
但是該不該用 繼承 , 郤是難以用臨界點隔開 ...
尤其 JAVA 與 C++ 的 protected/default 定義不同,造成 更多問題
對需要封裝的 data 及 method 而言,算是較不好
還好現在的工具, ex: eclipse 可以看到 該 method 是否是繼承/實作 上層的 method
個人的經驗,如果能用繼承,就儘量用繼承實作


最後這句話和我目前所上的課看法完全相反耶....
我不停的看到"Favor Composition Over Inheritance"這句話
也因此我自己寫程式都很少用繼承,大多是delegation~

繼承就我個人粗淺的認識,有些情況下看似應該使用繼承,但實際上不是
比如矩型與正方型,我很直觀的認為正方型理當繼承矩型
而大家也會覺得很合理,setWidth時裡面也順便setHeight,setHeight則反之
但是這個看似合理的動作,在單看Square時是對的,但是在與其它class互動就又會有問題
這學期上軟工有關的課時被騙的題目...

我知道用來判斷"該不該繼承"的方法,有
Coad's Rule:
1
2
3
4
5
* A subclass expresses "is a special kind of" and not "is a role played by a"
* An instance of a subclass never needs to become an object of another class
* A subclass extends, rather than overrides or nullifies, the responsibilities of its superclass
* A subclass does not extend the capabilities of what is merely a utility class
* For a class in the actual Problem Domain, the subclass specializes a role, transaction or device


以及Liskov Substitution Principle
1
2
3
4
5
*The Liskov Substitution Principle (LSP) makes it clear that the ISA relationship is all about behavior
* In order for the LSP to hold (and with it the Open-Closed Principle) all subclasses must conform to the behavior that clients expect of the base classes they use
* A subtype must have no more constraints than its base type, since the subtype must be usable anywhere the base type is usable
* If the subtype has more constraints than the base type, there would be uses that would be valid for the base type, but that would violate one of the extra constraints of the subtype and thus violate the LSP!
* The guarantee of the LSP is that a subclass can always be used wherever its base class is used!


我附上這個的pdf檔,裡面有一步步分析該不該繼承,
從一開始認為應該繼承,到後來的分析才漸漸發現不適合的過程。
Square不該繼承Rectangle的例子也在裡面~

參考看看囉~

OOPrinciples.pdf (112.61k)


Yoshi edited on 2004-05-27 02:49
reply to postreply to post
YOSHI!
話題樹型展開
人氣 標題 作者 字數 發文時間
7621 [Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 metavige 1621 2004-05-26 22:16
6554 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 221 2004-05-26 22:37
6636 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 ingramchen 569 2004-05-26 23:29
6660 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 699 2004-05-27 00:44
6802 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 Yoshi 1892 2004-05-27 02:47
6558 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 1172 2004-05-27 04:59
6450 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 giraffe 207 2004-06-18 11:21
6516 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 ingramchen 1349 2004-06-18 15:03
6324 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 648 2004-06-18 17:36
6470 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 ingramchen 443 2004-06-18 19:49
6996 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 263 2004-06-18 20:51
» JWorld@TW »  Software Design » Effective Java

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8