第2章 面向?qū)ο蠓椒▽W(xué)概述_第1頁(yè)
第2章 面向?qū)ο蠓椒▽W(xué)概述_第2頁(yè)
第2章 面向?qū)ο蠓椒▽W(xué)概述_第3頁(yè)
第2章 面向?qū)ο蠓椒▽W(xué)概述_第4頁(yè)
第2章 面向?qū)ο蠓椒▽W(xué)概述_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第2章面向?qū)ο蠓椒癠ML概述,什么是軟件開(kāi)發(fā)軟件開(kāi)發(fā)的過(guò)程就是人們使用各種計(jì)算機(jī)語(yǔ)言將人們關(guān)心的現(xiàn)實(shí)世界映射到計(jì)算機(jī)世界的過(guò)程。包含兩項(xiàng)主要活動(dòng):人們對(duì)所要解決的問(wèn)題及其相關(guān)事物的認(rèn)識(shí)基于這種認(rèn)識(shí)所進(jìn)行的描述,客觀感知世界-計(jì)算機(jī)編程語(yǔ)言-計(jì)算機(jī)世界,軟件的實(shí)質(zhì)是人們以計(jì)算機(jī)編程語(yǔ)言為橋梁,將客觀感知世界映射于計(jì)算機(jī)世界中去,以解決人們?cè)诳陀^感知世界中要解決的問(wèn)題。,高級(jí)語(yǔ)言的發(fā)展歷史,真正得到推廣使用,至今仍在流行的第一個(gè)高級(jí)語(yǔ)言是美國(guó)的計(jì)算機(jī)科學(xué)家巴科斯設(shè)計(jì),并于1956年首先在IBM公司的計(jì)算機(jī)上實(shí)現(xiàn)的FORTRAN語(yǔ)言。,早期的高級(jí)語(yǔ)言主要是應(yīng)用于科學(xué)和工程計(jì)算,其代表作有FORTR

2、AN和ALGOL60。計(jì)算機(jī)進(jìn)入商業(yè)和行政管理領(lǐng)域以后,出現(xiàn)了COBOL和RPG等便于商界使用的語(yǔ)言。近年來(lái),這類語(yǔ)言和數(shù)據(jù)庫(kù)技術(shù),圖形界面技術(shù)(可視化編程),面向?qū)ο蟮乃枷爰癛AD(RapidApplicationDevolopment)的概念相結(jié)合,形成了一批更方便使用的所謂第四代語(yǔ)言(4GL),如Powerbuilder,Delphi,VB等。,自70年代以來(lái),模塊特征更明顯,簡(jiǎn)單易用,可靠性強(qiáng)的PASCAL異軍突起,在世界范圍內(nèi)廣泛流行。但進(jìn)入80年代以后,它的地位又逐漸為更實(shí)用的C語(yǔ)言替代。到現(xiàn)在,C語(yǔ)言的地位已相當(dāng)于一種“高級(jí)匯編語(yǔ)言”了。,80年代后期,面向?qū)ο蟮恼Z(yǔ)言開(kāi)始浮出水面

3、,C+借助使用C語(yǔ)言的龐大程序員隊(duì)伍,一舉建立了面向?qū)ο笳Z(yǔ)言的老大地位。從而OO的思想正式統(tǒng)治了整個(gè)軟件開(kāi)發(fā)界。C+的流行甚至使得美國(guó)軍方從80年開(kāi)始大力扶植的Ada語(yǔ)言還未及推廣便胎死腹中了。,90年代以后,計(jì)算機(jī)世界更是發(fā)生了天翻地覆的變化,原先的單機(jī)平臺(tái)讓位于WEB,“網(wǎng)絡(luò)就是計(jì)算機(jī)”,新的語(yǔ)言不僅要是OO的,Visual的,更要是基于WEB的。Java語(yǔ)言借INTERNET的東風(fēng),橫空出世,一夜紅遍天下,變化之快令人瞠目結(jié)舌。,上述這些變化,表面是不同的編程工具在城頭變幻大王旗,但其背后反映的卻是一種更為深刻的認(rèn)識(shí)論的改變,即你是用何種觀點(diǎn)來(lái)認(rèn)識(shí)這個(gè)世界的?,計(jì)算機(jī)語(yǔ)言,匯編語(yǔ)言,PO

