課件第02章.理解面向?qū)ο骭第1頁
課件第02章.理解面向?qū)ο骭第2頁
課件第02章.理解面向?qū)ο骭第3頁
課件第02章.理解面向?qū)ο骭第4頁
課件第02章.理解面向?qū)ο骭第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余20頁可下載查看

下載本文檔

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

文檔簡介

1、02.理解結(jié)構(gòu)化程序設(shè)計(jì)講師:李剛本章要點(diǎn)結(jié)構(gòu)化程序的三個(gè)結(jié)構(gòu)面向?qū)ο蟮奶卣鱑ML語言Java的面向?qū)ο筇卣鹘Y(jié)構(gòu)化程序設(shè)計(jì)簡介結(jié)構(gòu)化程序設(shè)計(jì)方法主張按功能來分析系統(tǒng)需求,其主要原則可概括為自頂向下,逐步求精,模塊化等。結(jié)構(gòu)化程序設(shè)計(jì)首先采用結(jié)構(gòu)化分析(Structrued Analysis,即SA)方法對系統(tǒng)進(jìn)行需求分析,然后使用結(jié)構(gòu)化設(shè)計(jì)(Structrued Design,即SD)方法對系統(tǒng)進(jìn)行概要設(shè)計(jì)、詳細(xì)設(shè)計(jì),最后采用結(jié)構(gòu)化編程(Structrued Program,即SP)方式來實(shí)現(xiàn)系統(tǒng)。使用這種SA、SD和SP的方式可以較好的保證軟件系統(tǒng)的開發(fā)進(jìn)度和質(zhì)量。因?yàn)榻Y(jié)構(gòu)化程序設(shè)計(jì)方法主張

2、按功能把軟件系統(tǒng)逐步細(xì)分,因此這種方法也被成為面向功能的程序設(shè)計(jì)方法;結(jié)構(gòu)化程序設(shè)計(jì)的每個(gè)功能都負(fù)責(zé)對數(shù)據(jù)進(jìn)行一次處理,每個(gè)功能都接受一些數(shù)據(jù),處理完后輸出一些數(shù)據(jù),這種處理方式也被稱為面向數(shù)據(jù)流的處理方式。結(jié)構(gòu)化軟件的邏輯結(jié)構(gòu)示意圖。結(jié)構(gòu)化程序設(shè)計(jì)的局限性設(shè)計(jì)不夠直觀,與人類習(xí)慣思維不一致。采用結(jié)構(gòu)化程序分析、設(shè)計(jì)時(shí),開發(fā)者需要將客觀世界模型分解成一個(gè)一個(gè)功能,每個(gè)功能用以完成一定的數(shù)據(jù)處理。適應(yīng)性差,可擴(kuò)展性不強(qiáng)。由于結(jié)構(gòu)化設(shè)計(jì)采用自頂而下的設(shè)計(jì)方式,所以當(dāng)用戶的需求發(fā)生改變,或需要修改現(xiàn)有的實(shí)現(xiàn)方式時(shí)都需要自頂而下地修改模塊結(jié)構(gòu),這種方式的維護(hù)成本相當(dāng)大。程序的三種結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計(jì)非常

3、強(qiáng)調(diào)實(shí)現(xiàn)某個(gè)功能的算法,而算法的實(shí)現(xiàn)過程是由一系列操作組成的,這些操作之間的執(zhí)行次序就是程序的控制結(jié)構(gòu)。1996年,計(jì)算機(jī)科學(xué)家Bohm和Jacopini證明了這樣的事實(shí):任何簡單或復(fù)雜的算法都可以由三種結(jié)構(gòu)組成順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)這這三種結(jié)構(gòu)就被稱為程序設(shè)計(jì)的三種基本結(jié)構(gòu),也是結(jié)構(gòu)化程序設(shè)計(jì)必須采用的結(jié)構(gòu) 順序結(jié)構(gòu)選擇結(jié)構(gòu)圖2.5 多選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)面向?qū)ο蟪绦蛟O(shè)計(jì) 面向?qū)ο笫且环N更優(yōu)秀的的程序設(shè)計(jì)方法,它的基本思想是使用類、對象、繼承、封裝,消息等基本概念來進(jìn)行程序設(shè)計(jì)。它是從現(xiàn)實(shí)世界中客觀存在的事物(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并在系統(tǒng)構(gòu)造中盡可能運(yùn)用人類的自然思維方式,強(qiáng)調(diào)直接以現(xiàn)

4、實(shí)世界中的事物(即對象)為中心來思考問題,認(rèn)識問題,并根據(jù)這些事物的本質(zhì)特點(diǎn),把它們抽象地表示為系統(tǒng)中的類,作為系統(tǒng)的基本構(gòu)成單元(而不是用一些與現(xiàn)實(shí)世界中的事物相關(guān)比較遠(yuǎn),并且沒有對應(yīng)關(guān)系的其它過程來構(gòu)造系統(tǒng)),這使得系統(tǒng)可以直接映射客觀世界,并保持客觀世界中事物及其相互關(guān)系的本來面貌。如果采用面向?qū)ο蠓绞介_發(fā)的軟件系統(tǒng),其最小的程序單元是類,這些類可以生成系統(tǒng)中的多個(gè)對象,而這些對象則直接映射成客觀世界的各種事物。面向?qū)ο蟮奶卣?面向?qū)ο蠓椒ň哂腥齻€(gè)基本特征:繼承(Inheritance)、封裝(Encapsulation)和多態(tài)(Polymorphism)。面向?qū)ο筮€支持如下幾個(gè)功能:對

5、象是面向?qū)ο蠓椒ㄖ凶罨镜母拍?,它的基本特點(diǎn)有:標(biāo)識惟一性、分類性、多態(tài)性、封裝性、模塊獨(dú)立性好。類是具有共同屬性、共同方法的對象的集合。類是對象的抽象;對象則是類的實(shí)例。而類是整個(gè)軟件系統(tǒng)最小的程序單元,類的封裝性將各種信息細(xì)節(jié)隱藏起來,并通過公用方法來暴露該類對外所提供的功能,從而提高了類的內(nèi)聚性,降低了對象之間的耦合性。對象間的這種相互合作需要一個(gè)機(jī)制協(xié)助進(jìn)行,這樣的機(jī)制稱為“消息”。消息是一個(gè)實(shí)例與另一個(gè)實(shí)例之間傳遞的信息。在面向?qū)ο蠓椒ㄖ?,類之間共享屬性和操作的機(jī)制稱為繼承。已有的類可當(dāng)作基類來引用,則新類相應(yīng)地可當(dāng)作派生類來引用。繼承具有傳遞性??煞譃閱卫^承(一個(gè)繼承只允許有一個(gè)直

6、接父類,即類等級為樹形結(jié)構(gòu))與多繼承(一個(gè)類允許有多個(gè)直接父類)。UML發(fā)展歷史用例圖 用例圖用于描述了系統(tǒng)提供的系列功能,而每個(gè)用例則代表系統(tǒng)的一個(gè)功能模塊。用例圖的主要目的是幫助開發(fā)團(tuán)隊(duì)以一種可視化的方式理解系統(tǒng)的需求功能,用例圖對系統(tǒng)的實(shí)現(xiàn)不做任何說明,僅僅是系統(tǒng)功能的描述。用例圖主要在需求分析階段使用,用于與客戶交流,保證系統(tǒng)需求的無二性,用例圖表示系統(tǒng)外觀,不要指望用例圖和系統(tǒng)內(nèi)部的各個(gè)類之間有任何聯(lián)系。不要把用例做得過多,過多的用例將導(dǎo)致難以閱讀,難以理解;盡可能多地使用文字說明。 類圖 類圖是最古老、功能最豐富,使用最廣泛的UML圖型,類圖表示系統(tǒng)中應(yīng)該包含哪些實(shí)體,各實(shí)體之間如

7、何關(guān)聯(lián);換句話說,它顯示了系統(tǒng)的靜態(tài)結(jié)構(gòu),類圖可用于表示邏輯類,邏輯類通常就是業(yè)務(wù)人員所談及的事物種類。類圖除了可以表示實(shí)體的靜態(tài)內(nèi)部結(jié)構(gòu)之外,還可以表示實(shí)體之間的相互關(guān)系,類之間有三種基本關(guān)系:關(guān)聯(lián)(包括聚合,組合)。泛化(與繼承同一個(gè)概念)。依賴。組件圖 對于現(xiàn)代的大型應(yīng)用程序而言,通常不只是單獨(dú)一個(gè)類或單獨(dú)一組類所能完成的,通常會由一個(gè)或多個(gè)可部署的組件組成。對Java程序而言,可復(fù)用的組件通常打包成一個(gè)JAR、WAR等文;對C/C+應(yīng)用而言,可復(fù)用的組件通常是一個(gè)函數(shù)庫,或者一個(gè)DLL(動態(tài)鏈接庫)文件。組件圖提供系統(tǒng)的物理視圖。它的用途是顯示系統(tǒng)中的軟件對其他軟件組件(例如,庫函數(shù))

