封裝是物件導向中四大特色之一,簡單來說封裝就是適度的將資訊隱藏(Information Hiding),避免外界不當使用。在抽象化的過程,善加將定義類別中的屬性跟方法封裝,有利於日後系統維護時造成的許多不必要的問題喔。

 

你敢讓心跳參數被set成零嗎。常在上課的過程,有些沒有學過OO的同學第一次聽都不是很容易理解為什麼有需要將資料隱藏或加以封裝。我最常舉的例子就是:一個Person的類別中,若有一屬性為心跳,如果今天心跳沒有宣告成private(即類別獨自私有,外界不得使用),代表外界可以直接取得某人的心跳屬性,如此當我在某天跟你吵架我就直接取用你的心跳屬性特定:setHeart(0),那恭喜你,你得躺平囉!由此應該可以感受到適度進行封裝的效用了吧~

 

20/80法則:20%的開發時間,需80%的維護時間。我常認為development is just the beginning維護才是漫長的一條道路,而且一般SI公司起初能賺錢都是因為接了很多新案子,而到最後會一直無法讓獲利上升,大多是因為過多的維護案需要進行,拖垮了整間公司的研發步調、人力分配、成本控管等議題。這大概很多軟體公司都心有戚戚焉才對。想想微軟吧!他不是不想轉型,而是背負了太多的包袱,每次的新產品總是要兼顧向下相容,在疊床架屋的架構下終於在Web 2.0的洪流中逐漸被打退(但我可不認為微軟會倒,當他確認放棄傳統OS市場時,記得MS will come back,他可是也擁有了一大票的IT戰將,實力不容小覷喔)

 

封裝手法:提供受控制的間接操作取代不受控制的直接存取。在系統中最怕的就是不受控制的狀態發生,這對日後的維護非常頭疼,邏輯錯誤在龐大的程式當中要找出來,有時還真的像是大海撈針。如何避免這種不必要的問題發生,我想適度封裝是一個不錯的解決方案喔,舉例而言:若有一個Person的類別,當中有身高、體重兩個屬性,若不將他們宣告成private,那外部類別可以直接取得並設定如下,試想身高設定成-100是什麼樣的狀況又是否合理?但只要你允許外面存取,就無法保證外界是否會對你的屬性做此類愚蠢的設定。

               身高 = -100

針對上述該如何處理呢?建議作法如下:

        private 身高;

        public boolean set身高(int h) {

          if(h<0) return false;

          else 身高 = h;

        }

我們可以藉由將身高封裝,並提供一個外部的設定管道,然而此管道是可受控制的,如此必可確保身高的設定不會有不合邏輯的情況發生。

 

適當封裝是日後系統易維護性的絕佳藥帖。封裝最主要的兩個優勢:

  1. 避免不必要的資料存取現象發生。利用封裝可以適度的將資料進行適度資訊隱藏。如此避免不必要的存取,進而發生問題。
  2. 適度將製作細節封裝可以降低ripple effect(漣波效益),避免日後修改一問題所帶來的連帶效應過大。如此在日後可增加系統的可擴充性、易維護性。對維修工程師將是一大福音喔~
arrow
arrow
    全站熱搜

    劉逸 發表在 痞客邦 留言(2) 人氣()