C#與物件導向程式設計語言

來源:互聯網
上載者:User

《扣開C#之門》系列之二

二、C#與物件導向程式設計語言

C#是純粹的物件導向程式設計語言,它真正體現了“一切皆為對象”的精神。在C#中,即使是最基本的資料類型,如int,double,bool類型,都屬於System.Object類型。此外,使用C#編程,不會存在與游離於對象之外的屬於過程的東西。因此,學習C#,就必須具有物件導向思想,不明白所謂的“物件導向思想”,就不可能掌握C#的精髓,而對於C#的理解,就只能僅限於語言特色的表面了。

很多講解物件導向思想的書籍和文章喜歡將物件導向與面向過程相比較,然而對於學習程式設計的初學者而言,是完全沒有必要的。一張空白的紙張,事實上比寫滿字的紙張更利於未來的發展。

那麼什麼是“物件導向思想”?其精要當然是“一切皆為對象”的意義。軟體的開發與設計,是圍繞著開發的目標進行的。比如開發一個電子商務網站,那麼與電子商務有關的都是我們要操作和關心的,商品、訂單、使用者、目錄、購物車等等,都是對象。如果要開發一個論壇,那麼論壇中必備的要素,如論壇分類、主題、文章、評論、使用者,也全都是對象。從小處說,我們要求寫一個演算法用以計算階乘,那麼起始值、運算結果、以及整個演算法都是對象。

那麼對象具有什麼特質?一般而言,一個對象應具有屬性和行為。以現實世界為例,“人”作為一種特殊的動物,也是我們所稱謂的“對象”。這個對象具有很多屬性,例如姓名,身高、體重、民族、國籍、出生年月等等。而行為呢,可以是行走、吃飯、跑步、乃至於玩遊戲、踢足球。如果從詞義學的角度來看,屬性更偏向於名詞的範疇,而行為則近乎於動詞。然而對象也有特殊的情況,或者只具有屬性,或者只具有行為。例如身份證,可能只具有姓名,出生年月,籍貫,社會安全號碼等屬性,而沒有行為。例如“飛”,這本身是一種動作,但同樣可以認為是一種行為。

然而這種劃分並非絕對,根據實際情況,同一種對象具有的屬性和行為可能不一樣。例如同樣是“人”,如果是要開發一個戶籍管理系統,我們就不必去考慮行走、吃飯、跑步等行為,但如果是一個足球遊戲,那麼對象“人”,就需要各種踢足球的動作作為該對象的行為了。再比如“身份證”對象,也可能為了使用方便,會為它添加“IsValidate”這樣一個行為。

還要注意的是,很多時候屬性其實本身也是一個對象,例如姓名,可以是string類型,它屬於Sytem.Object物件類型,我們也可以單獨為姓名建立一個類對象:
public class Name
{
 public string FirstName;
 public string MiddleName;
 public string LastName;
}

在C#裡,有各種各樣的物件類型,除了本身提供的基本類型外,還支援自訂各種類型,包括class,struct,enum,interface,delegate,event。以前面的例子來看,對象Person“人”,就可以被定義為class類型,國籍可以被定義為enum類型。沒有行為的身份證,也可以被定義為struct類型。動作“飛”可以被定義為interface類型。至於delegate和event,則是一種特殊物件類型,例如我們可以為論壇管理系統,定義一系列事件,如BeforePost,AfterPost等等。關於這些內容,我會在後面的內容中詳細講解。

要掌握物件導向思想,就必須具備識別系統中對象的能力。在我們要開發的系統中,哪些需要定義為單獨的對象,而且這個對象應該具備哪些屬性和行為,都是初學者比較頭疼的問題。要正確地識別對象,就需要首先分析該系統所應實現的功能。例如,我們要求開發一個電子商務系統,功能要求如下:
1、支援商品的查詢功能;
2、使用者如需購買商品,需要成為註冊使用者並登入;
3、如果當前庫存無該商品,使用者可以預訂;
4、使用者可以將商品放入購物車;
5、使用者購買商品之前,需提交訂單;
6、使用者提交訂單後,系統應將訂購資訊發送郵件給使用者;
7、使用者可以對商品添加評論。

有一個簡單的方法,可以協助我們識別對象,就是找出這些功能描述中的關鍵名詞,如商品、使用者、購物車、訂單、評論。這些詞語基本上可以涵蓋這個電子商務系統的主要對象了。至於對象的屬性,可以考察該系統對這個對象的要求和所需要的資訊。例如商品,必然要求有商品名、價格、相關圖片、所屬類別、庫存量等等。至於行為,我們還可以從功能描述中去尋找與這些對象名詞相關聯的動詞。例如商品的查詢,就代表商品具有Search行為。使用者註冊與登入,就代表該使用者具有這兩種行為:Register,SignIn。當然隱含的行為自然還包括SignOut。

真正要識別好對象,也許我們需要掌握UML的知識,知道怎麼寫用例。或者利用極限編程的方法,把一個個使用者故事寫出來,然後一一識別。不過這些知識對於初學者似乎太難了。我們現在知道能有這樣一個方法就可以了。我更希望的是,讀者在看完本節,能夠建立起“一切皆為對象”的思想。最後,更希望大家能把識別對象看作是一種填字遊戲,關鍵不在於答案是什麼,樂趣全在遊戲中了。

物件導向思想博大精深,不是三言兩語就能說清楚的。但建立這樣一種思想,要存乎於你的內心,這在與一種“妙悟”。也許在你寫了幾百個小程式之後還沒能體會到物件導向的真諦,但是在霎那之間,你卻突然明白了,頓有一種撥開雲開見月明的喜悅。我不是故意賣弄玄虛,有時候開發軟體還真需要那麼一點靈感,有人說,編程是一門藝術,我同意。那麼這種“妙悟”什麼時候能來到,我無法確知答案,這需要你的體悟。不過這種體悟與談禪無關,不是每天冥想就可以的,還是踏實點,多寫寫程式,慢慢你就會明白了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.