4、語(yǔ)言,OO語(yǔ)言,語(yǔ)言的鴻溝,自然語(yǔ)言與編程語(yǔ)言之間存在著很大的差距,這種差距稱為“語(yǔ)言的鴻溝”。,OO方法學(xué)的基本思想從現(xiàn)實(shí)世界的客觀存在的事物(即對(duì)象)出發(fā),來(lái)構(gòu)造軟件系統(tǒng),并在系統(tǒng)的構(gòu)造中盡可能運(yùn)用人類的自然思維方式。(人類認(rèn)知過(guò)程的計(jì)算機(jī)模擬),2.1.2面向?qū)ο蠓椒?問(wèn)題的結(jié)構(gòu)空間和軟件的解空間是一致的。問(wèn)題的結(jié)構(gòu)空間:指問(wèn)題涉及的業(yè)務(wù)范圍。軟件的解空間:計(jì)算機(jī)解決問(wèn)題域問(wèn)題的解法。,OO方法學(xué)的主要優(yōu)點(diǎn),系統(tǒng)的穩(wěn)定性好傳統(tǒng)方法建立的軟件結(jié)構(gòu)依賴于要完成的功能,當(dāng)功能需求發(fā)生變化時(shí)將引起軟件結(jié)構(gòu)的整體修改。用戶需求基本是針對(duì)功能的,系統(tǒng)不穩(wěn)定。,Coad-Yourdon分析了當(dāng)需求發(fā)生

5、變化時(shí):功能:最易變外部接口:很易變屬性:較易變對(duì)象:較穩(wěn)定,例:商場(chǎng)管理系統(tǒng),當(dāng)增加投資要求系統(tǒng)功能更完善。功能(服務(wù)):現(xiàn)金收款現(xiàn)金、各種信用卡(最易變)外部接口:設(shè)備或銀行接口的變化(很易變)屬性:可能引起某些對(duì)象屬性的變化(較易變)對(duì)象:收銀臺(tái)、商品、庫(kù)房、會(huì)計(jì)室(基本穩(wěn)定,可能會(huì)增加新對(duì)象),可重用性好傳統(tǒng)的軟件重用技術(shù)是利用標(biāo)準(zhǔn)函數(shù)庫(kù)。標(biāo)準(zhǔn)函數(shù)庫(kù)往往只提供最基本、最常用的功能。還缺乏必要的柔性。對(duì)象固有的封裝性和信息隱蔽,使對(duì)象具有較強(qiáng)的獨(dú)立性。提供了較理想的可重用的軟件成分。重用時(shí)提供了很大的靈活性。(派生和繼承),可維護(hù)性好面向?qū)ο蟮能浖€(wěn)定性好面向?qū)ο蟮能浖菀桌斫饷嫦驅(qū)ο蟮?/p>

6、軟件容易修改易于測(cè)試和調(diào)試,Coad和Yourdon給出了一個(gè)定義:面向?qū)ο?對(duì)象+類+繼承+通信如果一個(gè)軟件系統(tǒng)是使用這樣4個(gè)概念設(shè)計(jì)和實(shí)現(xiàn)的,則我們認(rèn)為這個(gè)軟件系統(tǒng)是面向?qū)ο蟮?。一個(gè)面向?qū)ο蟮某绦虻拿恳怀煞輵?yīng)是對(duì)象,計(jì)算是通過(guò)新的對(duì)象的建立和對(duì)象之間的通信來(lái)執(zhí)行的。,2.2面向?qū)ο蟮母拍?對(duì)象是具有相同狀態(tài)的一組操作的集合。每個(gè)對(duì)象可用它本身的一組屬性和它可以執(zhí)行的一組操作來(lái)定義。屬性一般只能通過(guò)執(zhí)行對(duì)象的操作來(lái)改變。操作又稱為方法或服務(wù),它描述了對(duì)象執(zhí)行的功能,若通過(guò)消息傳遞,還可以為其它對(duì)象使用。,對(duì)象(object),對(duì)象的特點(diǎn),抽象,對(duì)象是描述客觀事物的本質(zhì)、與系統(tǒng)目標(biāo)有關(guān)的特征。

