討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
OOP到底是什麼?
更改我的閱讀文章字型大小
作者 : g7ff13(吉)
[ 貼文 19 | 人氣 7043 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/8/16 上午 12:45:01
有寫過一些程式,經驗不是很多,對OOP的概念很模糊,也未曾使用OOP的方式去寫程式,
想請問有沒有好懂的文章(較白話的,寫給第一次學程式的人看的程度)可以推薦的,
最好是使用C#的程式來解釋的,麻煩大家指點!謝謝!
作者 : regionbbs(小朱)技術副站長 VB.Net曠世奇才SQL Server 7/2K卓越專家.Net Framework優秀好手C#曠世奇才ASP.Net一代宗師ADO.Net卓越專家貼文超過6000則人氣指數超過70000點
[ 貼文 6372 | 人氣 82299 | 評價 36440 | 評價/貼文 5.72 | 送出評價 59 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/8/16 下午 02:14:29
先把 OOP 的三個原則學到:

1. 封裝:

把資料封裝在 class 中,使用屬性 (Property) 來做外界的存取控制:

public class myClass
{
     private string _myData = null; // 把資料封裝。
    
     public string MyData // 利用屬性來做存取控制。
     {
     get { return this._myData; }
     set { this._myData = value; }
     }
}

2. 繼承:

利用基礎類別來做 common infrastructure,讓衍生出來的類別都同時擁有 common infrastructure 的能力。
例如你可能使用一個類別來實作 Error Handling 功能,當由此類別產生子類別時,該子類別就擁有 Error Handling 的能力。
這個方法也廣泛用在介面實作,資料存取以及共用邏輯(像是 ASP.NET Base Page Class)。

3. 多形:

利用介面來定義規則,當不同的類別實作這個介面的方法時,對外界來說,相同的方法在不同類別會有不同的反應。

例如:

public interface IReader
{
     string Read();
}

public class XmlReader : IReader
{
     public string Read()
     {
     string result = null;
     .... // read from XML data source.
     return result;
     }
}

public class WebServiceReader : IReader
{
     public string Read()
     {
     string result = null;
     .... // read from Web Service
     return result;
     }
}

public class FileReader : IReader
{
     public string Read()
     {
     string result = null;
     .... // read from file data source.
     return result;
     }
}

這樣外界在呼叫 FileReader.Read(), XmlReader.Read(), WebServiceReader.Read() 時,雖然都會傳回字串,但來源則是完全不同。這個機能在 Framework 中運用相當廣泛,例如你可以這樣用:

public void HandlingResult(IReader reader)
{
     string result = reader.Read();
     // handlng result
}

參數只要傳入有實作 IReader 介面的物件即可,不用強制是 FileReader, XmlReader 或是 WebServiceReader,這樣可以讓設計上更具彈性。

其他像是 Design Pattern 這種,只能靠多寫來體會了。
作者 : g7ff13(吉)
[ 貼文 19 | 人氣 7043 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/8/18 下午 05:55:37
所以多型等於介面嗎?
作者 : regionbbs(小朱)技術副站長 VB.Net曠世奇才SQL Server 7/2K卓越專家.Net Framework優秀好手C#曠世奇才ASP.Net一代宗師ADO.Net卓越專家貼文超過6000則人氣指數超過70000點
[ 貼文 6372 | 人氣 82299 | 評價 36440 | 評價/貼文 5.72 | 送出評價 59 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/8/18 下午 08:41:20
介面可以應用多型的能力來實作更有彈性的類別庫,但多型是一種性質,和介面是不同的。
作者 : cancle(笨毛) 貼文超過200則
[ 貼文 276 | 人氣 2885 | 評價 830 | 評價/貼文 3.01 | 送出評價 12 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/3 下午 03:05:02
物件導向 是工具

不用微積分 難到 就解不了 題目嗎?
當然不是. 只是要花比較多的時間精神

跟使用函式來解問題有什麼不一樣, 答案是 一樣 =_=

用介面的說法 OOP 能有效的降低設計複雜度
最大的問題在 OOP 能有 抽像的義意存在

這是個接近人類思考模式的東西
在設計類別的使用端 跟 伺服端 做區隔

使用寫好的類別 跟 設計類別 是兩件事
在OOP裡使用類別時, 每個類別都會有抽像上的意義
一個按鈕 一個文字框 一個視窗 一個檔案存取
一個3D繪圖元件 一個多媒體撥放元件 一個網路存取元件
一個資料庫操作元件
一個檔案上傳對話框
一個堆疊 一個排序法 一個解碼器
上面這些能不能用結構化程式設計來完成 答案是 可以

OOP 有何好處
封裝 達到 抽像意義
繼承 用來對多型做支持
有了多型 能將 介面實用的更徹底
在多型模式下 抽像義意 就能更明確
設定程式時 能如魚得水的 玩樂高(積木), 堆一堆類別 就有功能 多好

而在設計類別時 那就是 煩人的東西了
這可以交給 對 某專長 有專精的人
或是 自己給自己設計些小類別 用來 輔助程式開發
或是 自己本身就是設計類別給 別人使用
當然啦 更多時後 自己就是類別設計者 而使用者 也是自己

把 OOP 當工具學習
要不要用 自由選擇
何時要用 自由選擇
什麼東西要成為 類別 午麼東西不用 : 高興就好

>所以多型等於介面嗎?

介面有更深的意義

白話一點講 : 函式指標類別
也就是 只有 函式指標 的類別 叫做介面

把 介面 當做是一個 規則
繼承介面的類別必需要實作介面上定好的函式
使用介面也就是為了達到多型的手段

介面 的 衍生
從 物件 變 元件
元件有定義了數組介面

任何的元件都必需要實作某幾組介面來符合 生成 查詢 ... 等 功能

當然 了解 別人設計好的 介面 也是很痛苦的一件事
 板主 : Clark
 > 物件導向程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 物件導向程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
物件導向程式設計
1 Arthur 180 
2 藍色LED 150 
3 長長 100 
4 Linkin 100 
5 love seeker 100 
6 Raymond 90 
7 Nets 80 
8 nop 70 
9 Huah 70 
10 矇矇 60 
物件導向程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.3125