2014年1月13日 星期一

[Java]用介面Interface「設計參數架構」

標題所謂的「參數架構」是指擁有/繼承自同一個父類別的所有子類別們,都會有相似的參數型態。

如果類別A有個屬性為開放(public)的參數X,那繼承類別A的類別B和類別C都會有參數X。

如果我在程式中宣告了一個參數Y,這個Y的種類為類別A,(這個時候或許應該稱Y為物件Y,或實作Y,.......這方面的名詞我一向很不講究,)那我不管塞進了類別B或類別C,後續的程式都可以在參數Y中另外獲得參數X。(當要讀取或修改「Y.X」時不會發生錯誤。)

或許可以稱這樣的目的為「設計參數架構」。



學Java都會學物件導向。

教學範本大多從Object的extends開始教起,其次才會講到怎麼自己設計介面/接口。

結果......大家最後都直接習慣設計Object、擴充自己寫的(或別人寫的)Object,然後沒啥人在用介面/接口。

我個人用介面的頻率算挺高的...事實上,我覺得寫Java程式就是先訂出Interface,並且已Interface為程式邏輯/流程設計和運作的基礎/核心。

「但是Interface有很多限制,寫在裡頭的參數都會被強制轉成final形態,如此一來不管是開放(public)、私用(private)、限制(protected),都沒有意義了。」

(用前面參數Y作範例來解釋的意思是:如果把參數X1寫在介面D中,則繼承/擴充介面D的類別E和類別F也會有參數X1,但這個X1是個「常數」,只能讀取,對它作修改......不會出錯,但不會有意義,X1的值會永遠保持在設計者寫在程式碼中的值,如果我明確寫了X1=0,不管我後來寫了什麼程式碼,X1就是0。)

不懂我在描述的狀況是什麼?或不曾有過類似的疑惑和需要?

反正.......

介面/接口/Interface也是可以拿來幫參數訂架構的。

這是一個介面。(public interface後面的ValueInterface是這個 介面/接口/Interface的名稱......)

像這樣......  我就可以用a()這個函式/接口來產生一個「參數a」了......

如果要把「參數a」傳給「參數b」,我就用「b = a();」。

如果要把「參數a」加上「參數b」,我就用「a( b );」。

像以下的Value0...



 注意到我想要達成的效果了嗎?可能還不夠明顯......

總之,凡是介面ValueInterface的子類別,都會有參數a。

至於參數a(第91行)的「真面目」,可能可以是(x+y),參數a(第94行)則是(y = i)。

感覺上沒什麼不同,只是想證明「也可以用介面形式來達到設計參數」。這些範例並不是非常有意義、更不用提效率與價值了。



這樣作具體來說有任何好處嗎?

Java的設計是「一個物件只能繼承一個物件」,如果類別甲繼承自類別乙,雖然它會完整的繼承類別乙的數值結構,但如果它同時也需要類別丙的數值結構呢?

如果類別丙的數值結構是在介面之下用我這裡所寫的形式,這就不會是問題了。

一連串的類別可以任意搭配一系列的介面......這裡可以有也是用來「設計參數架構」的介面丙一、丙二、丙三.......

可以用丙一和丙二搭配出類別一,用丙一和丙三搭配出類別二。不管是類別一或類別二,都可以塞進屬性為丙一的參數中。

「能」這樣設計程式不就是物件導向的特性嗎?作為全物件導向語言之一,使用Java卻不善用這種特性與思維......何必呢?它的「可攜性」可沒那麼強大。

沒有留言:

張貼留言