




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、02.理解結(jié)構(gòu)化程序設(shè)計講師:李剛本章要點結(jié)構(gòu)化程序的三個結(jié)構(gòu)面向?qū)ο蟮奶卣鱑ML語言Java的面向?qū)ο筇卣鹘Y(jié)構(gòu)化程序設(shè)計簡介結(jié)構(gòu)化程序設(shè)計方法主張按功能來分析系統(tǒng)需求,其主要原則可概括為自頂向下,逐步求精,模塊化等。結(jié)構(gòu)化程序設(shè)計首先采用結(jié)構(gòu)化分析(Structrued Analysis,即SA)方法對系統(tǒng)進行需求分析,然后使用結(jié)構(gòu)化設(shè)計(Structrued Design,即SD)方法對系統(tǒng)進行概要設(shè)計、詳細設(shè)計,最后采用結(jié)構(gòu)化編程(Structrued Program,即SP)方式來實現(xiàn)系統(tǒng)。使用這種SA、SD和SP的方式可以較好的保證軟件系統(tǒng)的開發(fā)進度和質(zhì)量。因為結(jié)構(gòu)化程序設(shè)計方法主張
2、按功能把軟件系統(tǒng)逐步細分,因此這種方法也被成為面向功能的程序設(shè)計方法;結(jié)構(gòu)化程序設(shè)計的每個功能都負責對數(shù)據(jù)進行一次處理,每個功能都接受一些數(shù)據(jù),處理完后輸出一些數(shù)據(jù),這種處理方式也被稱為面向數(shù)據(jù)流的處理方式。結(jié)構(gòu)化軟件的邏輯結(jié)構(gòu)示意圖。結(jié)構(gòu)化程序設(shè)計的局限性設(shè)計不夠直觀,與人類習慣思維不一致。采用結(jié)構(gòu)化程序分析、設(shè)計時,開發(fā)者需要將客觀世界模型分解成一個一個功能,每個功能用以完成一定的數(shù)據(jù)處理。適應(yīng)性差,可擴展性不強。由于結(jié)構(gòu)化設(shè)計采用自頂而下的設(shè)計方式,所以當用戶的需求發(fā)生改變,或需要修改現(xiàn)有的實現(xiàn)方式時都需要自頂而下地修改模塊結(jié)構(gòu),這種方式的維護成本相當大。程序的三種結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計非常
3、強調(diào)實現(xiàn)某個功能的算法,而算法的實現(xiàn)過程是由一系列操作組成的,這些操作之間的執(zhí)行次序就是程序的控制結(jié)構(gòu)。1996年,計算機科學(xué)家Bohm和Jacopini證明了這樣的事實:任何簡單或復(fù)雜的算法都可以由三種結(jié)構(gòu)組成順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)這這三種結(jié)構(gòu)就被稱為程序設(shè)計的三種基本結(jié)構(gòu),也是結(jié)構(gòu)化程序設(shè)計必須采用的結(jié)構(gòu) 順序結(jié)構(gòu)選擇結(jié)構(gòu)圖2.5 多選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)面向?qū)ο蟪绦蛟O(shè)計 面向?qū)ο笫且环N更優(yōu)秀的的程序設(shè)計方法,它的基本思想是使用類、對象、繼承、封裝,消息等基本概念來進行程序設(shè)計。它是從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構(gòu)造軟件系統(tǒng),并在系統(tǒng)構(gòu)造中盡可能運用人類的自然思維方式,強調(diào)直接以現(xiàn)
4、實世界中的事物(即對象)為中心來思考問題,認識問題,并根據(jù)這些事物的本質(zhì)特點,把它們抽象地表示為系統(tǒng)中的類,作為系統(tǒng)的基本構(gòu)成單元(而不是用一些與現(xiàn)實世界中的事物相關(guān)比較遠,并且沒有對應(yīng)關(guān)系的其它過程來構(gòu)造系統(tǒng)),這使得系統(tǒng)可以直接映射客觀世界,并保持客觀世界中事物及其相互關(guān)系的本來面貌。如果采用面向?qū)ο蠓绞介_發(fā)的軟件系統(tǒng),其最小的程序單元是類,這些類可以生成系統(tǒng)中的多個對象,而這些對象則直接映射成客觀世界的各種事物。面向?qū)ο蟮奶卣?面向?qū)ο蠓椒ň哂腥齻€基本特征:繼承(Inheritance)、封裝(Encapsulation)和多態(tài)(Polymorphism)。面向?qū)ο筮€支持如下幾個功能:對
5、象是面向?qū)ο蠓椒ㄖ凶罨镜母拍睿幕咎攸c有:標識惟一性、分類性、多態(tài)性、封裝性、模塊獨立性好。類是具有共同屬性、共同方法的對象的集合。類是對象的抽象;對象則是類的實例。而類是整個軟件系統(tǒng)最小的程序單元,類的封裝性將各種信息細節(jié)隱藏起來,并通過公用方法來暴露該類對外所提供的功能,從而提高了類的內(nèi)聚性,降低了對象之間的耦合性。對象間的這種相互合作需要一個機制協(xié)助進行,這樣的機制稱為“消息”。消息是一個實例與另一個實例之間傳遞的信息。在面向?qū)ο蠓椒ㄖ?,類之間共享屬性和操作的機制稱為繼承。已有的類可當作基類來引用,則新類相應(yīng)地可當作派生類來引用。繼承具有傳遞性。可分為單繼承(一個繼承只允許有一個直
6、接父類,即類等級為樹形結(jié)構(gòu))與多繼承(一個類允許有多個直接父類)。UML發(fā)展歷史用例圖 用例圖用于描述了系統(tǒng)提供的系列功能,而每個用例則代表系統(tǒng)的一個功能模塊。用例圖的主要目的是幫助開發(fā)團隊以一種可視化的方式理解系統(tǒng)的需求功能,用例圖對系統(tǒng)的實現(xiàn)不做任何說明,僅僅是系統(tǒng)功能的描述。用例圖主要在需求分析階段使用,用于與客戶交流,保證系統(tǒng)需求的無二性,用例圖表示系統(tǒng)外觀,不要指望用例圖和系統(tǒng)內(nèi)部的各個類之間有任何聯(lián)系。不要把用例做得過多,過多的用例將導(dǎo)致難以閱讀,難以理解;盡可能多地使用文字說明。 類圖 類圖是最古老、功能最豐富,使用最廣泛的UML圖型,類圖表示系統(tǒng)中應(yīng)該包含哪些實體,各實體之間如
7、何關(guān)聯(lián);換句話說,它顯示了系統(tǒng)的靜態(tài)結(jié)構(gòu),類圖可用于表示邏輯類,邏輯類通常就是業(yè)務(wù)人員所談及的事物種類。類圖除了可以表示實體的靜態(tài)內(nèi)部結(jié)構(gòu)之外,還可以表示實體之間的相互關(guān)系,類之間有三種基本關(guān)系:關(guān)聯(lián)(包括聚合,組合)。泛化(與繼承同一個概念)。依賴。組件圖 對于現(xiàn)代的大型應(yīng)用程序而言,通常不只是單獨一個類或單獨一組類所能完成的,通常會由一個或多個可部署的組件組成。對Java程序而言,可復(fù)用的組件通常打包成一個JAR、WAR等文;對C/C+應(yīng)用而言,可復(fù)用的組件通常是一個函數(shù)庫,或者一個DLL(動態(tài)鏈接庫)文件。組件圖提供系統(tǒng)的物理視圖。它的用途是顯示系統(tǒng)中的軟件對其他軟件組件(例如,庫函數(shù))
8、的依賴關(guān)系。組件圖可以在一個非常高的層次上顯示,從而僅顯示粗粒度的組件,也可以在組件包層次上顯示。 部署圖 部署圖用于描述軟件系統(tǒng)如何部署到硬件環(huán)境中。它的用途是顯示軟件系統(tǒng)不同的組件將在何處物理地運行,以及它們將如何彼此通信。因為部署圖是對物理運行情況進行建模,所以系統(tǒng)的生產(chǎn)人員就可以很好地利用這種圖來安裝、部署軟件系統(tǒng)。 順序圖 順序圖顯示具體用例(或者是用例的一部分)的詳細流程,并且顯示了流程中不同對象之間的調(diào)用關(guān)系,同時還可以很詳細地顯示對不同對象的不同調(diào)用。順序圖描述了對象之間的交互(順序圖和通信圖都被稱為交互圖),重點在于描述消息及其時間順序。順序圖有兩個維度:垂直維度以發(fā)生的時間
9、順序顯示消息/調(diào)用的序列;水平維度顯示消息被發(fā)送到的各對象實例。順序圖的關(guān)鍵在于對象之間的消息,對象之間的的信息傳遞就是所謂的消息發(fā)送,消息通常表現(xiàn)為對象調(diào)用另一個對象的方法,或方法的返回值,發(fā)送者和接收者之間的箭頭表示消息。 繪制順序圖順序圖的繪制非常簡單。順序圖的頂部每個框表示每個類的實例(對象),在框中,類實例名稱和類名稱之間用冒號或空格來分隔,例如,myReportGenerator : ReportGenerator。如果某個類實例向另一個類實例發(fā)送一條消息,則繪制一條具有指向接收類實例的開箭頭的連線,并把消息/方法的名稱放在連線上面。對于某些特別重要的消息,我們還可以繪制一條帶箭頭
10、的、指向發(fā)起類實例的虛線,將返回值標注在虛線上,繪制帶返回值的信息可以使得序列圖更易于閱讀。圖2.17顯示了用戶登陸的的順序圖。演化圖 活動圖和狀態(tài)機圖都被稱為演化圖,其實區(qū)別和聯(lián)系如下:活動圖:用于描述用例內(nèi)部的活動或方法的流程,如果去除活動圖中的并行活動描述以后,它就變成流程圖。狀態(tài)機圖:描述某一對象生命周期中需要關(guān)注的不同狀態(tài),并會詳細描述刺激對象狀態(tài)改變的事件,以及對象狀態(tài)改變時所采取的動作。演化圖的五要素如下:狀態(tài):狀態(tài)是對象響應(yīng)事件前后的不同面貌,狀態(tài)是某個時間段對象所保持的穩(wěn)定態(tài),目前的軟件計算都是基于穩(wěn)定態(tài)的,對象的穩(wěn)定態(tài)是對象的固有特征,一個對象的狀態(tài)一般是有限的。有限狀態(tài)的
11、對象是容易計算的,對象的狀態(tài)越多,對象的狀態(tài)遷移越復(fù)雜,對象狀態(tài)可以想象成對象演化過程中的快照。事件:來自對象外界的刺激,通常的形式是消息的傳遞,只是相對對象而言發(fā)生了事件。事件是對象狀態(tài)發(fā)生改變的原動力。動作:動作是對象針對所發(fā)生事件所作的處理,實際上通常表現(xiàn)為某個方法被執(zhí)行?;顒樱夯顒邮莿幼骷ぐl(fā)的后續(xù)系統(tǒng)行為。條件:條件指事件發(fā)生所需要具備的條件。激發(fā)對象狀態(tài)的事件對于激發(fā)對象狀態(tài)改變的事件,通常有兩種類型:內(nèi)部事件:從系統(tǒng)內(nèi)部激發(fā)的事件,一個對象的方法(動作)調(diào)用,(通過事件激活)另一個對象方法(動作)。外部事件:從系統(tǒng)邊界外的激發(fā)的事件,例如用戶的鼠標、鍵盤動作?;顒訄D活動圖主要用于描
12、述過程原理、業(yè)務(wù)邏輯以及工作流的技術(shù),很多情況下,活動圖與傳統(tǒng)的流程圖非常相似,區(qū)別是活動圖支持并發(fā)?;顒訄D非常類似于傳統(tǒng)的流程圖,它也使用圓角矩形表示活動,使用帶箭頭的實線表示事件。 繪制活動圖時以活動為中心,整個活動圖只有一個開始活動,可以有多個結(jié)束活動,活動圖需要將并行活動和串行活動的分離,遇到分支和循環(huán)時最好像傳統(tǒng)流程圖將分支、循環(huán)條件明確表示?;顒訄D最大優(yōu)點在于支持并行行為,并行對于工作流建模和過程建模非常重要。因為有了并行,因此需要進行同步,同步通過匯合來指明。狀態(tài)機圖 狀態(tài)機圖表示某個類所處的不同狀態(tài)和該類的狀態(tài)轉(zhuǎn)換信息。實際上我們很少繪制狀態(tài)機圖,我們只對“感興趣的” 類繪制狀
13、態(tài)機圖。也就是說,在系統(tǒng)活動期間具有三個或更多潛在狀態(tài)的類才需要考慮使用狀態(tài)機圖進行描述。 狀態(tài)機圖的符號集包括5個基本元素:初始狀態(tài),它使用實心圓來繪制;狀態(tài)之間的轉(zhuǎn)換,它使用具有開箭頭的線段來繪制;狀態(tài),它使用圓角矩形來繪制;判斷點,它使用空心圓來繪制;一個或者多個終止點,它們使用內(nèi)部包含實心圓的圓來繪制。 繪制狀態(tài)機圖時應(yīng)該保證對象只有一個初始狀態(tài),可以有多個終結(jié)狀態(tài)。狀態(tài)要表示對象的關(guān)鍵快照,有重要的實際意義,無關(guān)緊要的狀態(tài)則無需考慮,繪制狀態(tài)機圖時事件和方法要明確。一切都是對象 在Java語言中,除了8個基本數(shù)據(jù)類型值之外,一切都是對象。而對象就是面向?qū)ο蟪绦蛟O(shè)計的中心。對象是人們要
14、進行研究的任何事物,從最簡單的整數(shù)到復(fù)雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計劃或事件。對象具有狀態(tài),一個對象用數(shù)據(jù)值來描述它的狀態(tài)。Java通過為對象定義Field(以前常被稱為屬性,現(xiàn)在也稱為字段)來描述對象的狀態(tài);對象還有操作,這些操作可以改變對象的狀態(tài),對象的操作也被稱為對象的行為,Java通過為對象定義方法來描述對象的行為。對象實現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中。類和對象 具有相同或相似性質(zhì)的 一組對象的抽象就是類,類是對一類事物描述,是抽象的、概念上的定義;對象是實際存在的該類事物的每個個體,因而也稱實例(instance)。對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。類是用來描述一系列對象,類概述每個對象應(yīng)包括的數(shù)據(jù),類概述每個對象的行為特征。因此我們可以把類理解成某種概念、定義,它規(guī)定了某類對象所共同具有的數(shù)據(jù)和行為特征。Java語言使用class關(guān)鍵字定義類,Java允許開發(fā)者自由定義類,定義類時可使用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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年自治區(qū)科技廳直屬事業(yè)單位引進考試真題
- 修繕采購協(xié)議合同范本
- 兼職輔導(dǎo)老師合同范例
- 新能源汽車動力蓄電池系統(tǒng)構(gòu)造與檢修 項目三-課后習題帶答案
- 勞務(wù)分包用工合同范本
- 公司銷售渠道合同范本
- 農(nóng)民玉米出售合同范本
- 2024年杭州銀行招聘考試真題
- 2024年江西省人才服務(wù)有限公司招聘筆試真題
- 企業(yè)雇傭貨車合同范本
- 穩(wěn)定性冠心病診斷與治療指南
- DL-T5704-2014火力發(fā)電廠熱力設(shè)備及管道保溫防腐施工質(zhì)量驗收規(guī)程
- (高清版)JGT 225-2020 預(yù)應(yīng)力混凝土用金屬波紋管
- JT-T-610-2004公路隧道火災(zāi)報警系統(tǒng)技術(shù)條件
- 初中英語比較級和最高級專項練習題含答案
- 鑒賞詩歌人物形象市公開課一等獎省賽課微課金獎?wù)n件
- 大壩安全監(jiān)測系統(tǒng)驗收規(guī)范
- 2024年南京鐵道職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案解析
- 校園超市經(jīng)營投標方案(技術(shù)方案)
- 康復(fù)醫(yī)院建筑設(shè)計標準
- 家具拆裝合同
評論
0/150
提交評論