8、的依賴關(guān)系。組件圖可以在一個(gè)非常高的層次上顯示,從而僅顯示粗粒度的組件,也可以在組件包層次上顯示。 部署圖 部署圖用于描述軟件系統(tǒng)如何部署到硬件環(huán)境中。它的用途是顯示軟件系統(tǒng)不同的組件將在何處物理地運(yùn)行,以及它們將如何彼此通信。因?yàn)椴渴饒D是對物理運(yùn)行情況進(jìn)行建模,所以系統(tǒng)的生產(chǎn)人員就可以很好地利用這種圖來安裝、部署軟件系統(tǒng)。 順序圖 順序圖顯示具體用例(或者是用例的一部分)的詳細(xì)流程,并且顯示了流程中不同對象之間的調(diào)用關(guān)系,同時(shí)還可以很詳細(xì)地顯示對不同對象的不同調(diào)用。順序圖描述了對象之間的交互(順序圖和通信圖都被稱為交互圖),重點(diǎn)在于描述消息及其時(shí)間順序。順序圖有兩個(gè)維度:垂直維度以發(fā)生的時(shí)間

9、順序顯示消息/調(diào)用的序列;水平維度顯示消息被發(fā)送到的各對象實(shí)例。順序圖的關(guān)鍵在于對象之間的消息,對象之間的的信息傳遞就是所謂的消息發(fā)送,消息通常表現(xiàn)為對象調(diào)用另一個(gè)對象的方法,或方法的返回值,發(fā)送者和接收者之間的箭頭表示消息。 繪制順序圖順序圖的繪制非常簡單。順序圖的頂部每個(gè)框表示每個(gè)類的實(shí)例(對象),在框中,類實(shí)例名稱和類名稱之間用冒號或空格來分隔,例如,myReportGenerator : ReportGenerator。如果某個(gè)類實(shí)例向另一個(gè)類實(shí)例發(fā)送一條消息,則繪制一條具有指向接收類實(shí)例的開箭頭的連線,并把消息/方法的名稱放在連線上面。對于某些特別重要的消息,我們還可以繪制一條帶箭頭

10、的、指向發(fā)起類實(shí)例的虛線,將返回值標(biāo)注在虛線上,繪制帶返回值的信息可以使得序列圖更易于閱讀。圖2.17顯示了用戶登陸的的順序圖。演化圖 活動圖和狀態(tài)機(jī)圖都被稱為演化圖,其實(shí)區(qū)別和聯(lián)系如下:活動圖:用于描述用例內(nèi)部的活動或方法的流程,如果去除活動圖中的并行活動描述以后,它就變成流程圖。狀態(tài)機(jī)圖:描述某一對象生命周期中需要關(guān)注的不同狀態(tài),并會詳細(xì)描述刺激對象狀態(tài)改變的事件,以及對象狀態(tài)改變時(shí)所采取的動作。演化圖的五要素如下:狀態(tài):狀態(tài)是對象響應(yīng)事件前后的不同面貌,狀態(tài)是某個(gè)時(shí)間段對象所保持的穩(wěn)定態(tài),目前的軟件計(jì)算都是基于穩(wěn)定態(tài)的,對象的穩(wěn)定態(tài)是對象的固有特征,一個(gè)對象的狀態(tài)一般是有限的。有限狀態(tài)的

11、對象是容易計(jì)算的,對象的狀態(tài)越多,對象的狀態(tài)遷移越復(fù)雜,對象狀態(tài)可以想象成對象演化過程中的快照。事件:來自對象外界的刺激,通常的形式是消息的傳遞,只是相對對象而言發(fā)生了事件。事件是對象狀態(tài)發(fā)生改變的原動力。動作:動作是對象針對所發(fā)生事件所作的處理,實(shí)際上通常表現(xiàn)為某個(gè)方法被執(zhí)行?;顒樱夯顒邮莿幼骷ぐl(fā)的后續(xù)系統(tǒng)行為。條件:條件指事件發(fā)生所需要具備的條件。激發(fā)對象狀態(tài)的事件對于激發(fā)對象狀態(tài)改變的事件,通常有兩種類型:內(nèi)部事件:從系統(tǒng)內(nèi)部激發(fā)的事件,一個(gè)對象的方法(動作)調(diào)用,(通過事件激活)另一個(gè)對象方法(動作)。外部事件:從系統(tǒng)邊界外的激發(fā)的事件,例如用戶的鼠標(biāo)、鍵盤動作。活動圖活動圖主要用于描

