RSS   



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


 
 16  1/2  1  2  > 


 
主題: [其他] [求助]到底何謂物件導向?   字型大小:||| 
steven0143
金驢友〔高級〕
等級: 18等級: 18等級: 18等級: 18等級: 18
steven

十週年紀念徽章(五級)  

今日心情

 . 積分: 3048
 . 精華: 25
 . 文章: 1654
 . 收花: 26261 支
 . 送花: 7729 支
 . 比例: 0.29
 . 在線: 2243 小時
 . 瀏覽: 13241 頁
 . 註冊: 7405
 . 失蹤: 270
 . ◎...雲深不知處...◎
#1 : 2011-10-11 06:04 PM     只看本作者 引言回覆

各位大大好:

     小弟是一個玩微控制器近三十年的人,以往是以组合語言、C語言來開發程式~   近日,為了能在PC端寫一個

     能讀取具備USB界面的MCU資料,也開始涉入PC端應用程式的撰寫;採用的是VB.NET。參考過很多資料,始終

     對於OOP、CLASS、METHOD、OBJECT的定義感到十分模糊,不知大大們可否指點迷津,感恩~



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


今日心情

 . 積分: 926
 . 精華: 3
 . 文章: 2040
 . 收花: 7143 支
 . 送花: 11672 支
 . 比例: 1.63
 . 在線: 3820 小時
 . 瀏覽: 23448 頁
 . 註冊: 7036
 . 失蹤: 34
#2 : 2011-10-11 06:55 PM     只看本作者 引言回覆

講成模組化會不會比較容易明白?
當你需要什麼時,就把該模組導入
不用就可以從記憶體中踢掉,或是一開始就不使用

舉個例子說
使用css設計網頁時 你可以在同一個html頁面使用多個css檔 (甚至內部的眾多.class區塊)
這樣就可以算是一種物件導向了

至於細部我想這頁可以參考一下
http://msdn.microsoft.com/en-us/library/ms973814.aspx

[XDR 在  2011-10-11 06:57 PM 作了最後編輯]



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


 . 積分: 219
 . 文章: 637
 . 收花: 1217 支
 . 送花: 367 支
 . 比例: 0.3
 . 在線: 4868 小時
 . 瀏覽: 72691 頁
 . 註冊: 6920
 . 失蹤: 64
#3 : 2011-10-11 10:57 PM     只看本作者 引言回覆

其實如果學過C, 也用過struct的話,
其實對物件導向應該不會太難理解, 畢竟也是結構化的東西.
只不過還加上一些繼承, 屬性.
很簡單的例子描述的話:
例如定義:
車子的類別
車體: 一個
輪胎: 四個
方向盤: 一個

那我依這樣來定義 "轎車"

車子的類別 "轎車"
除了上述之外, 我還可以再增加屬性, 例如坐位, 後車廂, 音響等等.
本身由車子的屬性繼承而來, 還有自己本身的屬性
便是物檢導向的一種方式. 其實這種方式大量存在於視窗程式當中.

[AndyTimmons 在  2011-10-11 10:58 PM 作了最後編輯]



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


 . 積分: 1478
 . 文章: 2077
 . 收花: 12932 支
 . 送花: 15112 支
 . 比例: 1.17
 . 在線: 3003 小時
 . 瀏覽: 100733 頁
 . 註冊: 5707
 . 失蹤: 46
 . 台灣-台中
#4 : 2011-10-12 12:29 AM     只看本作者 引言回覆

嗯,用車的方法不錯....
CLASS(類別):可以定義這個類別有

  外觀:
  輪胎:
  方向盤:
  按喇叭():<-METHOD
上段的宣告定義了"車"有這點特點,有了類別,就可以用來定義物件:
例如
      頭又大   是 車
      頭又大.外觀=普通
那以後看到頭又大,就知道它是一個普通的車
METHOD是 定義一個類別可以做的,但不一定會去做的事,上例就是所有的車都有喇叭,但不一定要按
      福特  是車
      本田  是車
   頭又大  是車
      福特.按喇叭()
