程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 叩開C#之門系列之C#與面向對象編程語言

叩開C#之門系列之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的知識,知道怎麼寫用例。或者利用極限編程的方法,把一個個用戶故事寫出來,然後一一識別。不過這些知識對於初學者似乎太難了。我們現在知道能有這樣一個方法就可以了。我更希望的是,讀者在看完本節,能夠建立起“一切皆為對象”的思想。最後,更希望大家能把識別對象看作是一種填字游戲,關鍵不在於答案是什麼,樂趣全在游戲中了。

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved