熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

叩開C#之門系列之C#與面向對象編程語言

2013-11-13 10:52:36  來源: .NET編程 

  C#是純粹的面向對象編程語言它真正體現了一切皆為對象的精神在C#中即使是最基本的數據類型如intdoublebool類型都屬於SystemObject類型此外使用C#編程不會存在與游離於對象之外的屬於過程的東西因此學習C#就必須具有面向對象思想不明白所謂的面向對象思想就不可能掌握C#的精髓而對於C#的理解就只能僅限於語言特色的表面了

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

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

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

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

  還要注意的是很多時候屬性其實本身也是一個對象例如姓名可以是string類型它屬於SytemObject對象類型我們也可以單獨為姓名建立一個類對象

  public class Name
  {
   public string FirstName;
   public string MiddleName;
   public string LastName;
  }

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

  要掌握面向對象思想就必須具備識別系統中對象的能力在我們要開發的系統中哪些需要定義為單獨 的對象而且這個對象應該具備哪些屬性和行為都是初學者比較頭疼的問題要正確地識別對象就需要首先分析該系統所應實現的功能例如我們要求開發一個電子商務系統功能要求如下

  支持商品的查詢功能

  用戶如需購買商品需要成為注冊用戶並登錄

  如果當前庫存無該商品用戶可以預訂

  用戶可以將商品放入購物車

  用戶購買商品之前需提交訂單

  用戶提交訂單後系統應將訂購信息發送郵件給用戶

  用戶可以對商品添加評論

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

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

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


From:http://tw.wingwit.com/Article/program/net/201311/14687.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.