所以,這裡就只有福特的喇叭會響,當然還可以定義倒車()、熄火()以便未來可以使用
物件導向還有另一個特點,就是繼承Inheritance 例如 車有非常多種,以上例來看車子是父類別,那子類別就可以有
轎車、休旅車、四驅車的子項目,除了繼承了車的外觀、輪胎、方向盤、按喇叭()的特點外,還可以加上自己的特色如

休旅車:繼承 車
     七人座

四驅車:繼承 車
     全時四驅

那可以定義
    頭又大 是 休旅車   那頭又大就有   頭又大.七人座 的特點了
反之
    頭又大.全時四驅   將會是一個錯誤的 METHOD



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


十週年紀念徽章(六級)  

今日心情

 . 積分: 854
 . 文章: 3455
 . 收花: 6791 支
 . 送花: 4256 支
 . 比例: 0.63
 . 在線: 4840 小時
 . 瀏覽: 30360 頁
 . 註冊: 7077
 . 失蹤: 1088
#5 : 2011-10-12 06:19 AM     只看本作者 引言回覆

class .....
如果單純以拼裝定義而言,asm也能做到
應該說大量的副程式寫法,構成的模組化

我在剛學程式時也不斷的想探討物件導向是怎麼回事.
但後來放棄了,始終沒有一個我想要的答案.
或應該說...
假設用class,那下面的副程式須是需要的,變數開頭宣告也是需要的,也就變成缺一不可
但假設我不用class,單純以副程式型態完成,那物件導向的意義何在??
=========
如今,或許我有更膚淺的看法
假設物件導向是指gui介面..(當然本質還是用class之類構成的東西)
你今天建立一個buttom,buttom本身就是一個物件,且還算是單獨運作的東西
今天你可以拿到,可以增加,且你可能可以這樣做buttom->txt="確認",也可能可以這樣做buttom->x=300......
那麼是不是更符合物件導向的感覺?



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  訪問主頁  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
steven0143
金驢友〔高級〕
等級: 18等級: 18等級: 18等級: 18等級: 18
steven

十週年紀念徽章(五級)  

今日心情

 . 積分: 3048
 . 精華: 25
 . 文章: 1654
 . 收花: 26261 支
 . 送花: 7729 支
 . 比例: 0.29
 . 在線: 2243 小時
 . 瀏覽: 13241 頁
 . 註冊: 7405
 . 失蹤: 270
 . ◎...雲深不知處...◎
#6 : 2011-10-12 07:32 AM     只看本作者 引言回覆

感謝諸位大大的熱心講解,受益匪淺~

模組化是個不錯的概念,就比擬成一個一個現成的副程式。

感恩~



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

十週年紀念徽章(二級)  

今日心情

 . 積分: 2086
 . 文章: 4914
 . 收花: 18694 支
 . 送花: 15318 支
 . 比例: 0.82
 . 在線: 2069 小時
 . 瀏覽: 13400 頁
 . 註冊: 7218
 . 失蹤: 630
#7 : 2011-10-13 03:47 PM     只看本作者 引言回覆

還有一個很重要的觀念:事件

在很多使用狀態下都會需要使用到"事件"
一樣以車來說
按喇叭 其實就是在"喇叭開關"-"按下去(Click)"的事件裡面去執行"發聲"的動作
如果你把"發聲"放在其他的動作就不對了,像"碰到(MouseOn)"、"按下放開後(Release)"

放對事件,這在物件導向是很重要的



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


今日心情

 . 積分: 53
 . 文章: 208
 . 收花: 433 支
 . 送花: 266 支
 . 比例: 0.61
 . 在線: 1051 小時
 . 瀏覽: 1990 頁
 . 註冊: 7248
 . 失蹤: 1450
#8 : 2011-10-15 01:52 PM     只看本作者 引言回覆

