Public variables and methods

最近上數位學習的課,正在討論SCORM(Sharable Content Object Reference Model)
SCORM真的是個很神奇的傢伙!
它可以壓縮成package,接著上傳Moodle
然後學習者的一舉一動都會被監視XD
(例如:學習後進行測驗的分數、已經進行學習與否還有學習所耗費的時間等等)

其中談到SCORM的架構時,有說到SCORM使用了標準(standard)
來決定要儲存學習者的哪些資訊
也就是追蹤學習者學習的最小單位(SCOs)所用到的技術

在這過程中不小心就聯想到public變數與method的使用XD
所以就來複習一下吧 :P  這次要探討的是

為什麼在修改資料時,與其直接操作public變數,另外建立method反而是更好的做法?

以下我將用箱子還有球來示範,應該是夠淺顯易懂吧~

使用public變數

public class Box(){
     //假設我們找來了一個箱子(它是一個物件)
     //並且在裡面放進了5顆球,想說等一下要分別發送給5個人
     int ball = 5;
}
然後...有人看到了這個箱子
Box box = new Box();
box.ball = 0;                     //噢不...球球被拿光光了T_T

然後看看這個方式

public class Box(){
     //一樣放進5顆球
     private int ball = 5;
     public Box()

     //規定一次只能放一顆
     public void getOnlyOneBall(){
          ball = ball - 1;
     }
}
之後有人要拿
Box box = new Box();
box.getOnlyOneBall();  //一次只能拿一顆吧!你看看你~
Yes! 這次狀況就好很多了。
所以說呢可以使用一些特別的方法(method),避免有心人士一次就把球球拿光光
或是在不小心的狀況之下本來要放4顆,結果放進了10顆(意外對變數造成修改)

在大多數情況下,我們都希望能夠自由地對變數進行操作。但是誠如Clean Code無瑕的程式碼一書所說:
「將實現的過程隱藏實際上便是一種抽象化的過程。而在這當中,類別不單單只是透過讀取及設定函式讓變數供人存取而已;To be more specific, 它提供了一個抽象介面,讓使用者在不需要知道實現過程的狀態下,還能操縱資料的本質。」
改變世界的九大演算法一書中也有提到:
「撰寫程式碼的原則是盡量隱藏資料。」

沒有留言:

張貼留言