7、,九方皋相馬,不分牡、牝、驪、黃,心唯駿馬特征;宋庖丁解牛,只見(jiàn)筋,骨,皮,肉,目無(wú)全牛形象。,對(duì)象是屬性和服務(wù)的結(jié)合體,二者不可分,而且對(duì)象的屬性值只能由這個(gè)對(duì)象的服務(wù)來(lái)改變。,封裝,類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對(duì)象的集合。類的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。類定義可以視為一個(gè)具有類似特性與共同行為的對(duì)象的模板,可用來(lái)產(chǎn)生對(duì)象。,類(class),實(shí)例就是由某個(gè)類所描述的一個(gè)具體的對(duì)象。對(duì)象和實(shí)例的區(qū)別對(duì)象即可指一個(gè)具體的對(duì)象,也可以泛指一般的對(duì)象。實(shí)例必須是一個(gè)具體的對(duì)象。,實(shí)例(Instance),消息是一個(gè)對(duì)象與另一個(gè)對(duì)象的通信單元,是要求某個(gè)對(duì)象執(zhí)行類中定義的某

8、個(gè)操作的規(guī)格說(shuō)明。是一個(gè)對(duì)象向另一個(gè)對(duì)象發(fā)出的服務(wù)請(qǐng)求。,消息(Message),例如:顧客對(duì)售報(bào)亭說(shuō):“買一份北京晚報(bào)”。接受者:售報(bào)亭要求的服務(wù):報(bào)刊零售;輸入信息:買報(bào)種類,份數(shù),錢數(shù);輸出信息:買到的報(bào),找回的零錢;,封裝(Encapsulation),封裝性是將一些數(shù)據(jù)和與這些數(shù)據(jù)有關(guān)的操作集合起來(lái),放在一起,形成一個(gè)能動(dòng)的實(shí)體。把對(duì)象的全部屬性和全部服務(wù)結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位(對(duì)象)。信息隱蔽:盡可能地隱蔽對(duì)象的內(nèi)部細(xì)節(jié),只保留有限的外部接口。,繼承是子類自動(dòng)地共享基類中定義的數(shù)據(jù)和方法的機(jī)制。繼承具有傳遞性。,繼承(Inheritance),繼承的意義,簡(jiǎn)化了人們

9、對(duì)事物的認(rèn)識(shí)和描述。復(fù)用:繼承性是OO方法實(shí)現(xiàn)復(fù)用的前提,不僅支持復(fù)用而且使系統(tǒng)可擴(kuò)充。結(jié)構(gòu)清晰、易編程、易理解。易修改:共同部分只要在一處修改即可。易增加新類:只須描述不同部分。,繼承的分類,單繼承:子類只允許有一個(gè)父類的繼承多繼承:一個(gè)子類可以從多個(gè)父類中繼承其屬性和操作,多態(tài)性(Polymorphism),在一般類定義的屬性或服務(wù)被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)為不同的行為,使得同一個(gè)屬性或服務(wù)名在一般類及其各個(gè)特殊類中具有不同的意義。,intabs(inta)longabs(longa)floatabs(floata)doubleabs(doublea),intabs(i

10、ntn)longlabs(longn)doublefabs(doublex),面向?qū)ο蟮能浖_(kāi)發(fā)過(guò)程,統(tǒng)一過(guò)程模型RUP,面向?qū)ο蟮能浖_(kāi)發(fā)方法Rumbaugh方法通用電氣公司著名OO大師JamesRumbaugh博士和他的同事提出的對(duì)象模型化技術(shù)(OMT),用于分析、系統(tǒng)設(shè)計(jì)和對(duì)象級(jí)設(shè)計(jì)。建立三個(gè)模型對(duì)象模型(描述對(duì)象、類、層次和關(guān)系)動(dòng)態(tài)模型(描述對(duì)象和系統(tǒng)的行為)功能模型(類似于高層的DFD)適用于描述和分析以數(shù)據(jù)為中心的信息系統(tǒng)。,Coad和Yourdon方法Coad和Yourdon方法常常被認(rèn)為是最容易學(xué)習(xí)的OOA方法。建模符號(hào)相當(dāng)簡(jiǎn)單,而且開(kāi)發(fā)分析模型的導(dǎo)引直接明了。Booch方法