個人是覺得物件導向的重點觀念可能在於封裝跟重用 0.0
我要作一件事情,不需要真的知道他的細節是什麼,只要知道他能提供我要的東西
比如說上面提到的車門,我不用真的知道車門是怎麼組裝出來的,他如何做出開門、鎖門的功能
我只要知道我可能呼叫 door.open() 就可以把車門打開、呼叫 door.lock() 就可以把車門鎖上
細節就讓開發車門的 developer 去掌控,他只要告訴我我呼叫時他會給我什麼東西即可....

這是個人膚淺的看法,不過我自己初學物件導向時是以這個角度來解釋的.....@@



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

 . 積分: 1106
 . 文章: 3836
 . 收花: 8945 支
 . 送花: 906 支
 . 比例: 0.1
 . 在線: 2162 小時
 . 瀏覽: 43731 頁
 . 註冊: 7289
 . 失蹤: 195
 . 信義之星
#9 : 2011-12-21 11:32 AM     只看本作者 引言回覆

接觸程式設計多年 我對物件導向也是半懂而已  
寫程式都只是依樣畫葫蘆



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


十週年紀念徽章(六級)  

今日心情

 . 積分: 107
 . 文章: 284
 . 收花: 576 支
 . 送花: 732 支
 . 比例: 1.27
 . 在線: 1369 小時
 . 瀏覽: 20653 頁
 . 註冊: 8167
 . 失蹤: 233
#10 : 2011-12-24 02:47 PM     只看本作者 引言回覆

OOP、CLASS、METHOD、OBJECT
就小弟的了解物件導向以最生活化的例子
以組電腦來說
DRAM, CPU, 主機版,硬碟,營幕,等等所組成
每一個零件都是由很多家不同廠商做出來的,你 RAM 可選取很多種頻率的 DDR, DDR2, DDR3,其中又分很多廠商,CPU主機版等也是
你要組一台電腦並不需要先從做 DRAM 在做 CPU 等等的東西出來後在組,你可以買到這些東西後就組起來了
在 .Net 的世界中 Class 是包在 namespace 之中
一個 namespace 可以包含多個 Class 感覺就像主機版上可以分好幾個區塊,有CPU模組,DRAM模組,有擴充槽模組等等
METHOD:就有點像音效卡,顯示卡,usb3.0卡,電示卡等等,它們的功能在於讓電腦有各種的功能



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


十週年紀念徽章(六級)  

今日心情

 . 積分: 230
 . 文章: 510
 . 收花: 2040 支
 . 送花: 3072 支
 . 比例: 1.51
 . 在線: 1434 小時
 . 瀏覽: 6085 頁
 . 註冊: 8204
 . 失蹤: 48
#11 : 2011-12-29 09:01 AM     只看本作者 引言回覆

其實那只是概念,它是從物件(主體-可小到每一個主體)為出發點上面的前輩們都說得很清楚,不要被語言限制住,那只是手段與方法來實現你的目的,由每個物件本身來思考事件及成員,每個物件能如何發揮自己的價值提供何種服務,要達成這種目標要有哪些成員,不屬於自己的部分就請別的物件來協助,整體上來說就是由下往上的思考模式。

過去的語言思考模式是由上而下的, main() 裡面控制流程,物件的世界,是將流程與服務分離,所以提供服務才是本身該做的思維,而控制流程的可以向不同的服務提供者要求提供服務,如此一來提供服務的物件可以專心更精進的提供快速準確有效的服務,
而流程控制者可以更專心地思考自己的運作模式,不同的流程控制者使用相同的物件來服務,將兩個以上的物件組合後(加入些許的流程)再加以封裝,賦予更簡便有效的服務就是元件了。

所以物件本身的思考應該只有專心做好自己的事,而元件的思考則是使用不同的物件來達成提供的服務,主控流程盡量使用元件來達成,如此才能達到最大重複使用。

