對面向?qū)ο蟮睦斫?/h1>

————前車之鑒,后車之師:對面向?qū)ο蟮睦斫?br>

1.考慮問題的過程和思想的轉(zhuǎn)變:

在對問題的考慮時人的主觀思維起到重要作用沾凄,遇到問題會對整體問題進行考慮看是否遇到過類似問題梗醇,人為的向經(jīng)驗靠攏,對問題事件進行分析撒蟀,歸納叙谨,延伸,將多個經(jīng)驗組合在一起對更大的問題進行處理保屯。

人能夠解決問題的復(fù)雜性直接取決于抽象的類型和質(zhì)量手负,看是否能夠?qū)栴}進行拆分,將一個大的問題轉(zhuǎn)化為多個小的問題姑尺,所謂的類型是指所抽象的是什么竟终?就是問題的一部分,例如:所有的語言都提供抽象機制切蟋,第二代語言匯編語言就是對底層語言的輕微抽象统捶,而第三代語言是對匯編進行的抽象出現(xiàn)了命令式的C、BASIC等。但是這些抽象是針對計算機而言的喘鸟,是為了基于計算機的結(jié)構(gòu)更好的對硬件進行控制匆绣,而不是直接為了方便解決問題所以面對更大的代碼量就顯的略有不足(因為問題更加復(fù)雜導(dǎo)致代碼繁雜)。所以必須建立起在計算機模型和實際待解問題之間的關(guān)聯(lián)什黑,這種映射是困難的崎淳,因為編程語言的功能限制所以并不可行(面向過程是不夠的)

這就出現(xiàn)了只針對待解問題建模,早期的語言例如LISP和APL都選擇了針對問題的思路進行編程(分別對應(yīng)“所有問題最終都是列表”和“所有問題都是算法形式”)愕把,還有將問題轉(zhuǎn)換為決策鏈的語言和基于約束條件的編程語言拣凹,但是這些語言都有著局限性,這時就體現(xiàn)出了面向?qū)ο蟮膬?yōu)勢礼华,因為它的方式非常通用咐鹤,使人不會受限于任何特定類型的問題,將問題空間中的元素稱為對象圣絮,程序可以添加新類型的對象使自身適用于某個問題祈惶,面向?qū)ο笫歉鶕?jù)問題來描述問題,而不是根據(jù)執(zhí)行解決方案的代碼來解決問題扮匠。這就體現(xiàn)了面向?qū)ο蟮奶卣骱歪槍栴}的靈活多變

2.面向?qū)ο蟮奶攸c:

Simula 67是第一個支持面向?qū)ο蟮恼Z言捧请,但是之后的Smalltalk是被認(rèn)為是最純正的面向?qū)ο箝_發(fā)語言,對之后的面向?qū)ο笳Z言棒搜,C++疹蛉、java等產(chǎn)生了深遠影響,出現(xiàn)了五個基本特性力麸,表現(xiàn)了一種面相對象的設(shè)計方式:

(1)萬物皆對象:

可以抽取待解問題的任何概念化構(gòu)建可款,將其表示為程序中的對象

(2)程序是對象的集合:

對象之間根據(jù)消息來告知彼此要做的,要想請求一個對象就必須對該對象發(fā)送一個消息克蚂,這個消息相當(dāng)于一個調(diào)用請求

(3)每個對象都可以有由其他對象構(gòu)成的存儲:

可以構(gòu)建復(fù)雜的體系闺鲸,通過創(chuàng)建包含現(xiàn)有對象的包的方式來創(chuàng)建一個新的類的對象

(4)每個對象都有其類型:

每個對象都是某個類的實例,每個類最重要的區(qū)別其他類的特性是“可以發(fā)送什么信息給它”

(5)某一特定類型的所有對象都可以接收同樣的信息:

簡單來說就是具有相同特征的類之間具有可替代性

這些特點成為了面向?qū)ο蟮幕A(chǔ)埃叭,是面向?qū)ο缶幊痰年P(guān)鍵

對象具有狀態(tài)摸恍、行為和標(biāo)志,分別是內(nèi)部數(shù)據(jù)赤屋、方法立镶、和每個對象在內(nèi)存中的唯一個地址,面向?qū)ο髴?yīng)該具有封裝类早、繼承媚媒、多態(tài)、組合等特性涩僻,面向?qū)ο缶幊淌蔷哂羞@四個特性的編程方式

3.面向?qū)ο蠛兔嫦蜻^程

我覺得面向?qū)ο蠓譃樗枷牒途幊谈袷絻煞矫嫘婪叮诳紤]問題時使用思想分析問題变泄,在編碼時使用其格式,面向過程也是同理的分為思想和格式恼琼,但是只使用格式并不能成為真正的面向?qū)ο?/p>