11、Rational公司OO大師GradyBooch設(shè)計(jì)比較適合于系統(tǒng)的設(shè)計(jì)與構(gòu)造。Jacobson方法瑞典愛(ài)立信公司的IvarJacobson博士最大的特點(diǎn)是面向用例,比較適合于需求分析。,UML的統(tǒng)一,活動(dòng)圖來(lái)自JamesOdell,狀態(tài)圖來(lái)自DavidHarel,接口來(lái)自Microsoft,包的符號(hào)來(lái)自AppleMacintosh,UML發(fā)展歷程,2.3統(tǒng)一建模語(yǔ)言簡(jiǎn)介,UML的特點(diǎn)統(tǒng)一標(biāo)準(zhǔn)面向?qū)ο罂梢暬?dú)立于過(guò)程UML是一種建模語(yǔ)言,不是一種方法,它獨(dú)立于過(guò)程。容易掌握使用,沙發(fā)之爭(zhēng)(過(guò)程與對(duì)象的對(duì)話),某天在某一家軟件公司里,那令人討厭的項(xiàng)目經(jīng)理要求兩名程序員完成同樣的一個(gè)任務(wù)。經(jīng)理并且

12、承諾誰(shuí)先完成任務(wù)的發(fā)給一張帶轉(zhuǎn)輪的真皮沙發(fā)代替原來(lái)的木質(zhì)靠背椅。杰:習(xí)慣過(guò)程式編程的程序員濤:一個(gè)面向?qū)ο蟮某绦騿T他們都知道這是一個(gè)不錯(cuò)的機(jī)會(huì)。任務(wù)是在GUI的程序界面里有一個(gè)正方形,一個(gè)圓形和一個(gè)正三角形。但用戶點(diǎn)擊這個(gè)圖形時(shí),圖形會(huì)順時(shí)針旋轉(zhuǎn)360并且播放相應(yīng)的AIF音效。,杰,坐在自己的辦公室里,對(duì)自己說(shuō):“這個(gè)程序要做什么?我們需要哪些過(guò)程?“旋轉(zhuǎn)并且播放音效。”他又回答了自己。所有他的程序就是去完成這兩個(gè)過(guò)程。,濤帶著他的筆記本坐在休息室里。他也在思索著:“程序中都有什么東西???誰(shuí)是主要的角色???他最先想到的就是形狀。當(dāng)然他也想到了其他的一些對(duì)象,比如用戶,音效和點(diǎn)擊事件。因?yàn)橐呀?jīng)有

13、現(xiàn)成的庫(kù)支持其他的對(duì)象了。因此因此他把重點(diǎn)放在創(chuàng)建形狀類上。,在杰的辦公室就像曾經(jīng)寫(xiě)過(guò)千百的的程序一樣,杰把他的程序認(rèn)為是重要的過(guò)程,并且沒(méi)有用什么時(shí)間就完成了旋轉(zhuǎn)和播放音效的過(guò)程。他的程序大概是這樣的rotate(shapeNum)/maketheshaperotate360playSound(shapeNum)/useshapeNumtolookupwhichAIFsoundtoplay,andplayit杰的程序基本是完成了,他覺(jué)得他贏了,他似乎已經(jīng)感覺(jué)到那張真皮沙發(fā)了,濤和他的筆記本在休息室,濤為每個(gè)形狀寫(xiě)了一個(gè)類classSquarerotate()/codetorotateasqu

14、areplaySound()/codetoplaytheAIFfileforasquareclassCirclerotate()/codetorotateacircleplaySound()/codetoplaytheAIFfileforacircle,classTrianglerotate()/codetorotateatriangleplaySound()/codetoplaytheAIFfileforatriangle,但是請(qǐng)等一下,任務(wù)有所變動(dòng)“現(xiàn)在你是快一點(diǎn),杰”,項(xiàng)目經(jīng)理說(shuō)著,“但我還要加一點(diǎn)小小的功能在程序里。這對(duì)你們這樣高水平的程序員來(lái)說(shuō),應(yīng)該是毫無(wú)問(wèn)題的。”“如果只是個(gè)小改動(dòng)

15、,我可以接受?!苯芟胫?,他知道經(jīng)理所說(shuō)的毫無(wú)代價(jià)的改動(dòng)是騙人的。“為什么濤會(huì)顯得如此的平靜呢?”杰不解得想著。杰一直執(zhí)著認(rèn)為面向?qū)ο笾皇莻€(gè)花架子,完全是浪費(fèi)時(shí)間。新增的任務(wù):在GUI界面里多了一個(gè)不規(guī)則圖形,當(dāng)用戶點(diǎn)擊這個(gè)圖形時(shí),圖形也會(huì)旋轉(zhuǎn)360,并且播放一個(gè).hif的音效。,杰回到辦公室旋轉(zhuǎn)的過(guò)程依然時(shí)可以用的,因?yàn)榇a使用的是shapeNum來(lái)對(duì)于相應(yīng)的圖形。然而播放音效的過(guò)程需要修改?!盀槭裁捶且シ?hif的音效呢?”,杰憤憤的說(shuō)著。playSound(shapeNum)/iftheshapeisnotanamoeba,/useshapeNumtolookupwithAIFsound