以電子硬體來說,物件就像電晶體,二極體,電阻,電容。將這些東西略加組和封裝成一塊基板或IC 就是元件,將這些基板或IC 當成提供服務的對象來達成目的才是產品本身。

音響>電源,前置,後級,面板,調諧.......
前置>EQ,立體解碼.......
立體解碼->AC3,DTS ......

注意一點很重要的是思維,一定要由下而上,站在物件本身的角度看,所以不應該是做音響的要包山包海全部自己來,將來多出不同的立體解碼規格,買了元件加入後就可以很快地有新功能上市,用不同的型號,來做產品生命週期,提供不同需要的使用者。

很多人雖知道物件導向,但是傳統的教育思維模式還是會採用由上而下的思維,如此就無法達到物件導向的精髓。
其他書上所說的都是特性,不是目的。

物件導向思維可用的地方不只是程式語言,其實早在各行業中都有運用,只是沒特別注意罷了,最多的應該是建築業,企業管理也有,總之要想 "分為何而分,組為何而組,如何能更快的分,更容易的組,分離後更有效率更單純的做好份內的事,組合要如何更少的流程更安全的組合",這才是物件導向思維的精髓,否則一樣都可達到目的為何要用不同的思維對吧。

早年有本 物件導向雜誌,由高煥堂老師為首的一群人出版的,有興趣可以去舊書攤找找(1995-200X年之間),難得的好雜誌可惜市面好像不常見。



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

十週年紀念徽章(五級)  

今日心情

 . 積分: 1222
 . 精華: 1
 . 文章: 4992
 . 收花: 9390 支
 . 送花: 15930 支
 . 比例: 1.7
 . 在線: 3468 小時
 . 瀏覽: 47137 頁
 . 註冊: 7307
 . 失蹤: 16
 . 台灣
#12 : 2011-12-29 11:55 PM     只看本作者 引言回覆

我個人對物件導向的認知啦
就是以物件為思考的出發點
對於物件能做甚麼事情
和其他物件之間的關係

其實真的就是一種概念而已
話說
我覺得我工作寫的
大部分還是以物件和程序導向互相交錯吧
看方便還有習慣而已...@@



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

十週年紀念徽章(五級)  

今日心情

 . 積分: 2664
 . 文章: 6462
 . 收花: 22900 支
 . 送花: 4903 支
 . 比例: 0.21
 . 在線: 2826 小時
 . 瀏覽: 85748 頁
 . 註冊: 7443
 . 失蹤: 110
 . 莫名奇妙的商人星球
#13 : 2011-12-30 10:16 AM     只看本作者 引言回覆

其實程式寫多 也不用去管甚麼是物件導向

因為這個只是一個程式演化後 新增的"名詞"

不過就是原始的程式碼 繁雜又多

寫了上千上萬行以後 連自己要維護搞不好都會頭大

之後進化成有function 跟迴圈方便使用與維護

但是卻又少了些便利性跟複製修改性

可能第一個function是算 某個公式 但是隔天老闆說 公式要改

就又要動原始碼

於是程式又進化 把這些function 迴圈 屬性 包起來 變成所謂的物件

讓使用者不用管裡面的程式碼到底是甚麼 只要會叫用跟操控物件的屬性還有功能

物件都是可以動態複製跟產生 而不像以前都要用複製貼上 再修改細部內容

某天老闆說要改公式 透過物件 只要去繼承原本的物件 然後把function 直接覆蓋過去

或是產生一個新的function 這時候所有資源都能取用 只要維護新的function就好

而不必整隻程式都要拿來改

其實不用物件也能透過一堆迴圈跟Function做到一樣的功能 但是總是比較麻煩 要燃燒設計師的腦漿

透過物件化的標準操作 新手也能快速上手 (不用去看所有的 Souce 只要看 物件有哪些屬性跟方法可以使用)

如果真的要用簡單的方式講物件導向

我覺得就是把一個母體 切割成很多零件 像樂高一樣

然後這些零件 今天拼成飛機 明天可能部分零件拿去拼賽車 這樣

