面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過(guò)程程序設(shè)計(jì)的區(qū)別1_第1頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過(guò)程程序設(shè)計(jì)的區(qū)別1_第2頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過(guò)程程序設(shè)計(jì)的區(qū)別1_第3頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過(guò)程程序設(shè)計(jì)的區(qū)別1_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過(guò)程程序設(shè)計(jì)的區(qū)別想要知道面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過(guò)程程序設(shè)計(jì)的區(qū)別,我們應(yīng)先了解什么事面向?qū)ο蟪绦蛟O(shè)計(jì),什么事面向過(guò)程程序設(shè)計(jì),這樣我們才能弄清他們之間的區(qū)別,下面我們就什么是面向?qū)ο蟪绦蛟O(shè)計(jì)和什么事面向過(guò)程程序設(shè)計(jì)展開論述。面向?qū)ο蟮幕靖拍睿簩?duì)象。對(duì)象是人們要進(jìn)行研究的任何事物,從最簡(jiǎn)單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對(duì)象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計(jì)劃或事件。對(duì)象的狀態(tài)和行為。對(duì)象具有狀態(tài),一個(gè)對(duì)象用數(shù)據(jù)值來(lái)描述它的狀態(tài)。對(duì)象還有操作,用于改變對(duì)象的狀態(tài),對(duì)象及其操作就是對(duì)象的行為。對(duì)象實(shí)現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對(duì)象的統(tǒng)一體中類。具有相

2、同或相似性質(zhì)的對(duì)象的抽象就是類。因此,對(duì)象的抽象是類,類的具體化就是對(duì)象,也可以說(shuō)類的實(shí)例是對(duì)象。類具有屬性,它是對(duì)象的狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來(lái)描述類的屬性。類具有操作,它是對(duì)象的行為的抽象,用操作名和實(shí)現(xiàn)該操作的方法來(lái)描述。類的結(jié)構(gòu)。在客觀世界中有若干類,這些類之間有一定的結(jié)構(gòu)關(guān)系。通常有兩種主要的結(jié)構(gòu)關(guān)系,即一般-具體結(jié)構(gòu)關(guān)系,整體-部分結(jié)構(gòu)關(guān)系。一般具體結(jié)構(gòu)稱為分類結(jié)構(gòu),也可以說(shuō)是“或”關(guān)系,或者是“isa”關(guān)系。整體一一部分結(jié)構(gòu)稱為組裝結(jié)構(gòu),它們之間的關(guān)系是一種“與”關(guān)系,或者是“hasa”關(guān)系。消息和方法。對(duì)象之間進(jìn)行通信的結(jié)構(gòu)叫做消息。在對(duì)象的操作中,當(dāng)一個(gè)消息發(fā)送給某個(gè)對(duì)象時(shí),消

3、息包含接收對(duì)象去執(zhí)行某種操作的信息。發(fā)送一條消息至少要包括說(shuō)明接受消息的對(duì)象名、發(fā)送給該對(duì)象的消息名(即對(duì)象名、方法名)。一般還要對(duì)參數(shù)加以說(shuō)明,參數(shù)可以是認(rèn)識(shí)該消息的對(duì)象所知道的變量名,或者是所有(1)對(duì)象唯一性。每個(gè)對(duì)象都有自身唯一的標(biāo)識(shí),通過(guò)這種標(biāo)識(shí),可找到相應(yīng)的對(duì)象。在對(duì)象的整個(gè)生命期中,它的標(biāo)識(shí)都不改變,不同的對(duì)象不能有相同的標(biāo)識(shí)。抽象性。分類性是指將具有一致的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對(duì)象抽象成類個(gè)類就是這樣一種抽象,它反映了與應(yīng)用有關(guān)的重要性質(zhì),而忽略其他一些無(wú)關(guān)內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應(yīng)用有關(guān)。繼承性。繼承性是子類自動(dòng)共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是