12、述過程原理、業(yè)務(wù)邏輯以及工作流的技術(shù),很多情況下,活動圖與傳統(tǒng)的流程圖非常相似,區(qū)別是活動圖支持并發(fā)?;顒訄D非常類似于傳統(tǒng)的流程圖,它也使用圓角矩形表示活動,使用帶箭頭的實(shí)線表示事件。 繪制活動圖時(shí)以活動為中心,整個(gè)活動圖只有一個(gè)開始活動,可以有多個(gè)結(jié)束活動,活動圖需要將并行活動和串行活動的分離,遇到分支和循環(huán)時(shí)最好像傳統(tǒng)流程圖將分支、循環(huán)條件明確表示?;顒訄D最大優(yōu)點(diǎn)在于支持并行行為,并行對于工作流建模和過程建模非常重要。因?yàn)橛辛瞬⑿校虼诵枰M(jìn)行同步,同步通過匯合來指明。狀態(tài)機(jī)圖 狀態(tài)機(jī)圖表示某個(gè)類所處的不同狀態(tài)和該類的狀態(tài)轉(zhuǎn)換信息。實(shí)際上我們很少繪制狀態(tài)機(jī)圖,我們只對“感興趣的” 類繪制狀

13、態(tài)機(jī)圖。也就是說,在系統(tǒng)活動期間具有三個(gè)或更多潛在狀態(tài)的類才需要考慮使用狀態(tài)機(jī)圖進(jìn)行描述。 狀態(tài)機(jī)圖的符號集包括5個(gè)基本元素:初始狀態(tài),它使用實(shí)心圓來繪制;狀態(tài)之間的轉(zhuǎn)換,它使用具有開箭頭的線段來繪制;狀態(tài),它使用圓角矩形來繪制;判斷點(diǎn),它使用空心圓來繪制;一個(gè)或者多個(gè)終止點(diǎn),它們使用內(nèi)部包含實(shí)心圓的圓來繪制。 繪制狀態(tài)機(jī)圖時(shí)應(yīng)該保證對象只有一個(gè)初始狀態(tài),可以有多個(gè)終結(jié)狀態(tài)。狀態(tài)要表示對象的關(guān)鍵快照,有重要的實(shí)際意義,無關(guān)緊要的狀態(tài)則無需考慮,繪制狀態(tài)機(jī)圖時(shí)事件和方法要明確。一切都是對象 在Java語言中,除了8個(gè)基本數(shù)據(jù)類型值之外,一切都是對象。而對象就是面向?qū)ο蟪绦蛟O(shè)計(jì)的中心。對象是人們要

14、進(jìn)行研究的任何事物,從最簡單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計(jì)劃或事件。對象具有狀態(tài),一個(gè)對象用數(shù)據(jù)值來描述它的狀態(tài)。Java通過為對象定義Field(以前常被稱為屬性,現(xiàn)在也稱為字段)來描述對象的狀態(tài);對象還有操作,這些操作可以改變對象的狀態(tài),對象的操作也被稱為對象的行為,Java通過為對象定義方法來描述對象的行為。對象實(shí)現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中。類和對象 具有相同或相似性質(zhì)的 一組對象的抽象就是類,類是對一類事物描述,是抽象的、概念上的定義;對象是實(shí)際存在的該類事物的每個(gè)個(gè)體,因而也稱實(shí)例(instance)。對象的抽象是類,類的具體化就是對象,也可以說類的實(shí)例是對象。類是用來描述一系列對象,類概述每個(gè)對象應(yīng)包括的數(shù)據(jù),類概述每個(gè)對象的行為特征。因此我們可以把類理解成某種概念、定義,它規(guī)定了某類對象所共同具有的數(shù)據(jù)和行為特征。Java語言使用class關(guān)鍵字定義類,Java允許開發(fā)者自由定義類,定義類時(shí)可使用Field來描述該

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論