RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 
 16  2/2  <  1  2 


 
主題: [其他] [求助]到底何謂物件導向?   字型大小:||| 
rakish
鐵驢友〔初級〕
等級: 4


 . 積分: 20
 . 文章: 81
 . 收花: 65 支
 . 送花: 37 支
 . 比例: 0.57
 . 在線: 459 小時
 . 瀏覽: 7020 頁
 . 註冊: 7438
 . 失蹤: 1422
 . taiwan
#16 : 2012-1-15 12:02 AM     只看本作者 引言回覆

nora 解釋的很清楚.... 我在舉個例子說明一下

不知道什麼是物件導向 其實滿正常的 因為我看過很多的工程師
寫了很多年 java 也頂多只是用 java 在寫 c 而已 ...
搞不太清楚什麼是物件導向

物件導向 並不僅僅是 封裝 繼承 多型 ...
物件導向其實就只是一種思維 ...
簡單的講就是 everything is object ...
所面臨的問題要用物件的角度來思考 ..
透過物件與物件彼此之間的互動 ..
來處理程序

這樣講可能有點抽象... 舉個簡單的範例 ..

假設今天要寫一個計算機 ...處理使用者的輸入 "1+2"
過去的寫法可能是
{
string input = "1+2";
for(int i=0;i<input.length;i++){
   if(input=='+')return add(input[i-1],input[i+1]);
   if(input=='-')return sub(input[i-1],input[i+1]);
}
我把它簡寫成...
switch{
   '+' : return add(1,2);
   '-' : return sub(1,2);
}
就是說如果運算式中遇到 + - 符號 分別會做這件事情
這也就是過去的方法 用一個 main function 去驅動你的程式的流程 得到返回的結果

如果有了一點點物件的想法以後
可能會想到"1 "數字本身就是一個物件
這個物件應該是要具有 add 與 sub 的方法 {假設寫成Num(1) 這個物件}
數字本身可以透過add或sub返回另一個數字
所以可能會寫成 {這邊省略掉 每一個字元轉成對應物件的過程}
{
switch{
   '+' : return Num(1).add(Num(2));
   '-' : return Num(1).sub(Num(2));
}
}
這樣就比較像是 物件與物件之間的彼此合作

但是在深入一點想 +,- 本身也是一個物件 這個物件就是在處理 兩個數字物件的運算
也就是 有一種物件叫做 Operator(Num,Num) 裡面有一個方法  execute 他會回傳一個  Num 物件
所以可能會寫成 {這邊省略掉 每一個字元轉成對應物件的過程}
new AddOperator(Num(1),Num(2)).execute();
new SubOperator(Num(1),Num(2)).execute();

這邊可能會有點誤解..怎麼感覺又變回傳統的方法  add(x,x);
但是 AddOperator 中 execute 的方法可能是這樣寫的
{
Num execute(){ return Num(1).add(Num(2));}
}

但是如果再深深入一點想 本身 "1+2" 本身就是一個物件...
這個物件叫做 Expression
所以應該是要寫成 return new Expression("1+2").execute();
詳細的內容就不再寫了

不知道這樣的說明有沒有比較清楚一點點 ...



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

 16  2/2  <  1  2 
   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-11-22 12:29 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.013918 second(s), 6 queries , Qzip disabled