4、類之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言不同于其它語(yǔ)言的最重要的特點(diǎn),是其他語(yǔ)言所沒(méi)有的。在類層次中,子類只繼承一個(gè)父類的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為單重繼承。在類層次中,子類繼承了多個(gè)父類的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為多重繼承。在軟件開發(fā)中,類的繼承性使所建立的軟件具有開放性、可擴(kuò)充性,這是信息組織與分類的行之有效的方法,它簡(jiǎn)化了對(duì)象、類的創(chuàng)建工作量,增加了代碼的可重性。采用繼承性,提供了類的規(guī)范的等級(jí)結(jié)構(gòu)。通過(guò)類的繼承關(guān)系,使公共的特性能夠共享,提高了軟件的重用性。

5、(4)多態(tài)性(多形性)多態(tài)性是指相同的操作或函數(shù)、過(guò)程可作用于多種類型的對(duì)象上并獲得不同的結(jié)果。不同的對(duì)象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。多態(tài)性允許每個(gè)對(duì)象以適合自身的方式去響應(yīng)共同的消息。多態(tài)性增強(qiáng)了軟件的靈活性和重用性。面向過(guò)程程序設(shè)計(jì)面向過(guò)程就是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。例如五子棋,面向過(guò)程的設(shè)計(jì)思路就是首先分析問(wèn)題的步驟:1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟2,9、輸出最后結(jié)果。把上面每個(gè)步驟用分別的函數(shù)來(lái)實(shí)現(xiàn),問(wèn)題就解

6、決了。面向過(guò)程是在面向?qū)ο蟪霈F(xiàn)之前,以及之后,甚至至今都應(yīng)用于程序開發(fā)中的程序設(shè)計(jì)思想。面向過(guò)程就是分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。面向?qū)ο笫前褬?gòu)成問(wèn)題事務(wù)分解成各個(gè)對(duì)象,建立對(duì)象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問(wèn)題的步驟中的行為。如:一輛汽車用面向過(guò)程的思想去考慮它應(yīng)該是這樣的:如何啟動(dòng)汽車、如何起步、加速、剎車、熄火等一個(gè)個(gè)操作。而汽車在這里并不是我們所關(guān)心的。而面向?qū)ο髣t以汽車為對(duì)象,一切由汽車開始,以上的可用操作,即功能是汽車這個(gè)對(duì)象本身所具有的,做任何操作只要告訴汽車就可以了。面向過(guò)程是把所有

7、的功能全部在一個(gè)大的類里定義出來(lái),當(dāng)系統(tǒng)龐大時(shí),功能多了,各種操作之間的調(diào)用關(guān)系也很復(fù)雜,當(dāng)需要修改一個(gè)功能時(shí)就可能引發(fā)一連串的改動(dòng),使修改和維護(hù)成本很昂貴。我們經(jīng)常所說(shuō)的“對(duì)象”,一般指的是解決信息領(lǐng)域內(nèi)所遇到問(wèn)題的方法。特別是應(yīng)用軟件技術(shù)來(lái)解決問(wèn)題的方法。如我們經(jīng)常碰到的面向?qū)ο蟮木幊?Object-OrientedProgramming)、面向?qū)ο蟮姆治?Object-OrientedAnalysis)、面向?qū)ο蟮脑O(shè)計(jì)(Object-OrientedDesign)等。應(yīng)用前面所介紹的關(guān)于對(duì)象的概念,可以對(duì)這些問(wèn)題做進(jìn)一步的分析。在面對(duì)較復(fù)雜的系統(tǒng),我們可以將它作為一個(gè)對(duì)象來(lái)進(jìn)行分析。一個(gè)

