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

» JWorld@TW » Java 新手區 » Object/物件導向  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
作者 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ [Re:timestone]
Ponylin





發文: 38
積分: 0
於 2011-10-16 09:18 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
timestone wrote:
各位好,小弟初學java,現在正在努力體會面向對象編程的精神。但是在參照別人的程序后,自己寫一些當做練習的程序的時候,發現把一個類封裝的很好看起來是很沒有必要的。可能是我還不理解封裝特性的好處,請各位指教。

比如一件簡單的類:
1
2
3
4
5
class A
{
     int number;
     String name;
}


如果安裝封裝的要求,就要限制訪問權限,寫上setter和getter方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class A
{
     private int number;
     private String name;
 
     public void setNumber(int number)
     {
          this.number=number;
     }
     public void setName(String name)
     {
          this.name=name;
     }
 
     public int getNumber()
     {
          return number;
     }
     public String getName()
     {
          return name;
     }
}

這樣用private把屬性封裝起來,最後還是要用public的方法把他們間接暴露出來用,不是很麻煩嗎?再說了,這是基本屬性,最簡單的使用,如果類的屬性里包含一些複雜的,自定義的類型,情況就更是一團糟了。所以我覺得寫setter和getter是一件費力不討好的事。

與其這樣,還不如直接把屬性暴露出來用:
1
2
3
4
5
class A
{
     public int number;
     public String name;
}

可能是水平有限,我實在是看不出他們在應用中的不同,但是在參考別人的程序時,甚至是java的api文檔時,發現大家的java程序都是這麼寫的。。。所以有此一問,請各位不吝賜教~


其實封裝物件的私有屬性,這只是學Encapsulation的第一步而已,OO重視「抽象化」與「資訊隱藏」,藉由適當的封裝,可以達到一些資訊隱藏的效果... 藉由封裝,隱藏了內部實作的細節,並對外提供一致的公開的API! 某種程度上,「一致的」蠻重要的...

以後慢慢接觸到design pattern之後,封裝只是一種概念,可不只是把屬性宣告為private,用getter、setter這樣而以,封裝請求、封裝實作、封裝一群相似/相近的演算法、封裝一群子系統,很多概念都是封裝出來的...

這種封裝的概念,實際上也不是只有Java才有,只要OO的語言幾乎都有,像C#、C++甚至更先進一點的Python...
可以參考一下這篇文章
http://caterpillar.onlyfun.net/Gossip/JavaEssence/Encapsulation.html


reply to postreply to post
喜歡自由/前衛爵士樂的Java新手
話題樹型展開
人氣 標題 作者 字數 發文時間
4017 其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ timestone 963 2011-10-15 10:55
3961 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ qwsopp 93 2011-10-15 16:56
3829 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ Duncan 1760 2011-10-16 02:12
3764 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ Ponylin 1402 2011-10-16 09:18
3930 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ timestone 246 2011-10-16 10:01
3756 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ ddtet 582 2011-10-17 09:24
3851 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ jimwayne 369 2011-10-17 11:45
3710 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ caterpillar 368 2011-10-17 11:50
3798 Re:其實“封裝”特性到底有什麽好處?對比“private+setter+getter”和“public+直接使用”兩種方法~ timestone 229 2011-10-17 21:30
» JWorld@TW »  Java 新手區 » Object/物件導向

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