2011年5月18日 星期三

5-15. Uniform access principle

Scala 嘗試將 data field 與 method 做進一步的一致化,也就 data field 與 method 區分不要再這麼清楚,以後可以視為同一個種類(可以把這二者想像是同一個東西)。一致化的好處是,sub class 可以很容易使用想要使用的方式,override parent 的 method 或是 val。

因為這個概念,衍生了以下這些我們之前討論的事情
1. data field 會產生對應的 method
2. method 與 data field 的 name space 是同一個
3. val 可以 override val
4. val 可以 override def

「Uniform access principle」就是希望 class 的使用者端,可以不理會 class 真正的宣告方式如何,可以使用相同的方式來 access 該 class 的資料。
舉例而言:有一個資料結構,有 length 的 property。length 可以是使用 data field 存起來,也可能是使用 method 來算出來,但 Scala 希望你都可以直接使用 obj.length 來 access 該 property。這就叫「uniform access principle」。

那要如何達到「uniform access principle」?

你可以使用我們之前所提到的「data member access」原則

我們要達到使用 obj.length 的方式,可以使用的方法
1. 使用 data member 宣告
class S {
  var length = 0
}
2. 使用 access methods
class S {
  def length = ...
  def length_=(n: Int) = {...}
}
請注意:access method 的 reader method 不可使用括號。

Uniform access principle 的概念將 data field 與 method 綁在一起,所以才會有一些混合 method 與 val data field 的用法,這是我們需要特別注意的地方。

沒有留言:

張貼留言