8、系統(tǒng)(解決某個(gè)問(wèn)題的全套解決方案)作為一個(gè)對(duì)象,可以由多個(gè)部分組成。同樣,這個(gè)對(duì)象也可以由多個(gè)對(duì)象組成。對(duì)于同類的事物,可以由一個(gè)對(duì)象來(lái)表示。這樣做的益處是顯而易見的,它靈活而高效,可以大大減輕設(shè)計(jì)人員的工作量,簡(jiǎn)化實(shí)際的模型。舉一個(gè)例子。在關(guān)系型數(shù)據(jù)庫(kù)的設(shè)計(jì)當(dāng)中,我們可以把一個(gè)元組當(dāng)作對(duì)象,給它定義一組操作方法。這些方法將適用于所有元組,從而我們不必在更大的范圍內(nèi)去細(xì)致的考慮不同的元組(如判斷一個(gè)元素是否合法):因?yàn)樗鼈冇幸唤M公共的面向本身的方法,它們“自己”可以“解決”自己的問(wèn)題。更上一層的對(duì)象可以是一個(gè)表、視圖等。表對(duì)象在元組對(duì)象的基礎(chǔ)上又有它們自己的方法,如增加、刪除等。從這個(gè)層面上講

9、,它也只需要做“自己”的事情,因?yàn)橛性M對(duì)象的支持,它無(wú)須去考慮像元素是否合法這類的事情。甚至,有時(shí)為了滿足我們還可以將元素或表群當(dāng)作時(shí)對(duì)象并定義它們自己的方法。這樣,更能顯示面向?qū)ο蟮膬?yōu)勢(shì)??梢悦黠@地看出,面向?qū)ο笫且怨δ軄?lái)劃分問(wèn)題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過(guò)程的設(shè)計(jì)中分散在了總多步驟中,很可能出現(xiàn)不同的繪制版本,因?yàn)橥ǔTO(shè)計(jì)人員會(huì)考慮到實(shí)際情況進(jìn)行各種各樣的簡(jiǎn)化。而面向?qū)ο蟮脑O(shè)計(jì)中,繪圖只可能在棋盤對(duì)象中出現(xiàn),從而保證了繪圖的統(tǒng)一。功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計(jì)的可擴(kuò)展性。比如我要加入悔棋的功能,如果要改動(dòng)面向過(guò)程的設(shè)計(jì),那么從輸入到判斷到顯示這一連串的步驟都要改動(dòng),甚

10、至步驟之間的循序都要進(jìn)行大規(guī)模調(diào)整。如果是面向?qū)ο蟮脑挘挥酶膭?dòng)棋盤對(duì)象就行了,棋盤系統(tǒng)保存了黑白雙方的棋譜,簡(jiǎn)單回溯就可以了,而顯示和規(guī)則判斷則不用顧及,同時(shí)整個(gè)對(duì)對(duì)象功能的調(diào)用順序都沒(méi)有變化,改動(dòng)只是局部的。再比如我要把這個(gè)五子棋游戲改為圍棋游戲,如果你是面向過(guò)程設(shè)計(jì),那么五子棋的規(guī)則就分布在了你的程序的每一個(gè)角落,要改動(dòng)還不如重寫。但是如果你當(dāng)初就是面向?qū)ο蟮脑O(shè)計(jì),那么你只用改動(dòng)規(guī)則對(duì)象就可以了,五子棋和圍棋的區(qū)別不就是規(guī)則嗎?(當(dāng)然棋盤大小好像也不一樣,但是你會(huì)覺(jué)得這是一個(gè)難題嗎?直接在棋盤對(duì)象中進(jìn)行一番小改動(dòng)就可以了。)而下棋的大致步驟從面向?qū)ο蟮慕嵌葋?lái)看沒(méi)有任何變化。當(dāng)然,要達(dá)到改