如果是以往的程式寫法 飛機就是飛機 要改成賽車 還要自己看過飛機的每個部分 才能決定怎樣拆卸下來 改成賽車

[Ailio 在  2011-12-30 10:26 AM 作了最後編輯]



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記
ROACH
版主
等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30等級: 30
減肥中!請勿餵食

十週年紀念徽章(四級)  

 . 積分: 15119
 . 精華: 14
 . 文章: 11767
 . 收花: 140853 支
 . 送花: 6005 支
 . 比例: 0.04
 . 在線: 8870 小時
 . 瀏覽: 85616 頁
 . 註冊: 8205
 . 失蹤: 0
 . 鄉下地方
#14 : 2011-12-31 01:35 PM     只看本作者 引言回覆

老實說我一直搞不清楚什麼是物件導向
倒是我喜歡寫一堆function

當我寫一隻程式一直重複需要執行這個程式的時候
我就會多寫一個function來呼叫傳回
這應該也是種物件導向的運用吧



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


十週年紀念徽章(六級)  

今日心情

 . 積分: 230
 . 文章: 510
 . 收花: 2040 支
 . 送花: 3072 支
 . 比例: 1.51
 . 在線: 1434 小時
 . 瀏覽: 6085 頁
 . 註冊: 8204
 . 失蹤: 48
#15 : 2011-12-31 09:43 PM     只看本作者 引言回覆

樓上的三位也沒說錯,因為都能達成目的,只是思維不同,差異是看事情的角度,

傳統的做法是先由流程下手,遇到什麼才要求什麼,有時還用 call back ,雖目的達到,但是事先的規劃上去無法做到比較完善,
所有的東西都在你個人腦袋哩,文件管理難做,因為每個人有自己的習慣邏輯,較難累積文件資產。

採取物件導向思維,是先從領域的知識下手,與流程無關,思考模式是領域知識內原有的東西,只是加以分析運用,每做一個物件即可使用固定的格式寫下,因為有固定的格式,所以有許多程式碼產生器可用,文件管理較容易做,文件資產容易累積,物件可以有系統的發展強化變形,繼承組合。

分析設計時,可提前看出問題所在,使用 UML 可使專案更模組化與詳細討論,同時 UML 可文件化。這些文件的產出,不再被程式語言所局限,而是相同的思維可輕易地使用不同的程式語言來達成。也因為將思維用固的共同的語言來表達,所以只要會 UML
就可以讓不懂程式語言的人,加入討論,找出盲點。

所以因為物件導向設計的思維,使得的後續很多的步驟不再是程式員的專利(包括程式員不熟悉的部分),測試人員也可提前加入討論,讓整個專案更能經過詳細的討論找出盲點解決。

如過程式是設計師只是程式設計師那你可以用傳統思維來達成即可。
如果不將自己定位程式設計師,而是總工程師,那就必須接受改變,使用不同的思維來思考。

很多人寫了20,30年的程式黑手很難跳脫黑手階段,因為思維被侷限了。如果不想當永遠的黑手,不要再被程式碼綁住,
而是學習不同的思考模式,將自己的角度放在不同的觀點上,程式碼只是實現目的的手段,但是別忘了目的不便手段可變。

所以物件導向可以用不同的程式語言來實現,c++,c#,vb,java 都是手段,不同的語言運用在不同的領域,使我們更容易達成目的。
我們應該學習方法,才能跨不同的領域來完成目的,而不是被領域侷限。如同學習(儒道釋)法而不是(儒道釋)教,等你一通就萬法皆通(程式語言),屆時放在腦袋裡的是方法而不是程式碼。

廢話一堆,總之 物件導向思維要從 領域知識下手,領域知識可由訪談(領域專家)中取得,然後找出領域中的物件,再加以分析,使用適合的(人員)語言來實現,進而達到目的。



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

 16  1/2  1  2  > 
   

快速回覆
表情符號

更多 Smilies

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

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


 



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