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:Yoshi]
plutotw

井底蛙



發文: 624
積分: 3
於 2004-05-27 04:59 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
Yoshi wrote:
最後這句話和我目前所上的課看法完全相反耶....
我不停的看到"Favor Composition Over Inheritance"這句話
也因此我自己寫程式都很少用繼承,大多是delegation~

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

1
2
3
4
5
6
7
8
9
10
11
 public class TestRectangle {
// Define a method that takes a Rectangle reference.
public static void testLSP(Rectangle r) {
 r.setWidth(4.0);
 r.setHeight(5.0);
 System.out.println("Width is 4.0 and Height is 5.0" + ", so Area is " + r.area());
 if (r.area() == 20.0) 
  System.out.println("Looking good!\n");
 else
  System.out.println("Huh?? What kind of rectangle is this??\n");
}

你難道不會覺得被誤導嗎 ?
首先 方形本來就較簡單 , 方形只能有一個值
使用者故意將方形的邊設定兩次,當然是以後者為準呀 !
你總不能 寄望 將值設錯 還期望 class 能正常運作吧!
其二
在架構上 ,簡單的要在前面,因為應該可以是
public class Line extends Point ;
public class Square extends Line ;
public class Rectangle extends Square ;
而且在這條件下,還可指定 data 值為 final 屬性
而事實上,因為特性的關係 Square 這一層是可以不存在的
因為 Rectangle 本身就可以取代他
其三
如果 應要 保持 文中所說的架構
也應該在 setWidth() setHeight() 內部作檢查,並擲出 Exception

比較好的 代表是 Circle 與 Arc 的關係

軟工裡會將 OOP 最重要的繼承打掉,是要考慮做苦工的 coding , 要重點放在 SA/SD 處理掉
但是有一些領域 ,是連 SA/SD 都無法完成的領域
此時 programmer 的功力將是非常吃重


plutotw edited on 2004-06-11 21:04
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
7620 [Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 metavige 1621 2004-05-26 22:16
6553 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 221 2004-05-26 22:37
6635 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 ingramchen 569 2004-05-26 23:29
6659 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 699 2004-05-27 00:44
6800 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 Yoshi 1892 2004-05-27 02:47
6557 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 1172 2004-05-27 04:59
6449 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 giraffe 207 2004-06-18 11:21
6515 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 ingramchen 1349 2004-06-18 15:03
6323 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 plutotw 648 2004-06-18 17:36
6468 Re:[Effective Java] 條款 15 : 除非專為繼承而設計並提供文件,否則不要使用繼承 ingramchen 443 2004-06-18 19:49
6995 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