qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          解讀面向?qū)ο蟮某绦蛟O(shè)計(二)

             面向?qū)ο缶幊蹋∣bjectOrientedProgramming,OOP,面向?qū)ο蟪绦蛟O(shè)計)是一種計算機編程架構(gòu)。接上一篇

            OOP的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP達到了軟件工程的三個主要目標(biāo):重用性、靈活性和擴展性。

            一、OOP技術(shù)的歷史

            面向?qū)ο蠹夹g(shù)最初是從面向?qū)ο蟮某绦蛟O(shè)計開始的,它的出現(xiàn)以60年代simula語言為標(biāo)志。80年代中后期,面向?qū)ο蟪绦蛟O(shè)計逐漸成熟,被計算機界理解和接受,人們又開始進一步考慮面向?qū)ο蟮拈_發(fā)問題。這就是九十年代以MicrosoftVisual系列OOP軟件的流行的背景。

            傳統(tǒng)的結(jié)構(gòu)化分析與設(shè)計開發(fā)方法是一個線性過程,因此,傳統(tǒng)的結(jié)構(gòu)化分析與設(shè)計方法要求現(xiàn)實系統(tǒng)的業(yè)務(wù)管理規(guī)范,處理數(shù)據(jù)齊全,用戶能全面完整地其業(yè)務(wù)需求。

            傳統(tǒng)的軟件結(jié)構(gòu)和設(shè)計方法難以適應(yīng)軟件生產(chǎn)自動化的要求,因為它以過程為中心進行功能組合,軟件的擴充和復(fù)用能力很差。

            對象是對現(xiàn)實世界實體的模擬,因面能更容易地理解需求,即使用戶和分析者之間具有不同的教育背景和工作特點,也可很好地溝通。

            區(qū)別面向?qū)ο蟮拈_發(fā)和傳統(tǒng)過程的開發(fā)的要素有:對象識別和抽象、封裝、多態(tài)性和繼承。

            對象(Object)是一個現(xiàn)實實體的抽象,由現(xiàn)實實體的過程或信息牲來定義。一個對象可被認為是一個把數(shù)據(jù)(屬性)和程序(方法)封裝在一起的實體,這個程序產(chǎn)生該對象的動作或?qū)λ邮艿降耐饨缧盘柕姆磻?yīng)。這些對象操作有時稱為方法。對象是個動態(tài)的概念,其中的屬性反映了對象當(dāng)前的狀態(tài)。

            類(Class)用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

            由上分析不難看出,盡管OOP技術(shù)更看中用戶的對象模型,但其目的都是以編程為目的的,而不是以用戶的信息為中心的,總想把用戶的信息納入到某個用戶不感興趣的“程序?qū)ο?#8221;中。

            二、OOP的優(yōu)缺點

            OOP的優(yōu)點:

            使人們的編程與實際的世界更加接近,所有的對象被賦予屬性和方法,結(jié)果編程就更加富有人性化。

            OOP的缺點:

            就C++而言,由于面向更高的邏輯抽象層,使得C++在實現(xiàn)的時候,不得不做出性能上面的犧牲,有時候甚至是致命的(所有對象的屬性都經(jīng)過內(nèi)置多重指針的間接引用是其性能損失的主要原因之一;不過,筆者的局限性在于未使用過VC++外的面向?qū)ο笳Z言,所以不是十分肯定,哈哈,有人笑出來了…)。

            在計算機速度飛速發(fā)展的今天,你可能會說,一丁點的性能犧牲沒什么大不了。是的,從面向?qū)ο蟮慕嵌龋沟木幊痰慕Y(jié)構(gòu)更加清晰完整,數(shù)據(jù)更加獨立和易于管理,性能的犧牲可以帶來這么多的好處,沒有理由不做穩(wěn)賺的生意吧?

            不過,在某些對速度要求極高特殊場合,例如你做的是電信的交換系統(tǒng),每秒鐘有超過百萬的人同時進行電話交換,如果,每一個數(shù)據(jù)交換過程都是一個對象,那么總的性能損失將是天文數(shù)字!!

            或者這個例子不夠貼身,再舉個例子吧。假如你受聘于一個游戲設(shè)計公司,老板希望做出來的游戲可以更多的兼顧到更多的電腦使用者,游戲每秒鐘的運行的幀可以更多,子彈和爆炸物可以更多、更華麗。那么,你會發(fā)現(xiàn)使用C++會使你的程序變得笨拙,無法滿足你的需求,除非你非得要你的游戲運行于奔騰四的機器上(如果不是,而你又堅持用C++的對象編程,那么請減少主角的槍的威力吧)。

            如果你是冥頑不寧的人,你說不相信OOP會有性能上的損失,那么,我記得曾看到在CSDN上關(guān)于VB和VC執(zhí)行效率的討論的文章,講述的就是使用了MFC以后,執(zhí)行效率甚至低于VB開發(fā)出來的東西。請各位驗證一下:如果使用的是純粹的C語言語法的話,那么一定會比在VB編出來的東西要快很多(GetTickCount函數(shù)可以查閱MSDN,如果想更加精確一些,可以使用QueryPerformanceCounter函數(shù))。

          posted on 2012-02-02 10:07 順其自然EVO 閱讀(148) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2012年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          26272829123
          45678910

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 岑溪市| 忻城县| 白山市| 维西| 墨玉县| 德格县| 交口县| 玉龙| 拜城县| 缙云县| 岗巴县| 乌兰察布市| 龙口市| 化州市| 莎车县| 昌吉市| 瓦房店市| 云梦县| 东城区| 高碑店市| 德令哈市| 丰台区| 融水| 桑日县| 巧家县| 浦县| 沂南县| 福清市| 外汇| 昆山市| 肇源县| 噶尔县| 巨野县| 无极县| 县级市| 右玉县| 乳山市| 渭南市| 新巴尔虎右旗| 新竹市| 高安市|