qileilove

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            OOP的優(yōu)點(diǎn):

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

            OOP的缺點(diǎn):

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

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

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

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

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

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


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


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

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 台东市| 历史| 龙里县| 汤原县| 丰城市| 库尔勒市| 沂水县| 长顺县| 平定县| 开原市| 白玉县| 兴文县| 苏尼特右旗| 康乐县| 罗江县| 谢通门县| 中卫市| 金山区| 东港市| 洞头县| 许昌市| 泊头市| 绥中县| 灵丘县| 疏附县| 新乡市| 集安市| 大邑县| 泰州市| 石阡县| 青州市| 绥江县| 齐齐哈尔市| 泽普县| 绥棱县| 延吉市| 金山区| 繁昌县| 土默特右旗| 屏山县| 湖南省|