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
本主題所含的標籤
無標籤
作者 [Effective Java] 條款12:將 class 和其成員的可存取性(accessibility)最小化 [精華]
metavige

metavige

版主

發文: 2133
積分: 10
於 2003-12-07 00:15 user profilesend a private message to usersend email to metavigereply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
區分設計良好的模組和設計糟糕的模組, 最重要的一個因素就是模組隱藏其內部資料和其他實作細目的程度
這個概念稱之為資訊隱藏(information hiding)封裝(encapsulation), 是軟體設計的基本信條之ㄧ

1
2
3
4
public class Metavige {
  public String name = "metavige";
  public String nickName = "Handsome man";
}

我想如果是這樣的物件, 是很不好的
因為我可以做下面的事情, 這是有點天理不容的.....Devil
1
2
Metavige metavigeInstance = new Metavige();
metavigeInstance.nickName = "Ugly man!!!";

所以呢, 就要把資訊適度的隱藏起來Big Smile
1
2
3
4
5
6
7
8
9
10
11
12
public class Metavige {
  private String name = "metavige";
  private String nickName = "Handsome man";
 
  public String getName() {
    return name;
  } 
 
  public String getNickName() {
    return nickName;
  }
}

資訊隱藏的重要性是多方面的:
1. 可以加速系統的開發, 因為模組可以平行發展
2. 緩和了維護上的負擔, 因為模組可以被快速理解和除錯
3. 資訊隱藏可以增加軟體的復用程度
4. 資訊隱藏減少了大型系統的構築風險, 即使整個系統不成功, 個別模組也有可能成功

Java 語言用來實現資訊隱藏的設施, 就是存取控制(access control)機制, 用來決定 classes, methods, interfaces 和 members 的可存取性

頂層的 classes 和 interfaces, 只可能使用兩種使用存取級別: package-private & public
如果 package-private 的頂層 classes & interfaces 僅在唯一一個 class 中被使用, 你應該考慮使它成為後者的一個巢狀的 (nested)private class 或 interface (條款 18)


成員有四種可能的存取級別, 以下按存取性漸強的次序列出:
private - 這種成員僅在其宣告式所在之頂層 class 內部可存取
package-private - 這種成員可被其宣告式所在之 package 內的任何 classes 存取, 技術稱之為 default(預設)級別
protected - 這種成員可被其宣告式所在之 class 的 subclasses 存取, 也可被其宣告式所在之 package 內的所有 classes 存取
public - 可不受任何限制地被存取

有一條規則限制了你「降低函式可存取性」的能力, 如果某個函式重載了 superclass 中的函式, 那麼他在 subclass 中的存取級別不得低於它在 superclass 中的存取級別

public classes 基本上很少擁有 public 欄位, 因為如果欄位是個 nonfinal, 或者指向某個可變物件的 final reference, 那麼一旦他成為 public, 你就喪失了對於「儲存於此欄位中的值」的約束能力; 一個簡單的後果就是: 具有 public mutable 欄位的 class 在多緒環境並不安全
「public classes 不該擁有 public 欄位」這條規則存在一條例外: public classes 可透過 public static final 欄位來表示常數, 不過請確保被 public static final 欄位所引用的物件是不可變的


reply to postreply to post
請各位新手參考 論壇規範Java 新手 FAQ
話題樹型展開
人氣 標題 作者 字數 發文時間
8016 [精華] [Effective Java] 條款12:將 class 和其成員的可存取性(accessibility)最小化 metavige 2195 2003-12-07 00:15
» 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