為什么使用面向?qū)ο蠓劣迹恳驗樵谒枷敕矫娼鉀Q了問題的復(fù)雜化并針對問題來進行設(shè)計,這樣在編程格式上解決了安全性晴竞、易于修改蛙卤、可復(fù)用等問題。在面向?qū)ο蟪蔀橹髁髦柏溃Y(jié)構(gòu)化(命令式)編程起到了重要作用颤难,雖然兩者有明顯的界限但是不是互相排斥的,因為對計算機操作必然會出現(xiàn)命令式的編程已维,兩者之間是互補的行嗤,面向?qū)ο蟛灰欢ㄍ耆娲Y(jié)構(gòu)式代碼,很多遺留系統(tǒng)仍在正常工作垛耳,這些系統(tǒng)都是非面向?qū)ο蟮木帉懛绞秸て痢C嫦蜻^程的開發(fā)制約了維護和擴展,因為自上而下的結(jié)構(gòu)化的開發(fā)導(dǎo)致功能結(jié)構(gòu)死板不易改變堂鲜,導(dǎo)致一修改就會影響到其他的功能模塊就成為了嚴(yán)重缺陷栈雳。

兩者思想上的簡單區(qū)別:

1)但是我認(rèn)為處理問題時面向過程是必不可少的,因為要獲得一個結(jié)果就必須執(zhí)行一定的步驟缔莲,這與面向過程的思想:即分解執(zhí)行步驟采用每一步都是命令相似哥纫,但在處理問題時采用面向?qū)ο蟮乃枷脒M行對問題的分析,這些步驟指令被劃分到自然界的元素中進行封裝痴奏,以實現(xiàn)每個自然元素的獨立功能

2)在面向過程中通過各種功能來實現(xiàn)各種步驟和劃分結(jié)構(gòu)蛀骇,把整個軟件系統(tǒng)劃分為多個模塊每個模塊實現(xiàn)預(yù)期的子功能,所以將問題拆分的過程就是執(zhí)行解決步驟實現(xiàn)功能的時候读拆;而面向?qū)ο笫前褑栴}通過功能來劃分為各個對象松靡,而不是單純的進行功能之間的組合,而是描述這個元素在整個問題的解決步驟中的行為和狀態(tài)

3)對象式的編程先不管步驟建椰,而是確定對象的存在去然后通過對象來實施行為,然后去通知另外一個對象自己的行為岛马,而不是按照流程對計算機進行命令

4)我認(rèn)為面向過程和面向?qū)ο蟮闹饕謩e在于對方法功能的使用上不同棉姐,面向過程是為了解決一個問題將功能步驟依次使用,即使劃分模塊也是為了解決子問題而執(zhí)行步驟啦逆,由數(shù)據(jù)來控制功能(函數(shù))伞矩;而面向?qū)ο箅m然針對待解問題包含的元素而進行對象的劃分,但是我認(rèn)為是依據(jù)功能的共性進行抽象成類夏志,使有共性的功能成為一個獨立整體乃坤,而不是松散的結(jié)構(gòu),通過功能來控制封裝內(nèi)部的數(shù)據(jù)

包裝對象是指在面向?qū)ο蟮念愔邪渌a,你可以將結(jié)構(gòu)化的代碼包裝到一個對象的內(nèi)部湿诊,使其行為就像對象一樣狱杰,即對功能的分類

4.如何進行面向?qū)ο蟮乃枷?/p>

在開始的時候需要建立模擬問題的對象領(lǐng)域模型,這時就有自底向上的抽象過程厅须,自上而下的分解過程:

自底向上的抽象:針對問題分析各個元素之間的供需關(guān)系(即各個最基本對象之間的關(guān)系)仿畸,尋找到最基本的對象后再將其抽象為類,在將這些類抽取共性建立父類朗和,這樣可以避免類的抽象層次過高错沽,而復(fù)雜化問題。

自上而下的分解:每一步分解都有具體的對象眶拉,方便的分清功能千埃,但是不同于結(jié)構(gòu)化(命令式)的思想,因為不像面向過程一樣去分解功能忆植,而是將功能分開放可,降低耦合性在開發(fā)過程中針對的問題不斷擴大,導(dǎo)致需要建立模擬問題的各種對象模型唱逢。

建立模型必要的組成部分:

問題領(lǐng)域 :是軟件系統(tǒng)對真實系統(tǒng)的模擬吴侦,是系統(tǒng)對真實的映射

對象 :在問題領(lǐng)域?qū)Ω髯匀辉氐某橄螅杀姸鄬ο蠼M合起來構(gòu)成對問題領(lǐng)域的系統(tǒng)

屬性坞古、行為 :包括具有的實現(xiàn)和功能备韧,在設(shè)計時只需要考慮有什么功能

狀態(tài) :狀態(tài)是對象的某個狀態(tài)的屬性取值,是可以改變的

