国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

再談面向?qū)ο?/h1>
2019-11-18 12:07:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  談到面向?qū)ο螅@方面的文章非常多。但是,明確地給出對(duì)象的定義或說(shuō)明對(duì)象的定義的非常少——至少我現(xiàn)在還沒有發(fā)現(xiàn)。其初,“面向?qū)ο蟆笔菍V冈诔绦蛟O(shè)計(jì)中采用封裝、繼續(xù)、抽象等設(shè)計(jì)方法。可是,這個(gè)定義顯然不能再適合現(xiàn)在情況。面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開發(fā)的各個(gè)方面。如,面向?qū)ο蟮姆治觯∣OA,Object Oriented Analysis),面向?qū)ο蟮脑O(shè)計(jì)(OOD,Object Oriented Design)、以及我們經(jīng)常說(shuō)的面向?qū)ο蟮木幊虒?shí)現(xiàn)(OOP,Object Oriented PRogramming)。許多有關(guān)面向?qū)ο蟮奈恼露贾皇侵v述在面向?qū)ο蟮拈_發(fā)中所需要注重的問(wèn)題或所采用的比較好的設(shè)計(jì)方法。看這些文章只有真正懂得什么是對(duì)象,什么是面向?qū)ο螅拍茏畲蟪潭鹊貙?duì)自己有所裨益。這一點(diǎn),恐怕對(duì)初學(xué)者甚至是從事相關(guān)工作多年的人員也會(huì)對(duì)它們的概念模糊不清。下面我從一般的概念出發(fā),再引申到軟件開發(fā)領(lǐng)域中所涉及到的對(duì)象的概念。
  
  上一篇文章中我曾舉過(guò)一個(gè)樹的例子來(lái)說(shuō)明對(duì)象的概念。這里我仍然利用它對(duì)對(duì)象的概念做闡述。“對(duì)象”一詞,英文為“Object”,德語(yǔ)為“Sachen”,都可以譯做“物體”。其實(shí)所有的物體都可以作為我們的對(duì)象——只要我們注重并對(duì)它思考了。一個(gè)人從生下來(lái)到進(jìn)行第一次的戶外活動(dòng),他將接觸到許許多多的新鮮事物,他將睜大眼睛好奇地看著這生疏的一切。也許對(duì)他來(lái)說(shuō),那些高大的東西,有干,有枝,有葉——雖然那時(shí)他并不知道這些——其映象已經(jīng)深刻地印在了他的腦海中。此時(shí)對(duì)他來(lái)說(shuō),樹并不是對(duì)象,因?yàn)樵谒哪X子當(dāng)中只有樹的映象,而沒有對(duì)樹的精神上的意向。當(dāng)他再大一點(diǎn)時(shí),也許他會(huì)想著爬到樹上去玩一會(huì)兒——但此時(shí)樹也還不是他的對(duì)象。存在的對(duì)象只是他自己——他想讓自己去做某件事。長(zhǎng)大以后,也許他他成了一名木匠——就像我們成了程序員,用他的鋸子、斧頭把一棵樹砍下來(lái)做成一張桌子——就像我們利用java 、C/C++語(yǔ)言開發(fā)出一套數(shù)據(jù)庫(kù)系統(tǒng)。在這里,樹是木匠的對(duì)象,而數(shù)據(jù)庫(kù)系統(tǒng)是程序員的對(duì)象。于是,我在這里給對(duì)象下一個(gè)定義:對(duì)象是人腦中的物質(zhì)意識(shí)和精神意識(shí)。通俗地講,就是事物在人腦中的映象和人腦對(duì)事物的意向。之所以要在這里強(qiáng)調(diào)“事物”,是我要說(shuō)明這里所說(shuō)的“物質(zhì)”并不是物理學(xué)中的物質(zhì),思維活動(dòng)、事物間的關(guān)系我們也稱為是物質(zhì)的。
  
  真正要在較深的層面上討論什么是對(duì)象是很復(fù)雜的,因?yàn)檫@要涉及到精神意識(shí)本質(zhì)的問(wèn)題,遠(yuǎn)遠(yuǎn)超出了我們要討論的范圍。我們不要討論什么高深的問(wèn)題,就以實(shí)用為主。我就利用這個(gè)概念來(lái)舉一個(gè)簡(jiǎn)單的例子。木匠前面有一張桌子。他可能要面臨兩個(gè)問(wèn)題:一是給桌子添加一些部件如抽屜,這樣桌子就可以放更多的東西;二是裝飾一下桌子,使得它更美觀。在這里,桌子是他的對(duì)象——他對(duì)桌子進(jìn)行思考了,這使得他對(duì)桌子的意向性也明顯地顯露出來(lái)。我們甚至可以把改造桌子稱為“面向?qū)ο蟮母脑臁保驗(yàn)槟遣皇请S意的改造。這一點(diǎn)我在隨后對(duì)面向?qū)ο笏枷氲恼f(shuō)明中提到為什么說(shuō)是“不是隨意的改造”。考慮一下“面向?qū)ο蟆保梢灾浪且粋€(gè)動(dòng)賓關(guān)系的短語(yǔ)。動(dòng)詞“面向”表面,這個(gè)短語(yǔ)含有“如何去做”的意思,這可以說(shuō)是涉及到了方法論的范疇了。這也給我們提供了一個(gè)重要的信息:“面向?qū)ο蟮淖?.....”不僅牽涉到什么是對(duì)象的問(wèn)題,還牽涉到如何去做的問(wèn)題。木匠如何去做他的桌子,我們不必?fù)?dān)心:他肯定能做好的——假如他是一個(gè)優(yōu)秀的木匠的話。他有著豐富的經(jīng)驗(yàn),他有一套自己的方法,他知道如何去做。也許在做桌子之初就已經(jīng)做了良好的設(shè)計(jì)以為以后的“升級(jí)”作預(yù)備。這就像一個(gè)經(jīng)驗(yàn)豐富的程序員:他知道怎么設(shè)計(jì)才能讓自己的程序結(jié)構(gòu)清楚、易懂,輕易排錯(cuò)也易于維護(hù)。
  
  有一點(diǎn)要注重的是,對(duì)象不是實(shí)體,它可以脫離實(shí)體而存在。這是因?yàn)椋瑢?duì)象只不過(guò)是人腦思維活動(dòng)的產(chǎn)物;我們可以用某種方式如自然語(yǔ)言、圖畫等將它表示出來(lái),就像我們?cè)谲浖_發(fā)中所說(shuō)的對(duì)象用類(程序當(dāng)中)或系統(tǒng)結(jié)構(gòu)圖(如流程圖,層次圖,HipO圖等)來(lái)描述一樣。
  
  于是,我們就可以對(duì)象我們一般在軟件開發(fā)領(lǐng)域里所討論的對(duì)象下個(gè)定義了:對(duì)象由一個(gè)數(shù)據(jù)集以及對(duì)該數(shù)據(jù)集的操作組成。這個(gè)定義適合程序語(yǔ)言中的類,也適合對(duì)整個(gè)系統(tǒng)而言。也許大家會(huì)對(duì)這個(gè)定義覺得很熟悉:這不是程序或進(jìn)程的定義嗎?注重,這里的對(duì)象是有“自我意識(shí)”的,也就是說(shuō),它是有自己的行為的。而“進(jìn)程”指的是一系列的二進(jìn)制流的集合,是一次運(yùn)行活動(dòng)。在程序中,我們用類來(lái)描述對(duì)象,而對(duì)整個(gè)的系統(tǒng),我們用系統(tǒng)圖來(lái)描述。在這里,系統(tǒng)也是我們的對(duì)象。數(shù)據(jù)集就像事物在我們大腦中的映像,對(duì)數(shù)據(jù)集的操作就如同我們對(duì)事物的意向。假如我們仔細(xì)考察系統(tǒng)的各個(gè)部分,那么,它們也可以看作是對(duì)象。“面向?qū)ο蟮腦X”就是要求我們?nèi)绾魏侠淼胤峙鋵?duì)象之間的層次結(jié)構(gòu),使得它清楚明了,在保持效率的同時(shí)還便于排錯(cuò)、維護(hù)。我們有一個(gè)專業(yè)名詞來(lái)表示已經(jīng)定型、得到大家認(rèn)可的軟件方法,那就我們常說(shuō)的模式。各行各業(yè)都會(huì)有它自己的一般的方法模式,如建筑業(yè)有建筑模式,軟件開發(fā)有其開發(fā)模式。我想,當(dāng)初愛因斯坦之所以做出幾個(gè)丑陋的凳子,就是因?yàn)樗欢玫首拥脑O(shè)計(jì)模式吧。這就如同好多編程初學(xué)者,稍微大一點(diǎn)的程序就會(huì)寫出雜亂不堪的、除了自己誰(shuí)也看不懂的代碼,也許過(guò)了幾天連自己都看不懂了。
  
  在軟件開發(fā)過(guò)程當(dāng)中,系統(tǒng)(我們面對(duì)的終極對(duì)象)的分析、設(shè)計(jì)才是最重要的。而這兩方面是緊密結(jié)合在一起的。這兩步?jīng)]有做好,下面的編碼實(shí)現(xiàn)工作很難玩成,可以說(shuō)是寸步難行。我曾經(jīng)在一家軟件公司(說(shuō)是公司,其實(shí)加上老板才只有六、七個(gè)人)做過(guò)一段時(shí)間。那時(shí)老板叫我們用Java做一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)(圖書館治理系統(tǒng)),用來(lái)當(dāng)招牌,以后也好對(duì)接項(xiàng)目有利。我以為他會(huì)先拿出一個(gè)設(shè)計(jì)圖讓我們看,不料他說(shuō)現(xiàn)在就開始做。說(shuō)實(shí)在的,那時(shí)我對(duì)這方面根本沒有經(jīng)驗(yàn)。我當(dāng)時(shí)就對(duì)他說(shuō),你至少得把你設(shè)計(jì)的藍(lán)圖給我們看一看吧?他說(shuō)沒有,他也不知道如何做,以前沒做過(guò)。還說(shuō)我們邊做邊學(xué)習(xí)。我說(shuō)那至少你應(yīng)該先做一做系統(tǒng)分析吧。他說(shuō)要是我有這能力還能在這里呆著?結(jié)果可想而知,我們?cè)谀抢锎袅藥滋欤@里瞧一瞧,那里看一看,又在機(jī)子上寫一寫,什么也沒做成。老板看見我們稍微有所松懈,就不斷地催促快做快做。后來(lái)我受不了,就一個(gè)人跑了。也不知道他們做成了沒有。可以說(shuō)這是一個(gè)不成功的例子。就算是寫成了,沒有分析、設(shè)計(jì)的結(jié)果肯定也是很難維護(hù)的。這就象是請(qǐng)來(lái)的木匠,把一套家具打造得很不合理,看上去非常糟糕可能還很不實(shí)用。有誰(shuí)會(huì)愿意用這樣的家具?程序包設(shè)計(jì)得不好,有誰(shuí)能用得好?無(wú)論誰(shuí)用起來(lái)都會(huì)很吃力。假如說(shuō)一個(gè)項(xiàng)目沒有設(shè)計(jì)好,即使開發(fā)出來(lái)了,后來(lái)的維護(hù)工作別人怎么能接手?在我們中國(guó)軟件領(lǐng)域有這樣事情的例子很多。當(dāng)然,產(chǎn)生這樣情況的原因很多,中國(guó)的體制、公司的實(shí)力也是一大方面。但是如何去做,有是一個(gè)范圍很寬的話題了。
  
  上面聊得多了。對(duì)象是一個(gè)比較廣泛的概念,在我們通常軟件領(lǐng)域里也是這樣。對(duì)象之間可以包含對(duì)象。對(duì)木匠來(lái)說(shuō),一套組合家具是一個(gè)對(duì)象,一件衣柜也是對(duì)象——全局和局部都要考慮。對(duì)他們來(lái)說(shuō),如何從整體到部分的設(shè)計(jì)出受人好評(píng)的家具,是需要豐富的經(jīng)驗(yàn)和良好的設(shè)計(jì)方法的。對(duì)我們來(lái)說(shuō)也是這樣。除了要打下扎實(shí)的基本功,積累豐富的經(jīng)驗(yàn),還要注重學(xué)習(xí)我們的前輩們給我們留下的東西,以及同行們的好的方法。現(xiàn)在,有關(guān)面向?qū)ο蟮臅⑽恼露己芏啵覀兌紤?yīng)該去看看、去學(xué)習(xí)。
  
  全文說(shuō)了這許多,只談了有關(guān)面向?qū)ο蟮母拍睢S袔孜慌笥褋?lái)信問(wèn)到如何劃分對(duì)象層次、結(jié)構(gòu)對(duì)系統(tǒng)運(yùn)行的重要性等,受篇幅所限,不能述及。還有可能有的朋友對(duì)對(duì)象的理解不是很合理,這里我談一下我的觀點(diǎn)。對(duì)象在系統(tǒng)運(yùn)行時(shí)是有其生命期的。但是,在運(yùn)行內(nèi)對(duì)象自身的改變(如,動(dòng)態(tài)地增加、縮減功能,數(shù)據(jù)集的變化等)不能看作是改變了對(duì)象。例如對(duì)于一個(gè)二叉樹,初始化時(shí)只有根節(jié)點(diǎn),當(dāng)然我們可以看作是一個(gè)節(jié)點(diǎn)對(duì)象,但一般我們是將它看成一個(gè)整體的二叉數(shù)對(duì)象。當(dāng)樹生成之后,它還是那個(gè)對(duì)象,而不能把它看成是另外一個(gè)對(duì)象了。假如你那樣理解的話,就把對(duì)象的各個(gè)運(yùn)行時(shí)期分離開來(lái)了,這就與對(duì)象的概念有曲解了。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

主站蜘蛛池模板: 左贡县| 兴仁县| 武夷山市| 原平市| 公主岭市| 泰州市| 富川| 美姑县| 阿城市| 武宁县| 南安市| 汤阴县| 枝江市| 孟津县| 永城市| 怀来县| 信阳市| 苍山县| 大连市| 赫章县| 临猗县| 绥芬河市| 凤庆县| 林周县| 砚山县| 泾川县| 五家渠市| 仙桃市| 彭山县| 灵川县| 四川省| 富顺县| 南乐县| 舒兰市| 大港区| 石台县| 绥滨县| 屯昌县| 新巴尔虎左旗| 乌兰县| 左云县|