11、動(dòng)只是局部的需要設(shè)計(jì)的人有足夠的經(jīng)驗(yàn),使用對(duì)象不能保證你的程序就是面向?qū)ο螅鯇W(xué)者或者很蹩腳的程序員很可能以面向?qū)ο笾摱忻嫦蜻^(guò)程之實(shí),這樣設(shè)計(jì)出來(lái)的所謂面向?qū)ο蟮某绦蚝茈y有良好的可移植性和可擴(kuò)展性。面向?qū)ο蠛兔嫦蜻^(guò)程的區(qū)別,實(shí)在是難用一兩句話說(shuō)明白。面向過(guò)程是一種直接的編程方法,它是按照編程語(yǔ)言的思路考慮問(wèn)題。尤其是想C語(yǔ)言這種過(guò)程式語(yǔ)言,它就是通過(guò)順序執(zhí)行一組語(yǔ)句來(lái)實(shí)現(xiàn)一個(gè)功能,這些語(yǔ)句的執(zhí)行過(guò)程就是整個(gè)程序。不同的語(yǔ)言解決同一個(gè)問(wèn)題的過(guò)程是不一樣的。面向?qū)ο笫且环N抽象度更高的編程方法。它把眼光集中在了要解決問(wèn)題本身而不是語(yǔ)言上。它的目標(biāo)是使模塊的抽象度更高,可復(fù)用性更好。面向?qū)ο蟮哪康?/p>

12、就是可復(fù)用。舉個(gè)例子,比如我們要寫一個(gè)計(jì)算器程序。這個(gè)計(jì)算機(jī)目前只要求有加減乘除四種運(yùn)算。用面向過(guò)程的方法,我們可能直接就寫一個(gè)main函數(shù)。然后就開始定義一些數(shù)據(jù)結(jié)構(gòu),然后就開始寫add,sub,multi,div等函數(shù),去實(shí)現(xiàn)功能。用面向?qū)ο蟮姆椒ǎ覀儠?huì)先定義一個(gè)Calculator類。然后定義一些必要的數(shù)據(jù)成員,然后在定義add,sub,multi,div這四個(gè)成員函數(shù)(這四個(gè)函數(shù)的功能實(shí)現(xiàn)和上面四個(gè)應(yīng)該是基本一樣的)。從上面的實(shí)現(xiàn)來(lái)看,這兩種實(shí)現(xiàn)方法的差別不是很大,甚至第二種看上去還有些多此一舉。接下來(lái),我們要擴(kuò)展這個(gè)計(jì)算器,讓它能計(jì)算指數(shù)。用面向過(guò)程的方法,我們會(huì)將上面實(shí)現(xiàn)的代碼全

13、部copy過(guò)來(lái),然后再增加一個(gè)power函數(shù)。用面向?qū)ο蟮姆椒?,我們?huì)定義一個(gè)CalculatorEx類公有繼承自Calculator,再在CalculatorEx中實(shí)現(xiàn)Power函數(shù)。上面只是一個(gè)簡(jiǎn)單的擴(kuò)展,二者的區(qū)別就明顯起來(lái)。面向過(guò)程是純代碼級(jí)的復(fù)用。面向?qū)ο蟮膹?fù)用方式更為優(yōu)雅,它可以是代碼級(jí)的,也可以是類級(jí)的,也可以是接口級(jí)的,也可以是組件級(jí)的,甚至是服務(wù)級(jí)的。拋下這些復(fù)用概念不說(shuō)。我們假設(shè)第一次實(shí)現(xiàn)的并不是簡(jiǎn)單的四個(gè)功能,而是一個(gè)復(fù)雜的庫(kù),第二次增加的也不是一個(gè)功能而是一個(gè)擴(kuò)展庫(kù)。這時(shí)候面向?qū)ο蟮膬?yōu)勢(shì)就會(huì)比較明顯的體現(xiàn)出來(lái)。面向過(guò)程是松散部件,而面向?qū)ο笫且粋€(gè)體系。我說(shuō)的這些都是自己的理解,可能并不完全正確。對(duì)于面向?qū)ο笥幸粋€(gè)官方的定義,但是不同人有不同的理解。所以里面的很多東西都需要在學(xué)習(xí)的過(guò)程中去理解體會(huì)。但是,如果不動(dòng)手做點(diǎn)東西,對(duì)這些概念很難理解到位。還有就是,C,C+,Java這些都是語(yǔ)言,他們之間并沒(méi)有是不是面向?qū)ο蟮膮^(qū)別

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論