天天看點

Thinking in Java學習筆記(一)對象導論

  最近在看java程式設計思想,對其中自己的一些收獲記錄下來,一方面是加強鞏固自己的學習,另一方面也是友善以後翻閱檢視。

1、将對象看作服務提供者

  把對象當作服務的提供者,也就是指關注對象能實作哪些功能,提供哪些服務?它需要哪些對象支援才能實作這些功能?

  這樣做的好處就是:

  1、可以讓我們把重心或者說目标轉換為:建立或者尋找能夠提供理想服務解決方案的一系列對象

  2、并且也有助于幫助提高對象的内聚性。

2、類建立者和用戶端程式員

  類建立者的任務是建構類,提供類的公有方法,用戶端程式員使用這些公有方法接口實作業務功能。通過修飾符如:public、private、protected、預設來對方法進行通路限制,防止用戶端程式員對一些關鍵的方法進行修改或者破壞。

  其中protected和private功能相近,差別在于protected在繼承類中可以通路到,而private隻能在目前類中才能通路到。protected在同一包中也可以通路到。

  而預設也被稱為包通路權限,在同一個包中,它就相當于public,而在包外,它就變成了private。

3、 組合和聚合

  Thinking in Java對組合和聚合是這樣定義的:composing a new class from existing classes, this concept is called composition (if the composition happens dynamically, it’s usually called aggregation)

  譯為:使用現有的類合成新的類,稱為組合,如果這種組合是動态的,就稱為聚合。

  這就是它們之間本質性的差別:組合是靜态的,是在類加載前就已經合成了,也就是作為類成員變量存在的;而聚合是在類加載的過程中進行合成的,也就是在代碼塊中 加入類的對象。

  組合的意義是可以在不修改現有接口以及用戶端代碼(新類中的代碼)的前提下,修改新類的功能,這就是組合的靈活性所在。一般是通過在新類中設定私有的成員變量,然後修改該成員對象方法接口中的代碼來實作靈活性。