實例 :同種類的實例具有相同的屬性痪枫,表明具有相同的含義

消息和服務(wù) :一個功能可能由多個對象協(xié)同工作织堂,一個對象根據(jù)一個對象發(fā)送的消息來執(zhí)行相應(yīng)的方法,消息由調(diào)用者發(fā)送奶陈,服務(wù)由被調(diào)用者提供易阳。一個軟件對使用者來說就是一個服務(wù)提供者,在系統(tǒng)內(nèi)部的子系統(tǒng)也是服務(wù)提供者吃粒,子系統(tǒng)就是對象或多個對象的組合潦俺,每個子系統(tǒng)都是獨立的個體通過消息來獲得服務(wù)

接口 :每個對象都是服務(wù)提供者,通過接口對外提供服務(wù)徐勃,由公開的方法構(gòu)成接口事示,但在java中的接口還有另一個意思即接口類型,明確的描述系統(tǒng)對外提供的所有服務(wù)僻肖,能夠更加清晰的把實現(xiàn)細(xì)節(jié)和接口分離

5.面向?qū)ο蟮奶攸c

封裝(透明):隱藏內(nèi)部細(xì)節(jié)僅對外公開接口肖爵,可以避免暴露內(nèi)部的內(nèi)聚關(guān)系,降低整體的耦合度通過訪問控制機制來進行封裝

抽象 :從問題領(lǐng)域的事物開始臀脏,對事物抽取屬性和行為成為一個對象劝堪,在抽象對象把具有相同屬性和行為的對象抽象為類冀自,在對類實現(xiàn)抽象成為父類,在java語言中則有兩種意思秒啦,一是抽象的思維過程熬粗,二是用來修飾類和方法,若一個方法被abstract修飾則表明這個方法沒有具體的實現(xiàn)帝蒿,若一個類被abstract 修飾則表明這個類沒有辦法被實例化

繼承 :在父類和子類之間存在著繼承和擴展關(guān)系荐糜,子類繼承了父類的方法還同時擴展出新的功能和方法,并且可以覆蓋父類中的方法實現(xiàn)方式(覆蓋:指在子類中重新實現(xiàn)父類的方法)

組合 :組合是一種用多個簡單子系統(tǒng)來組裝出復(fù)雜系統(tǒng)的有效手段 葛超,對于子系統(tǒng)之間存在關(guān)聯(lián)或依賴關(guān)系

多態(tài) :當(dāng)系統(tǒng)A訪問系統(tǒng)B時暴氏,B可以通過多種實現(xiàn)方式來提供服務(wù),而對于A來說是透明的绣张,動態(tài)綁定(是指在執(zhí)行期間判斷所引用對象的實際類型答渔,根據(jù)其實際類型決定其相應(yīng)的方法,在運行過程中把函數(shù)的調(diào)用與響應(yīng)所需要的代碼相結(jié)合的過程稱為動態(tài)綁定)

6.UML對面向?qū)ο蟮膸椭?/p>

UML主要是建模用的侥涵,是一種設(shè)計方法沼撕,是在軟件設(shè)計開發(fā)時進行溝通的,是開發(fā)團隊內(nèi)部的高效手段

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末芜飘,一起剝皮案震驚了整個濱河市务豺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗦明,老刑警劉巖笼沥,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異娶牌,居然都是意外死亡奔浅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門诗良,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汹桦,“玉大人,你說我怎么就攤上這事鉴裹∥杪妫” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵径荔,是天一觀的道長督禽。 經(jīng)常有香客問我,道長猖凛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任绪穆,我火速辦了婚禮辨泳,結(jié)果婚禮上虱岂,老公的妹妹穿的比我還像新娘。我一直安慰自己菠红,他們只是感情好第岖,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著试溯,像睡著了一般蔑滓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遇绞,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天键袱,我揣著相機與錄音,去河邊找鬼摹闽。 笑死蹄咖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的付鹿。 我是一名探鬼主播澜汤,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舵匾!你這毒婦竟也來了俊抵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤坐梯,失蹤者是張志新(化名)和其女友劉穎徽诲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烛缔,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡馏段,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了践瓷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片院喜。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖晕翠,靈堂內(nèi)的尸體忽然破棺而出喷舀,到底是詐尸還是另有隱情,我是刑警寧澤淋肾,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布硫麻,位于F島的核電站,受9級特大地震影響樊卓,放射性物質(zhì)發(fā)生泄漏拿愧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一碌尔、第九天 我趴在偏房一處隱蔽的房頂上張望浇辜。 院中可真熱鬧券敌,春花似錦、人聲如沸柳洋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熊镣。三九已至卑雁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绪囱,已是汗流浹背测蹲。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毕箍,地道東北人弛房。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像而柑,于是被迫代替她去往敵國和親文捶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容