close

這個主題是在聖經本的第二章 - 物件導向

2.1 封裝

之所以先挑這一章起來念,是因為這一章所提及的名詞,是我之前最熟悉,卻又一知半解的部份。
先看看認證目標吧!

Exam Objective 5.1 -
在類別內實作封裝(Encapsulation)、鬆散偶合(loose coupling)、高內聚力(high cohesion),並敘述其好處。

首先,物件導向的好處為:具很高的彈性和可維護性。

這讓我想到在面試當天好人文問我的JAVA有什麼好處,我確只說了讓程式比較好寫,並且讓程式較淺顯易懂。但其實跟本就是這兩個特性就可概括一切了,可惜我當時腦袋空空如也無法出口成章,居然連API這麼重要的關鍵字都沒提到,真的是回答的很失敗呀!!<囧>

好,回到主題,書裡提第一個OO概念是 -- 封裝(Encapsulation)。我想他的精神就是將自己寫的class做一定的處理,增加其彈性與可維護性,若某天這個class被人廣為使用,並且出現一些問題時,不致於因為修改這個class的程式碼而使得別人的程式碼也得重新寫過,講白一點,封裝就是將class以API的方式呈現

1、Concept   - Keep instance variables protected (using private).

                         - 內部宣告public method並且強迫他人必須使用該method來存取
                            instance variable.

                         - 為了讓人方面使便(看得順眼?),通常會將這些public method 取名
                            為set<someproperty>和get<someproperty>,也就是getter和setter。

      ※ 讓使用者透過method存取instance variable而不是直接用object.instance variable
          來直接存取,如此便能有效的保護instance variable。

     EX :  <<<<錯誤的寫法>>>>
       public class BadOO 
       {
          public int size;
          public int weight;
          ...
       }

       public class ExploitBadOO 
       {
           public static void main (String [] args) 
           {
                BadOO b = new BadOO();
                b.size = -5; // Legal but bad!!
           }
       }
      
      <<<<正確的寫法>>>>

      public class Box
      {
           private int size;

           public int getSize()
           {
                 return size;
           }

           public void setSize(int newSize)
           {
                 size = newSize;
           }
      }


 

 



2.2 繼承

有一句名言是這麼說的:在JAVA中,繼承無所不在。
沒錯,這是我掰的XD  但這也是事實!因為JAVA裡的每一個class都繼承自Object,就連我們自己寫的也不例外。所以我們寫的class永遠有equal、wait、clone、notify等method可以用,只是當我們沒有對這些method進行宣告且實作的話,有用就等於沒用一樣XD

1、為什麼要使用繼承?
      - Reusable : 可減少code的重覆性,常使用的method可以只寫在superclass,其他
                                class要用的話就直接繼承便可使用。

      - 多型:變數的型態決定他相對應呼叫的方法,只要是該class以及其superclass沒有
                    的method,一律無法呼叫。

2、IS-A :以繼承和實作為基礎。就好比野豬是一種豬,可表示為『野豬 IS-A 豬』。
                  並且不管有幾層的繼承,subclass IS-A superclass。

3、HAS-A:假如class A在該class內宣告class B為一物件,便可稱為A HAS-A B。


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 SkyChord 的頭像
    SkyChord

    No fUtUrE

    SkyChord 發表在 痞客邦 留言(0) 人氣()