※ 引述《***@ptt.cc (加油加油)》之銘言:
: ※ 引述《oishii (喔帥)》之銘言:
: : 應該是針對封裝性來做考量
: : 一些instance variable在encapsulation的考量之下 應設為private
: : 然後透過getXX()與setXXX()的method來做讀取與設定
: : 利用這樣的方式可以避免一些錯誤的產生
: : 比如說某一個instance variable必須為正數
: : 在setter的方法內就可以做這樣的寫入限制
: : 我也是初學者可能沒回答到你的問題
: : 因為我搞不大懂constructor跟參數設定的關係為何
: : 一般用new呼叫constructor產生一個instance之後應該就不會再呼叫建構子了
: : 如果你的意思是說 建構子內用setter的方式來做設定
: : 那裡由應該就是我上一段講的那樣
: : 還請高手指教
: 不好意思,可能是我沒問清楚吧,譬如像google search的api
: GoogleSearch search = new GoogleSearch();
: search.setKey("000000000000000000000000");
: search.setQueryString("Internet standards");
: search.setSafeSearch(true);
: GoogleSearchResult result = search.doSearch();
: 為什麼不乾脆寫一個建構子 GoogleSearch(key,query,isSafe)
: 這樣不是比較快嗎?為什麼還要用setXXX()的方法
一方面是參數列過長的問題;另一方面是可讀性的問題
MySearch search = new MySearch("000000000000000000000000",
"Internet standards", true);
這一段程式碼,就算是程式開發人員,看到建構子有兩個字串,和一個布林參數
腦子不先揪成一團,也會先變成兩個大...
誰知道第一個參數和第二個參數的意義是什麼呢...
String key = "000000000000000000000000";
String queryString = "Internet standards";
Boolean safeSearch = true;
MySearch search = new MySearch(key, queryString, safeSearch);
這一段程式碼看起來好多了,至少各個變數都已充分地描述自身的意義
但是這將延伸另一個可能的問題,每當追朔這些變數的時候 (key, queryString, ...)
總是無法和 search 聯想在一塊兒...
只有在看到第四行的時候,才發現:原來這些變數是要拿來建構 search 的啊!
MySearch search = new MySearch();
search.setKey("000000000000000000000000");
search.setQueryString("Internet standards");
search.setSafeSearch(true);
這一段程式碼最能看出各個變數的關係和意義
"000000000000000000000000" 是要拿來給 search 當成 key 的
"Internet standards" 是要拿來給 search 當成 queryString 的
而 search 是 safe search 的
整個一目瞭然!
不只如此,在撰寫程式碼的時候
適當地使用 setter 和 getter 也能減少 debug 的時間
當一個 field 出現預期之外的問題時,標出那個 field 的所有 setter 和 getter
將能減少花在 "varible = ...;" 和 "... = varible;" 的時間
只要追朔這些 setter 和 getter 就可以了
--
希望這些資訊能提供給您一些幫助
--
[m[1;33;46m〒作者:H45 來自:85-205.dorm.ncu.edu.tw[m
[1;36m◎二進位的世界[37m【140.115.50.50‧binary.csie.ncu.edu.tw】