下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過程程序設(shè)計(jì)的區(qū)別想要知道面向?qū)ο蟪绦蛟O(shè)計(jì)與面向過程程序設(shè)計(jì)的區(qū)別,我們應(yīng)先了解什么事面向?qū)ο蟪绦蛟O(shè)計(jì),什么事面向過程程序設(shè)計(jì),這樣我們才能弄清他們之間的區(qū)別,下面我們就什么是面向?qū)ο蟪绦蛟O(shè)計(jì)和什么事面向過程程序設(shè)計(jì)展開論述。面向?qū)ο蟮幕靖拍睿簩ο?。對象是人們要進(jìn)行研究的任何事物,從最簡單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計(jì)劃或事件。對象的狀態(tài)和行為。對象具有狀態(tài),一個(gè)對象用數(shù)據(jù)值來描述它的狀態(tài)。對象還有操作,用于改變對象的狀態(tài),對象及其操作就是對象的行為。對象實(shí)現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中類。具有相
2、同或相似性質(zhì)的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實(shí)例是對象。類具有屬性,它是對象的狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來描述類的屬性。類具有操作,它是對象的行為的抽象,用操作名和實(shí)現(xiàn)該操作的方法來描述。類的結(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),也可以說是“或”關(guān)系,或者是“isa”關(guān)系。整體一一部分結(jié)構(gòu)稱為組裝結(jié)構(gòu),它們之間的關(guān)系是一種“與”關(guān)系,或者是“hasa”關(guān)系。消息和方法。對象之間進(jìn)行通信的結(jié)構(gòu)叫做消息。在對象的操作中,當(dāng)一個(gè)消息發(fā)送給某個(gè)對象時(shí),消
3、息包含接收對象去執(zhí)行某種操作的信息。發(fā)送一條消息至少要包括說明接受消息的對象名、發(fā)送給該對象的消息名(即對象名、方法名)。一般還要對參數(shù)加以說明,參數(shù)可以是認(rèn)識該消息的對象所知道的變量名,或者是所有(1)對象唯一性。每個(gè)對象都有自身唯一的標(biāo)識,通過這種標(biāo)識,可找到相應(yīng)的對象。在對象的整個(gè)生命期中,它的標(biāo)識都不改變,不同的對象不能有相同的標(biāo)識。抽象性。分類性是指將具有一致的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對象抽象成類個(gè)類就是這樣一種抽象,它反映了與應(yīng)用有關(guān)的重要性質(zhì),而忽略其他一些無關(guān)內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應(yīng)用有關(guān)。繼承性。繼承性是子類自動共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是
4、類之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)語言不同于其它語言的最重要的特點(diǎn),是其他語言所沒有的。在類層次中,子類只繼承一個(gè)父類的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為單重繼承。在類層次中,子類繼承了多個(gè)父類的數(shù)據(jù)結(jié)構(gòu)和方法,則稱為多重繼承。在軟件開發(fā)中,類的繼承性使所建立的軟件具有開放性、可擴(kuò)充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創(chuàng)建工作量,增加了代碼的可重性。采用繼承性,提供了類的規(guī)范的等級結(jié)構(gòu)。通過類的繼承關(guān)系,使公共的特性能夠共享,提高了軟件的重用性。
5、(4)多態(tài)性(多形性)多態(tài)性是指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。多態(tài)性允許每個(gè)對象以適合自身的方式去響應(yīng)共同的消息。多態(tài)性增強(qiáng)了軟件的靈活性和重用性。面向過程程序設(shè)計(jì)面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。例如五子棋,面向過程的設(shè)計(jì)思路就是首先分析問題的步驟:1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟2,9、輸出最后結(jié)果。把上面每個(gè)步驟用分別的函數(shù)來實(shí)現(xiàn),問題就解
6、決了。面向過程是在面向?qū)ο蟪霈F(xiàn)之前,以及之后,甚至至今都應(yīng)用于程序開發(fā)中的程序設(shè)計(jì)思想。面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),使用的時(shí)候一個(gè)一個(gè)依次調(diào)用就可以了。面向?qū)ο笫前褬?gòu)成問題事務(wù)分解成各個(gè)對象,建立對象的目的不是為了完成一個(gè)步驟,而是為了描敘某個(gè)事物在整個(gè)解決問題的步驟中的行為。如:一輛汽車用面向過程的思想去考慮它應(yīng)該是這樣的:如何啟動汽車、如何起步、加速、剎車、熄火等一個(gè)個(gè)操作。而汽車在這里并不是我們所關(guān)心的。而面向?qū)ο髣t以汽車為對象,一切由汽車開始,以上的可用操作,即功能是汽車這個(gè)對象本身所具有的,做任何操作只要告訴汽車就可以了。面向過程是把所有
7、的功能全部在一個(gè)大的類里定義出來,當(dāng)系統(tǒng)龐大時(shí),功能多了,各種操作之間的調(diào)用關(guān)系也很復(fù)雜,當(dāng)需要修改一個(gè)功能時(shí)就可能引發(fā)一連串的改動,使修改和維護(hù)成本很昂貴。我們經(jīng)常所說的“對象”,一般指的是解決信息領(lǐng)域內(nèi)所遇到問題的方法。特別是應(yīng)用軟件技術(shù)來解決問題的方法。如我們經(jīng)常碰到的面向?qū)ο蟮木幊?Object-OrientedProgramming)、面向?qū)ο蟮姆治?Object-OrientedAnalysis)、面向?qū)ο蟮脑O(shè)計(jì)(Object-OrientedDesign)等。應(yīng)用前面所介紹的關(guān)于對象的概念,可以對這些問題做進(jìn)一步的分析。在面對較復(fù)雜的系統(tǒng),我們可以將它作為一個(gè)對象來進(jìn)行分析。一個(gè)
8、系統(tǒng)(解決某個(gè)問題的全套解決方案)作為一個(gè)對象,可以由多個(gè)部分組成。同樣,這個(gè)對象也可以由多個(gè)對象組成。對于同類的事物,可以由一個(gè)對象來表示。這樣做的益處是顯而易見的,它靈活而高效,可以大大減輕設(shè)計(jì)人員的工作量,簡化實(shí)際的模型。舉一個(gè)例子。在關(guān)系型數(shù)據(jù)庫的設(shè)計(jì)當(dāng)中,我們可以把一個(gè)元組當(dāng)作對象,給它定義一組操作方法。這些方法將適用于所有元組,從而我們不必在更大的范圍內(nèi)去細(xì)致的考慮不同的元組(如判斷一個(gè)元素是否合法):因?yàn)樗鼈冇幸唤M公共的面向本身的方法,它們“自己”可以“解決”自己的問題。更上一層的對象可以是一個(gè)表、視圖等。表對象在元組對象的基礎(chǔ)上又有它們自己的方法,如增加、刪除等。從這個(gè)層面上講
9、,它也只需要做“自己”的事情,因?yàn)橛性M對象的支持,它無須去考慮像元素是否合法這類的事情。甚至,有時(shí)為了滿足我們還可以將元素或表群當(dāng)作時(shí)對象并定義它們自己的方法。這樣,更能顯示面向?qū)ο蟮膬?yōu)勢。可以明顯地看出,面向?qū)ο笫且怨δ軄韯澐謫栴},而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設(shè)計(jì)中分散在了總多步驟中,很可能出現(xiàn)不同的繪制版本,因?yàn)橥ǔTO(shè)計(jì)人員會考慮到實(shí)際情況進(jìn)行各種各樣的簡化。而面向?qū)ο蟮脑O(shè)計(jì)中,繪圖只可能在棋盤對象中出現(xiàn),從而保證了繪圖的統(tǒng)一。功能上的統(tǒng)一保證了面向?qū)ο笤O(shè)計(jì)的可擴(kuò)展性。比如我要加入悔棋的功能,如果要改動面向過程的設(shè)計(jì),那么從輸入到判斷到顯示這一連串的步驟都要改動,甚
10、至步驟之間的循序都要進(jìn)行大規(guī)模調(diào)整。如果是面向?qū)ο蟮脑?,只用改動棋盤對象就行了,棋盤系統(tǒng)保存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規(guī)則判斷則不用顧及,同時(shí)整個(gè)對對象功能的調(diào)用順序都沒有變化,改動只是局部的。再比如我要把這個(gè)五子棋游戲改為圍棋游戲,如果你是面向過程設(shè)計(jì),那么五子棋的規(guī)則就分布在了你的程序的每一個(gè)角落,要改動還不如重寫。但是如果你當(dāng)初就是面向?qū)ο蟮脑O(shè)計(jì),那么你只用改動規(guī)則對象就可以了,五子棋和圍棋的區(qū)別不就是規(guī)則嗎?(當(dāng)然棋盤大小好像也不一樣,但是你會覺得這是一個(gè)難題嗎?直接在棋盤對象中進(jìn)行一番小改動就可以了。)而下棋的大致步驟從面向?qū)ο蟮慕嵌葋砜礇]有任何變化。當(dāng)然,要達(dá)到改
11、動只是局部的需要設(shè)計(jì)的人有足夠的經(jīng)驗(yàn),使用對象不能保證你的程序就是面向?qū)ο螅鯇W(xué)者或者很蹩腳的程序員很可能以面向?qū)ο笾摱忻嫦蜻^程之實(shí),這樣設(shè)計(jì)出來的所謂面向?qū)ο蟮某绦蚝茈y有良好的可移植性和可擴(kuò)展性。面向?qū)ο蠛兔嫦蜻^程的區(qū)別,實(shí)在是難用一兩句話說明白。面向過程是一種直接的編程方法,它是按照編程語言的思路考慮問題。尤其是想C語言這種過程式語言,它就是通過順序執(zhí)行一組語句來實(shí)現(xiàn)一個(gè)功能,這些語句的執(zhí)行過程就是整個(gè)程序。不同的語言解決同一個(gè)問題的過程是不一樣的。面向?qū)ο笫且环N抽象度更高的編程方法。它把眼光集中在了要解決問題本身而不是語言上。它的目標(biāo)是使模塊的抽象度更高,可復(fù)用性更好。面向?qū)ο蟮哪康?/p>
12、就是可復(fù)用。舉個(gè)例子,比如我們要寫一個(gè)計(jì)算器程序。這個(gè)計(jì)算機(jī)目前只要求有加減乘除四種運(yùn)算。用面向過程的方法,我們可能直接就寫一個(gè)main函數(shù)。然后就開始定義一些數(shù)據(jù)結(jié)構(gòu),然后就開始寫add,sub,multi,div等函數(shù),去實(shí)現(xiàn)功能。用面向?qū)ο蟮姆椒ǎ覀儠榷x一個(gè)Calculator類。然后定義一些必要的數(shù)據(jù)成員,然后在定義add,sub,multi,div這四個(gè)成員函數(shù)(這四個(gè)函數(shù)的功能實(shí)現(xiàn)和上面四個(gè)應(yīng)該是基本一樣的)。從上面的實(shí)現(xiàn)來看,這兩種實(shí)現(xiàn)方法的差別不是很大,甚至第二種看上去還有些多此一舉。接下來,我們要擴(kuò)展這個(gè)計(jì)算器,讓它能計(jì)算指數(shù)。用面向過程的方法,我們會將上面實(shí)現(xiàn)的代碼全
13、部copy過來,然后再增加一個(gè)power函數(shù)。用面向?qū)ο蟮姆椒?,我們會定義一個(gè)CalculatorEx類公有繼承自Calculator,再在CalculatorEx中實(shí)現(xiàn)Power函數(shù)。上面只是一個(gè)簡單的擴(kuò)展,二者的區(qū)別就明顯起來。面向過程是純代碼級的復(fù)用。面向?qū)ο蟮膹?fù)用方式更為優(yōu)雅,它可以是代碼級的,也可以是類級的,也可以是接口級的,也可以是組件級的,甚至是服務(wù)級的。拋下這些復(fù)用概念不說。我們假設(shè)第一次實(shí)現(xiàn)的并不是簡單的四個(gè)功能,而是一個(gè)復(fù)雜的庫,第二次增加的也不是一個(gè)功能而是一個(gè)擴(kuò)展庫。這時(shí)候面向?qū)ο蟮膬?yōu)勢就會比較明顯的體現(xiàn)出來。面向過程是松散部件,而面向?qū)ο笫且粋€(gè)體系。我說的這些都是自己的理解,可能并不完全正確。對于面向?qū)ο笥幸粋€(gè)官方的定義,但是不同人有不同的理解。所以里面的很多東西都需要在學(xué)習(xí)的過程中去理解體會。但是,如果不動手做點(diǎn)東西,對這些概念很難理解到位。還有就是,C,C+,Java這些都是語言,他們之間并沒有是不是面向?qū)ο蟮膮^(qū)別
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022-2027年中國貝伐珠單抗行業(yè)市場全景評估及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 箱變基礎(chǔ)預(yù)制施工方案
- 保險(xiǎn)服務(wù)品牌轉(zhuǎn)讓居間服務(wù)
- 4S店裝修貸款協(xié)議
- 杭州市乒乓球館租賃合同
- 湖北醫(yī)藥學(xué)院藥護(hù)學(xué)院《新媒體運(yùn)營與管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度鐵路軌道施工安全監(jiān)管合同范本2篇
- 2025年度食品加工合同:原材料供應(yīng)商與食品加工廠(2025版)3篇
- 2025年度融資租賃合同的租金支付方式3篇
- 2025年度運(yùn)動服飾品牌授權(quán)與銷售合同3篇
- 【大學(xué)課件】微型計(jì)算機(jī)系統(tǒng)
- (主城一診)重慶市2025年高2025屆高三學(xué)業(yè)質(zhì)量調(diào)研抽測 (第一次)英語試卷(含答案)
- 2025關(guān)于標(biāo)準(zhǔn)房屋裝修合同的范本
- 中國建材集團(tuán)有限公司招聘筆試沖刺題2025
- 2024年馬克思主義基本原理知識競賽試題70題(附答案)
- 2024年湖北省中考物理真題含解析
- 荔枝病蟲害防治技術(shù)規(guī)程
- 資金借貸還款協(xié)議
- 《實(shí)驗(yàn)性研究》課件
- 中國革命戰(zhàn)爭的戰(zhàn)略問題(全文)
- 《阻燃材料與技術(shù)》課件全套 顏龍 第1講 緒論 -第11講 阻燃性能測試方法及分析技術(shù)
評論
0/150
提交評論