16、toplay,andplayit/else/playamoeba.hifsound這不是一個(gè)很大的改動(dòng),但是杰依然不得不重新修改他已經(jīng)調(diào)試成功過(guò)的代碼。,濤在他的筆記本前濤微笑著,呷了一口茶。隨手寫(xiě)了一個(gè)新的類。有時(shí)他覺(jué)得他最喜歡面向?qū)ο笾械倪@個(gè)優(yōu)點(diǎn),就是對(duì)已經(jīng)編譯調(diào)試過(guò)的代碼可以不要任何改動(dòng)。靈活和可擴(kuò)展性,濤沉醉在面向?qū)ο蟮膬?yōu)點(diǎn)中了。classAmoebarotate()/codetorotateanamoebaplaySound()/codetoplaythenew.hiffileforanamoba,杰這一次只比濤領(lǐng)先一步“面向?qū)ο蠖际窃诤?,浪費(fèi)時(shí)間!”杰正在暗笑著濤?!安灰?guī)則圖形不

17、是這樣旋轉(zhuǎn)的?!表?xiàng)目經(jīng)理失望的說(shuō)。原來(lái),杰和濤都是這樣寫(xiě)的:用一個(gè)矩形圍住不規(guī)則圖形,然后計(jì)算矩形的中心,最后讓圖形以中心旋轉(zhuǎn)。項(xiàng)目經(jīng)理接著說(shuō):“它應(yīng)該以一個(gè)給定的坐標(biāo)旋轉(zhuǎn)?!?杰的辦公室“我真像是一塊砧板上任人宰割的肉?!保芟胫暗铱梢栽偌由弦恍﹊felse語(yǔ)句就可以搞定了?!比欢熘澜?jīng)理會(huì)又有什么改動(dòng)呢?他思索著旋轉(zhuǎn)的過(guò)程。很多的代碼受到影響的。杰又要重新編譯調(diào)試。終于有了結(jié)果。rotate(shapeNum,xPt,yPt)/iftheshapeisnotanamoeba,/calculatethecenterpointbaseontherectangle,/therotate/e

18、lse/usethexPtandyPtastherotationpointoffset/antherotate,濤在他的筆記本前為了不把沙發(fā)拱手讓給杰,濤也在修改他的旋轉(zhuǎn)方法,但僅僅是在Amoeba的類里。對(duì)于其他的測(cè)試好的類,是原封不動(dòng)的。為了給不規(guī)則圖形一個(gè)旋轉(zhuǎn)點(diǎn),他給Amoeba加了兩個(gè)屬性,然后他測(cè)完成后通過(guò)無(wú)線網(wǎng)絡(luò)提交了任務(wù)。classAmoebaintxPoint;intyPoint;rotate()/codetorotateanamoebausingamoebasxandyplaySound()/codetoplaythenew.hiffileforanamoba,那濤得到了沙發(fā)對(duì)嗎?并沒(méi)有那么快,杰找到濤程序里的一個(gè)缺陷。下面是杰和濤的對(duì)話杰:你的代碼大量重復(fù),你的旋轉(zhuǎn)過(guò)程在四個(gè)圖形的東西里都有。濤:這是方法,不是過(guò)程。還有他們是類,不叫做東西。杰:不管叫什么,你的設(shè)計(jì)簡(jiǎn)直是垃圾。你要處理四個(gè)不同旋轉(zhuǎn)“方法”。你怎么處理???濤:我猜你是沒(méi)看見(jiàn)最后的設(shè)計(jì)。讓我告訴你繼承在面向?qū)ο笾袝?shū)如何工作的??催@四個(gè)類是有共同點(diǎn)的。它們都有rotate()和playSound(),于是我抽象出一個(gè)Shape類來(lái)abstractclassShape()rotate();playSound();然后我讓這四個(gè)

溫馨提示

  • 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)論