軟件工程第8章(2-04)_第1頁
軟件工程第8章(2-04)_第2頁
軟件工程第8章(2-04)_第3頁
軟件工程第8章(2-04)_第4頁
軟件工程第8章(2-04)_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

面向?qū)ο蟮拈_發(fā)方法面向?qū)ο蟮拈_發(fā)方法以20世紀60年代末的SIMULA語言的誕生為標志,包括面向?qū)ο蟮姆治觥⒚嫦驅(qū)ο蟮脑O(shè)計和面向?qū)ο蟮膶崿F(xiàn)。面向?qū)ο蟮拈_發(fā)方法是現(xiàn)代軟件開發(fā)過程中比較流行的新方法與技術(shù),它已發(fā)展成一套完整的方法論和系統(tǒng)化的技術(shù)體系,在實踐中有著非常廣泛的應用。本章概述了面向?qū)ο蠓椒ǖ亩x、特點和基本概念,以及面向?qū)ο蠓治龅哪繕?、任務、原則和過程,分類說明了面向?qū)ο蠼5膸追N模型和UML,重點介紹了面向?qū)ο笤O(shè)計的基本內(nèi)容。4.1面向?qū)ο蠓椒ǜ攀鰘面向?qū)ο笫且粋€全新的概念,面向?qū)ο蠓椒ㄒ焉钊氲杰浖I(lǐng)域的大多數(shù)分支,它將面向?qū)ο蠓治觥⒚嫦驅(qū)ο笤O(shè)計和面向?qū)ο蟪绦蛟O(shè)計集成在一起。這種方法改進了軟件生存期各階段之間的接口,強調(diào)軟件的重用,把開發(fā)可重用的軟件部件作為系統(tǒng)開發(fā)過程的一部分。作為一種開發(fā)模式,它同時也對軟件開發(fā)過程的所有階段進行綜合考慮。對于軟件生存期的各個階段來說,面向?qū)ο蠓椒ň哂懈叨鹊倪B續(xù)性,是現(xiàn)代軟件開發(fā)過程中廣泛采用的一種新的方法。1.面向?qū)ο蟾拍畹暮x什么是面向?qū)ο?Coad和Yourdon為此下了一個定義:面向?qū)ο蠹矗簩ο?類+繼承+通信。如果一個軟件系統(tǒng)是使用這樣4個概念設(shè)計和實現(xiàn)的,則認為這個軟件系統(tǒng)是面向?qū)ο蟮摹R粋€面向?qū)ο蟮某绦虻拿恳粋€組成部分都是對象,計算是通過建立新的對象和對象之間的通信來運行的。1.面向?qū)ο蟾拍畹暮x2.面向?qū)ο蠓ǖ奶攸c面向?qū)ο蠓ㄊ且环N全新概念的開發(fā)模式,具有如下特點:從問題域中客觀存在的事物出發(fā)來構(gòu)造軟件系統(tǒng),用對象作為對這些事物的抽象表示,并以此作為系統(tǒng)的基本構(gòu)成單位。事物的靜態(tài)特征用對象的屬性表示,事物的動態(tài)特征用對象的服務表示。對象的屬性與服務結(jié)合為一個獨立的實體,對外屏蔽其內(nèi)部細節(jié),稱為封裝。把具有相同屬性和相同服務的對象歸為一類,類是這些對象的抽象描述,每個對象是其類的一個實例。通過在不同程度上運用抽象的原則,可以得到較一般的類和較特殊的類。特殊類繼承一般類的屬性與服務,面向?qū)ο蠓椒ㄖС謱@種繼承關(guān)系的描述與實現(xiàn),從而簡化系統(tǒng)的構(gòu)造過程及其文檔。復雜的對象可以用簡單的對象作為其構(gòu)成部分,稱為聚合。對象之間通過消息進行通信,以實現(xiàn)對象之間的動態(tài)聯(lián)系。通過關(guān)聯(lián)表達對象之間的靜態(tài)關(guān)系。4.1.2

面向?qū)ο蟮幕靖拍?.對象對象是系統(tǒng)中用來描述客觀事物的一個實體,它是構(gòu)成系統(tǒng)的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務構(gòu)成。屬性和服務是構(gòu)成對象的兩個主要因素,屬性是用來描述對象靜態(tài)特征的一個數(shù)據(jù)項,服務是用來描述對象動態(tài)特征的一個操作序列。一個對象可以有多項屬性和多項服務。2.類類代表的是一種抽象,是代表對象的本質(zhì)的、主要的、可觀察的行為。類給出了屬于該類全部對象的抽象定義,而對象則是符合這種定義的一個實體。因此類能創(chuàng)造新的對象,并且每個對象都屬于一個類,通常我們把屬于某個類的一個對象稱為該類的實例。對象既具有共同性,也具有特殊性。運用抽象的原則舍棄對象的特殊性,抽取其共同性,則得到一個具有廣泛共性的類。如果在這個類的范圍內(nèi),考慮具有某些特殊性的一組事物,則這些事物也可以被抽象為另一個類。這個新類不僅具有前一個類的共性,同時它還具有自己特殊的屬性。通常,我們把前一個類稱為“基類”,把后來生成的那個類稱為“派生類”。4.1.2

面向?qū)ο蟮幕靖拍?.繼承一個類可以定義為另一個更一般的類的特殊情況,如“轎車”類是“汽車”類的特殊情況。稱一般類是特殊類的父類或超類,特殊類是一般類的子類,如“汽車”類是“轎車”類的父類,“轎車”類是“汽車”類的子類。同樣,“汽車”類還可以是“交通工具”類的子類,“交通工具”類是“汽車”類的父類。這樣可以形成類的一種一般/特殊的層次關(guān)系,如圖2-4-1所示。4.1.2

面向?qū)ο蟮幕靖拍?.1.2

面向?qū)ο蟮幕靖拍?.封裝封裝是面向?qū)ο蠓椒ǖ囊粋€重要原則,它主要包括兩層意思:一是指把對象的全部屬性和全部服務操作結(jié)合在一起,形成一個不可分割的整體;二是指對象只保留有限的對外接口使之與外界發(fā)生聯(lián)系,外界不能直接訪問和存取對象的屬性,只能通過允許的接口操作,這樣就盡可能地隱蔽了對象的內(nèi)部細節(jié),對外形成了一個保護的邊界。5.消息消息傳遞是對象間的通信手段,一個對象通過向另一個對象發(fā)送消息來請求其服務。一個消息通常包括接收對象名、調(diào)用的操作名和適當?shù)膮?shù)(如果有必要的話)。消息只告訴接收對象需要完成什么操作,但并不指示接收者怎樣完成操作。消息完全由接收者解釋,接收者獨立決定采用什么方法完成所需的操作。4.1.2

面向?qū)ο蟮幕靖拍?.結(jié)構(gòu)在任何一個較為復雜的問題域中,對象之間都不是相互孤立、互不相關(guān)的,而是具有一定的關(guān)系,并因此而構(gòu)成一個有機的整體,從而使對象之間的交互與合作構(gòu)成更高級的行為。對象之間聯(lián)系的結(jié)構(gòu)一般有如下幾種:(1)一般/特殊結(jié)構(gòu)又稱為分類結(jié)構(gòu),是由一組具有一般/特殊關(guān)系的類所組成的結(jié)構(gòu)。它是一個以類為結(jié)點、以繼承關(guān)系為邊的連通有向圖。(2)整體/部分結(jié)構(gòu)又稱為組裝結(jié)構(gòu),它描述對象之間的組成關(guān)系,即一個對象是另一個對象的組成或部分??陀^世界中存在著許多這樣的現(xiàn)象。一個整體/部分結(jié)構(gòu)由一組彼此之間存在著這種組成關(guān)系的對象構(gòu)成。(3)整體/部分結(jié)構(gòu)這種結(jié)構(gòu)有兩種實現(xiàn)方式。第一種方式是用部分對象的類作為一種廣義的數(shù)據(jù)類型來定義整體對象的一個屬性,構(gòu)成一個嵌套對象。第二種方式是獨立地定義和創(chuàng)建整體對象和部分對象,并在整體對象中設(shè)置一個屬性,它的值是部分對象的對象標識,或者是一個指向部分對象的指針。在這種方式下,一個部分對象可以屬于多個整體對象,并具有不同的生存期。后一種情況便于表示比較松散的整體/部分關(guān)系。消息是連接結(jié)構(gòu)與該結(jié)構(gòu)描述對象之間的動態(tài)聯(lián)系,即若一個對象在執(zhí)行自己的服務時,需要通過消息請求另一個對象為它完成某個服務,則說明第一個對象與第二個對象之間存在著消息連接。消息連接是有向的,從消息發(fā)出者指向消息接收者。4.1.2

面向?qū)ο蟮幕靖拍?.多態(tài)性對象的多態(tài)性是指在一般類中定義的屬性或服務被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為,這使得同一個屬性或服務名在一般類及其各個特殊類中可具有不同的語義。4.2面向?qū)ο蠓治龇治龅倪^程是提取系統(tǒng)需求的過程,主要包括理解、表達和驗證。面向?qū)ο蠓治鲋饕蓪ο竽P汀討B(tài)模型和功能模型所組成。由于問題復雜,而且交流帶有隨意性和非形式化的特點,理解過程通常不能一次就達到理想的效果。因此,還必須進一步驗證軟件需求規(guī)格說明的正確性、完整性和有效性,如果發(fā)現(xiàn)了問題則進行修正。顯然,需求分析過程是系統(tǒng)分析員與用戶及領(lǐng)域?qū)<曳磸徒涣骱投啻涡拚倪^程。也就是說,理解和驗證的過程通常交替進行,反復迭代,而且通常需要利用原型系統(tǒng)作為輔助工具。面向?qū)ο蠓治觯╫bject-orientedanalysis,OOA)的關(guān)鍵,是識別出問題域內(nèi)的對象,并分析它們相互間的關(guān)系,最終建立起問題域的簡潔、精確、可理解的正確模型。在用面向?qū)ο笥^點建立起的模型中,對象模型是最基本、最重要、最核心的模型。4.2.1

面向?qū)ο蠓治龅哪繕?、任務與原則1.面向?qū)ο蠓治龅哪繕伺c任務面向?qū)ο蠓治鍪擒浖_發(fā)過程中的問題定義階段,它的目標是完成對所需求解問題的分析,確定待建的系統(tǒng)所要做的工作,定義所有與待解決問題相關(guān)的類(包括類的屬性和操作、類與類之間的關(guān)系以及它們表現(xiàn)出的行為),并建立系統(tǒng)的模型。為達到這一目標,必須完成以下任務:與用戶進行充分溝通,了解用戶對軟件的需求。識別解決問題的對象集合及對象間的關(guān)系。定義類(包括定義其屬性和操作)并建立類間的層次關(guān)系2.面向?qū)ο蠓治龅幕驹瓌t為建立分析模型,要運用以下幾項基本原則:(1)構(gòu)造和分解相結(jié)合的原則構(gòu)造是指將基本對象組裝成復雜或活動對象的過程;分解是對大粒度對象進行細化,從而完成系統(tǒng)模型細化的過程。(2)抽象和具體相結(jié)合的原則抽象是指強調(diào)事物的本質(zhì)屬性而忽略非本質(zhì)細節(jié);具體則是對必要的細節(jié)進行刻畫的過程。在面向?qū)ο螅∣O)的方法中,抽象包括數(shù)據(jù)抽象和過程抽象,數(shù)據(jù)抽象把一組數(shù)據(jù)及有關(guān)的操作封裝起來,過程抽象則定義了對象間的相互作用。(3)封裝和繼承的原則封裝是指將描述對象的各種屬性和操作分離,形成獨立的完整的對象,盡量減少對象間的相互依賴,使得對象間的交互通過接口實現(xiàn),有助于提高程序的可重用性;繼承是提供一些相似的對象共享屬性和操作的特性,要方便繼承的實現(xiàn),則要求對構(gòu)造類的用途盡量單一,繼承的目的也是為了提高程序的可重用性。4.2.2

面向?qū)ο蠓治龅倪^程1.獲取客戶對系統(tǒng)的需求在解決問題之前,通常需要對問題做深入的了解,對問題的理解越全面、透徹,就越有助于問題的解決。需求獲取必須是在用戶與軟件設(shè)計者之間充分交流的基礎(chǔ)上進行的,從用戶使用的角度提出系統(tǒng)實現(xiàn)的功能要求,軟件設(shè)計者根據(jù)以往的開發(fā)經(jīng)驗,可給用戶提供一些建議,兩方面交換意見,形成基本的需求說明文檔。需求文檔中不涉及具體的設(shè)計決策,只是對用戶需求進行詳細說明,它是指導開發(fā)者進一步分析系統(tǒng)的基礎(chǔ)文檔,隨后進行的面向?qū)ο蠓治龅哪康?,就是深入理解問題域和用戶的真實需求,通過建立模型的方式精確體現(xiàn)。4.2.2

面向?qū)ο蠓治龅倪^程1.獲取客戶對系統(tǒng)的需求在解決問題之前,通常需要對問題做深入的了解,對問題的理解越全面、透徹,就越有助于問題的解決。需求獲取必須是在用戶與軟件設(shè)計者之間充分交流的基礎(chǔ)上進行的,從用戶使用的角度提出系統(tǒng)實現(xiàn)的功能要求,軟件設(shè)計者根據(jù)以往的開發(fā)經(jīng)驗,可給用戶提供一些建議,兩方面交換意見,形成基本的需求說明文檔。需求文檔中不涉及具體的設(shè)計決策,只是對用戶需求進行詳細說明,它是指導開發(fā)者進一步分析系統(tǒng)的基礎(chǔ)文檔,隨后進行的面向?qū)ο蠓治龅哪康模褪巧钊肜斫鈫栴}域和用戶的真實需求,通過建立模型的方式精確體現(xiàn)。4.2.2

面向?qū)ο蠓治龅倪^程2.確定類和對象面向?qū)ο蠓治鲋械囊粋€重要任務就是標識對象并從中抽象出類,一組具有相同屬性和操作的對象可以定義成一個類,因此標識類和標識對象是一致的4.2.2

面向?qū)ο蠓治龅倪^程(1)查找對象識別系統(tǒng)中的對象可以從問題陳述或用例描述著手,通常陳述中的名詞或名詞短語將可能是對象,它們通常以下面幾種形式表現(xiàn)出來:物理實體:指所有可感知的實體,如計算機、課本、樹木等。文件資料:可瀏覽閱讀的信息,如報告、信函、申請表等。事件:特定時間內(nèi)發(fā)生的事情,如開會、演出、借貸款等。角色:具有某種能力的對象,如工程師、銷售人員、醫(yī)生等。組織單位:如計算機系、證券公司、銀行等。交互:兩個對象之間的關(guān)系,如購買、學習、演講等。通過上述分析,可以得到一些候選的對象,但并非所有的候選對象都會對解決問題起作用。因此,還需要進行選擇并確定最終的對象。(2)篩選對象并確定關(guān)聯(lián)進一步確定對象的作用,將對象集合中冗余的對象、不具體的對象、與實際問題表述無關(guān)的對象,或可做為屬性或操作的一些內(nèi)容去除或重新確定,同時考慮對象之間的關(guān)聯(lián)(兩個或多個對象之間的相互關(guān)系及作用),可以更進一步確定對象及關(guān)聯(lián)對問題域的表述情況,使篩選出的對象集合能夠較好地實現(xiàn)交互,從而有利于進行設(shè)計和實現(xiàn)等工作。(3)標識屬性和定義操作屬性是對象的特性,標識屬性有助于對對象的深入理解,一般可以從問題陳述中提取出對象的屬性,屬性的選擇不是對象的所有特征,而是基于解決的具體問題,抽取問題中對象涉及的一些特征,操作定義了對象的行為并以某種方式修改對象的屬性值。操作可以通過對系統(tǒng)的過程敘述分析提取出來,通常一些動作詞語可作為候選的操作。每個操作能夠體現(xiàn)類的某種行為,操作根據(jù)具體情況可分為施加操作和承受操作兩種。(4)識別類之間關(guān)系確定了對象后,將一組具有相似特性的對象進行抽象,形成類,并確定描述對象的基本屬性和操作。同時,根據(jù)類之間的關(guān)系,通過繼承方式,共享一些信息,即可形成類的層次結(jié)構(gòu)。4.3面向?qū)ο蠼榱烁玫乩斫鈫栴},人們常常采用建立問題模型的方法。所謂模型,就是為了理解事物而對事物作出的一種抽象,是對事物的一種無歧義的書面描述。模型通常是由一組圖示符號和組織這些符號的規(guī)則組成,可以利用它們來定義和描述問題域中的術(shù)語和概念。更進一步講,模型是一種思考工具,利用這種工具可以把知識規(guī)范地表示出來。模型可以幫助我們思考問題,定義術(shù)語,在選擇術(shù)語時作出適當?shù)募僭O(shè),并且可以幫助用戶保持定義和假設(shè)的一致性。4.3面向?qū)ο蠼榱烁玫乩斫鈫栴},人們常常采用建立問題模型的方法。所謂模型,就是為了理解事物而對事物作出的一種抽象,是對事物的一種無歧義的書面描述。模型通常是由一組圖示符號和組織這些符號的規(guī)則組成,可以利用它們來定義和描述問題域中的術(shù)語和概念。更進一步講,模型是一種思考工具,利用這種工具可以把知識規(guī)范地表示出來。模型可以幫助我們思考問題,定義術(shù)語,在選擇術(shù)語時作出適當?shù)募僭O(shè),并且可以幫助用戶保持定義和假設(shè)的一致性。4.3面向?qū)ο蠼T趯δ繕讼到y(tǒng)進行分析的初始階段,面對大量模糊的、涉及眾多專業(yè)領(lǐng)域的、錯綜復雜的信息,系統(tǒng)分析員往往感到無從下手,而模型則對此提供了組織大量信息的一種有效機制。一旦建立起模型之后,這個模型就要通過用戶和各個領(lǐng)域?qū)<业膰栏駥彶?。由于模型的?guī)范化和系統(tǒng)化,因此比較容易地暴露出系統(tǒng)分析員對目標系統(tǒng)認識的片面性和不一致性。通過審查,往往會發(fā)現(xiàn)許多錯誤,這是正?,F(xiàn)象,這些錯誤在成為目標系統(tǒng)中錯誤之前,可被預先清除掉。4.3面向?qū)ο蠼S妹嫦驅(qū)ο蠓椒ㄩ_發(fā)軟件,通常需要建立三種形式的模型,它們分別是描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對象模型,描述系統(tǒng)控制結(jié)構(gòu)的動態(tài)模型和描述系統(tǒng)功能的功能模型。這三種模型都涉及數(shù)據(jù)、控制和操作等共同的概念,只不過每種模型描述的側(cè)重點不同。這三種模型從三個不同但又密切相關(guān)的角度模擬目標系統(tǒng),它們各自從不同側(cè)面反映了系統(tǒng)的實質(zhì)性內(nèi)容,綜合起來則全面地反映了對目標系統(tǒng)的需求1.對象模型對象模型是三個模型中最關(guān)鍵的模型,它的作用是描述系統(tǒng)的靜態(tài)結(jié)構(gòu),包括構(gòu)成系統(tǒng)的類和對象、它們的屬性和操作,以及它們之間的關(guān)系。對象模型表示靜態(tài)的、結(jié)構(gòu)化系統(tǒng)的“數(shù)據(jù)”性質(zhì)。它是對客觀世界實體模擬的對象,以及對象彼此間關(guān)系的映射,描述了系統(tǒng)的靜態(tài)結(jié)構(gòu)。對象模型為建立動態(tài)模型和功能模型提供了實質(zhì)性的框架。對象模型把面向?qū)ο蟮母拍钆c傳統(tǒng)方法中常用的信息建模概念結(jié)合起來,從而改進和拓展了普通的信息模型,增強了模型的可理解性和表達能力。對象模型是一個類、對象、類和對象之間關(guān)系的定義集。對象模型還必須表示類和對象之間的結(jié)構(gòu)關(guān)系。類和對象之間的關(guān)系一般可概括為關(guān)聯(lián)、歸納和組合三種形式。2.動態(tài)模型動態(tài)模型表示瞬時的、行為化的、系統(tǒng)的“控制”性質(zhì),它規(guī)定了對象模型中對象的合法變化序列。一旦建立起對象模型之后,就需要考察對象的動態(tài)行為。所有對象都具有自己的生命周期。對一個對象來說,生命周期是由許多階段組成的,在每個特定的階段中,都有適合該對象的一組運行規(guī)律和行為規(guī)則,用以規(guī)范該對象的行為。生命周期中的階段也就是對象的狀態(tài)。所謂狀態(tài),是對對象屬性值的一種抽象描述。當然,在定義狀態(tài)時應該忽略那些不影響對象行為的屬性。各對象之間相互觸發(fā)形成了一系列的狀態(tài)變化。我們把一個觸發(fā)行為稱為一個事件。對象對事件的響應,取決于接受該觸發(fā)對象當時所處的狀態(tài),響應包括改變自己的狀態(tài)或者又形成一個新的觸發(fā)行為。狀態(tài)有持續(xù)性,它占用一段時間間隔。狀態(tài)與事件密不可分,一個事件分開兩個狀態(tài),一個狀態(tài)隔開兩個事件。事件表示時刻,狀態(tài)代表時間間隔。通常,用UML提供的狀態(tài)圖來描繪對象的狀態(tài)、觸發(fā)狀態(tài)轉(zhuǎn)換的事件以及對象的行為。每個類的動態(tài)行為可用一張狀態(tài)圖描繪,各個類的狀態(tài)圖通過共享事件合并起來,從而構(gòu)成系統(tǒng)的動態(tài)模型。也就是說,動態(tài)模型是基于事件共享而互相關(guān)聯(lián)的一組狀態(tài)圖的集合。3.功能模型功能模型表示變化的系統(tǒng)的“功能”性質(zhì),它指明了系統(tǒng)應該“做什么”,因此更直接地反映了用戶對目標系統(tǒng)的需求。通常,功能模型由一組數(shù)據(jù)流圖組成。功能模型表明整個的數(shù)據(jù)流動情況,從外部輸入,通過操作和內(nèi)部存儲,直到外部輸出。功能模型還包括對象模型內(nèi)部數(shù)據(jù)間的限制。數(shù)據(jù)流圖不指出控制或?qū)ο蟮慕Y(jié)構(gòu)信息,它們包含在動態(tài)模型和對象模型中。數(shù)據(jù)流圖基本上就是傳統(tǒng)的數(shù)據(jù)流圖加上控制流。但應指出,雖然控制流有時是有用的,但它重復了動態(tài)模型中的相關(guān)部分,因而應盡量少用。功能模型中所有的數(shù)據(jù)流圖往往形成一個層次結(jié)構(gòu)。在這個層次結(jié)構(gòu)中,一個數(shù)據(jù)流圖中的過程可以由下一層的數(shù)據(jù)流圖做進一步的說明。一般來講,高層的過程相應地作用在組合對象上的操作,而低層的過程則代表作用于一個簡單對象上的操作。OMT方法(軟件開發(fā)方法)覆蓋了應用開發(fā)的全過程,包括分析、設(shè)計和實現(xiàn)。在分析階段,OMT方法強調(diào)對系統(tǒng)和相關(guān)領(lǐng)域的理解,通過分析,確立對象、關(guān)系、事件流和功能,并在此基礎(chǔ)上建立模型。它可以較全面地描述系統(tǒng)的靜態(tài)結(jié)構(gòu),因此OMT方法適合數(shù)據(jù)密集型數(shù)據(jù)開發(fā)。4.3.3

三種模型之間的關(guān)系從下面的敘述中,可以了解三種模型之間的關(guān)系。針對每個類建立的動態(tài)模型,描述了類實例的生命周期或運行周期。功能模型中的處理,可能產(chǎn)生動態(tài)模型中的事件。動態(tài)模型中的狀態(tài)轉(zhuǎn)換驅(qū)使行為發(fā)生。這些行為在數(shù)據(jù)流圖中被映射成處理,同時與對象模型中的服務相對應。功能模型中的處理,對應于對象模型中類/對象所提供的服務。通常,在頂層數(shù)據(jù)流圖中的處理,對應于復雜對象提供的服務;在低層數(shù)據(jù)流圖中的處理,對應于基本對象的服務。一個處理可能對應多個服務,或者是一個服務可能對應多個處理。數(shù)據(jù)流圖中的數(shù)據(jù)存儲,以及數(shù)據(jù)的源點/終點,通常是對象模型中的對象。數(shù)據(jù)流圖中的數(shù)據(jù)流,往往是對象模型中對象的屬性值,也可能是整個對象。功能模型中的處理(或用例)可能產(chǎn)生動態(tài)模型中的事件。對象模型描述了功能模型中的動作對象、數(shù)據(jù)存儲,以及數(shù)據(jù)流的結(jié)構(gòu)。4.3.4

統(tǒng)一建模語言UML統(tǒng)一建模語言UML是一種用于描述、可視化、構(gòu)造和文檔化軟件系統(tǒng)的語言,由RationalSoftware公司及其合作伙伴開發(fā)而成。許多公司正在把UML作為一種標準整合到其開發(fā)過程和產(chǎn)品當中,這包括商務建模、需求管理、分析、設(shè)計、編程、測試等。UML實現(xiàn)了基于面向?qū)ο蟮慕9ぞ叩慕y(tǒng)一,目前已成為國際、國內(nèi)可視化建模語言實際上的工業(yè)標準。4.3.4

統(tǒng)一建模語言UML1.UML的組成UML是一種基于面向?qū)ο蟮目梢暬UZ言。UML用豐富的圖形符號隱含表示了模型元素的語法,而用這些圖形符號組成元模型表達語義,組成模型描述系統(tǒng)結(jié)構(gòu)以及行為。(1)UML的模型元素UML定義了兩類模型元素的圖形表示。一類模型元素用于表示模型中的某個概念,如類、對象、用例、結(jié)點、構(gòu)件、包、接口等;另一類模型元素用于表示模型元素之間相互連接的關(guān)系,主要有關(guān)聯(lián)、泛化、依賴、聚集等。如圖2-4-3所示給出了部分UML定義的模型元素圖形表示。。4.3.4

統(tǒng)一建模語言UML(2)UML模型結(jié)構(gòu)根據(jù)UML語義,UML模型結(jié)構(gòu)可分為四個抽象層次,即元元模型、元模型、模型和用戶模型。其層次結(jié)構(gòu)如圖2-4-4所示,下一層是上一層的基礎(chǔ),上一層是下一層的實例。元元模型層定義了描述元模型的語言,它是任何模型的基礎(chǔ)。UML元元模型定義了元類、元屬性、元操作等一些概念。例如,圖2-4-5所示是一個“元類”的元元模型描述,其中,事物概念可代表任何定義的東西。元模型層定義了描述模型的語言,它組成UML模型的基本元素,包括面向?qū)ο蠛蜆?gòu)件的概念,如類、屬性、操作、構(gòu)件等。元模型是元元模型的一個實例。例如,圖2-4-6所示是一個元模型示例,其中,類、對象、關(guān)聯(lián)等都是元元模型中事物概念的實例。模型層定義了描述信息領(lǐng)域的語言,組成了UML模型。用戶模型層是模型的實例,用于表達一個模型的特定情況。2.UML模型UML主要是用來描述模型的。它可以從不同視角為系統(tǒng)建模,形成不同的視圖。每個視圖是系統(tǒng)完整描述中的一個抽象,代表該系統(tǒng)的一個特定方面;每個視圖又都由一組圖構(gòu)成,圖包含了強調(diào)系統(tǒng)某一方面的信息。2.UML模型(1)用例圖(2)類圖(3)對象圖(4)順序圖(5)協(xié)作圖(6)狀態(tài)圖(7)活動圖(8)構(gòu)件圖(9)配置圖2.UML模型3.UML的特點和應用綜上所述,UML包含了表達面向?qū)ο蟮挠美P?、?對象模型、動態(tài)模型等不同系統(tǒng)模型的圖形符號描述。它所提供的一批基本的、表示模型元素的圖形和方法,能簡潔明確地表達面向?qū)ο蠹夹g(shù)的主要概念和建立各類系統(tǒng)模型。它的標準化定義、可視化描述、可擴展性機制等,都顯示了UML強大的生命力。UML作為面向?qū)ο蠹夹g(shù)最重要的一種建模語言工具,特別能從不同的視角為系統(tǒng)建模。所以,UML適用于各種復雜類型的系統(tǒng),乃至系統(tǒng)各個層次的建模,而且適用于系統(tǒng)開發(fā)過程的不同階段。4.4面向?qū)ο笤O(shè)計面向?qū)ο笤O(shè)計(object-orienteddesign,OOD)是將面向?qū)ο蠓治鏊鶆?chuàng)建的分析模型轉(zhuǎn)化為設(shè)計模型。與傳統(tǒng)的軟件開發(fā)方法不同,面向?qū)ο笤O(shè)計和面向?qū)ο蠓治霾捎孟嗤姆柋硎荆嫦驅(qū)ο笤O(shè)計和面向?qū)ο蠓治鰶]有明顯的分界線,它們往往反復迭代地進行。在面向?qū)ο蠓治鰰r,主要考慮系統(tǒng)做什么,而不關(guān)心系統(tǒng)如何實現(xiàn)。在進行面向?qū)ο笤O(shè)計時,主要解決系統(tǒng)如何做,因此需要在面向?qū)ο蠓治龅哪P椭袨橄到y(tǒng)的實現(xiàn)補充一些新的類,或在原有類中補充一些屬性和操作。進行面向?qū)ο笤O(shè)計時應能從類中導出對象,以及這些對象應如何互相關(guān)聯(lián),此外它還要描述對象間的關(guān)系、行為以及對象間的通信如何實現(xiàn)。面向?qū)ο笤O(shè)計同樣應遵循抽象、信息隱蔽、功能獨立、模塊化等設(shè)計準則。4.4.1

從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計面向?qū)ο蠓治鍪轻槍栴}域和系統(tǒng)責任的,它不考慮與實現(xiàn)有關(guān)的因素。面向?qū)ο蠓治瞿P陀?個層次組成,即類、對象層、結(jié)構(gòu)層、主題層和服務層。對應著分析工作的5個活動,存在著面向?qū)ο蠓治龅母鲗幽P突摹皢栴}空間”。面向?qū)ο蠓治龅倪@5個層次就像摞在一起的透明塑料片一樣,最終呈現(xiàn)越來越多的細節(jié),層次是總體模型的一些水平薄片。在總體方法中,5個層次對應著在面向?qū)ο蠓治鲋薪榻B過的5個主要活動:發(fā)現(xiàn)類及對象、識別結(jié)構(gòu)、識別主題、定義屬性、定義服務4.4.2

面向?qū)ο笤O(shè)計的目標和準則1.面向?qū)ο笤O(shè)計的目標面向?qū)ο蟮脑O(shè)計是對問題域外部可見行為的規(guī)格說明增添實際的計算機系統(tǒng)實現(xiàn)所需的細節(jié),包括人機交互、任務管理和數(shù)據(jù)管理的細節(jié)。在面向?qū)ο蟮脑O(shè)計中,對象有更明確的定義。對象是問題域或者現(xiàn)實中一些東西的抽象,它反映系統(tǒng)為之保存信息和與其交互的能力,它是一些屬性及其專用服務的一個封裝體類,一個或多個對象的描述,或用一組屬性和服務的形式來描述。此外,還可以描述如何創(chuàng)造該類的對象。從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計是一個累進的模型擴充過程。這種擴充主要以增加屬性和服務開始,它有別于從數(shù)據(jù)流圖到結(jié)構(gòu)圖所發(fā)生的劇變。4.4.2

面向?qū)ο笤O(shè)計的目標和準則1.面向?qū)ο笤O(shè)計的目標面向?qū)ο笤O(shè)計的獨特性在于其基于重要的四個軟件設(shè)計概念——抽象、信息隱蔽、功能獨立性和模塊性建造系統(tǒng)的能力。所有的設(shè)計方法均力圖建造有這些基本特征的軟件,但是只有面向?qū)ο笤O(shè)計提供了使設(shè)計者能夠以較少的復雜性和折中達到這四個特征所有的機制才能實現(xiàn)。2.面向?qū)ο笤O(shè)計的準則(1)模塊化簡化程序設(shè)計的基本方法就是使復雜問題簡單化,即模塊分解法。面向?qū)ο蟮拈_發(fā)模式是以對象為中心,對象中包含了對具體事物的狀態(tài)特征和相應操作實現(xiàn)的描述,是一個實實在在且能夠動作的對象,也是一個功能獨立完整的模塊。類是對對象的更高層次的抽象,類也是具有封裝性和獨立性的模塊。(2)數(shù)據(jù)抽象和信息隱藏面向?qū)ο箝_發(fā)方法是追求對現(xiàn)實世界的直接模擬,針對要解決的問題中涉及的各種事物及關(guān)系,通過抽象方式在計算機中對其進行模擬。其中,類的類型是一種十分重要的抽象數(shù)據(jù)類型。在類中定義一類對象的屬性特征及相關(guān)操作,通過操作,對屬性進行訪問,并由操作對外界提供接口,與外界進行交互。這是一種規(guī)格化說明的抽象。在類中,對象的屬性特征,包括操作的實現(xiàn)細節(jié)都封裝在類的內(nèi)部(封裝即包裝,相當于一個黑盒子,對外界只體現(xiàn)功能),所有的信息對外界都是封閉的,實現(xiàn)了信息隱藏。2.面向?qū)ο笤O(shè)計的準則(3)弱耦合耦合是指軟件結(jié)構(gòu)中的不同模塊之間的依賴程度。如果各模塊之間存在較多的依賴關(guān)系,在對其中的部分模塊進行修改或測試時,由于可能涉及其他模塊,則可能會產(chǎn)生很大的困難。因此,在面向?qū)ο笙到y(tǒng)中,要求各模塊之間盡量是弱耦合關(guān)系,即對象具有較好的獨立特性,將各模塊之間的依賴程度減到最小。由于現(xiàn)實世界中各種事物之間存在或多或少的聯(lián)系,因此,抽象出的對象間也不可能是完全獨立的。當兩個對象間相互有聯(lián)系或需要聯(lián)系時,應該通過提供對外接口(或稱協(xié)議)的方式進行聯(lián)系。2.面向?qū)ο笤O(shè)計的準則(4)強內(nèi)聚內(nèi)聚是指各模塊之間的可結(jié)合性,當一個模塊與較多其他模塊發(fā)生關(guān)系,并可為其他模塊提供相應服務,簡化其他模塊的操作就是具有較好的內(nèi)聚性。強內(nèi)聚有助于提高系統(tǒng)的可重用性和可維護性。在面向?qū)ο笙到y(tǒng)中有三種內(nèi)聚。①服務內(nèi)聚。服務內(nèi)聚是指保證一個服務能夠完成且只能完成一項功能,功能越獨立,被重用的可能性越大,例如定義的point(屏幕上坐標位置)類,x和y分別作為屬性,操作分為getx()和gety(),分別對外界提供接口,返回x和y的當前值,如果將操作定義為setxy(),即同時返回x和y的當前值,會使有些只需要x或y的值的操作無法使用該類,使得類的應用服務有一定的局限性,因此反而是第一種方式更容易被更多的其他類使用。②類內(nèi)聚。設(shè)計類的基本原則是一個類應該只有一個用途,類中包含的屬性和操作也僅僅是圍繞該類的用途設(shè)定的,和服務同樣道理,類的用途越單一,重復使用就越方便。例如,實現(xiàn)屏幕上某點畫一個圖形,圖形中心位置輸入文字,首先考慮如何定義類,根據(jù)問題要求,可定義point(位置)類、shape(圖形)類、string(字符串)類。③一般—特殊內(nèi)聚。抽象類時,要遵循一定的層次關(guān)系,在一般特性相同時,考慮它們之間的特殊性是否相通,從而決定它們之間的層次結(jié)構(gòu)。例如,圓形和正方形,它們有相似特性,像圖形的中心位置,顯示圖形和求圖形面積等,但是它們也有不同的屬性,為了共享相似屬性和操作,可定義形狀基類,由它派生出圓形和多邊形類,然后由多邊形類再派生正方形類。派生類繼承基類的特性后,根據(jù)需要,增加新的特性,形成類的層次結(jié)構(gòu)。2.面向?qū)ο笤O(shè)計的準則(5)重用性軟件具有較好重用性必然可以提高可靠性、可維護性和可測試性等,因此重用性是提高軟件開發(fā)效率和提高產(chǎn)品質(zhì)量的重要特性。重用可通過以下兩方面實現(xiàn)。①繼承。一方面,盡量使用已有的類;另一方面,在創(chuàng)造新類時要符合類內(nèi)聚條件,盡量使類的功能獨立,以方便將來進行重用。②模板。還有部分面向?qū)ο蟪绦蛟O(shè)計語言提供參數(shù)多態(tài)性,像C++語言支持的“模板”機制,它將數(shù)據(jù)類型也參數(shù)化,在操作相同的前提下,根據(jù)實際情況將數(shù)據(jù)類型取不同值,實現(xiàn)不同數(shù)據(jù)類型的數(shù)據(jù)使用同一段代碼完成相同操作。模板可分為兩類——函數(shù)模板和類模板。③可擴充性。面向?qū)ο笠讛U充設(shè)計,繼承機制以兩種方式支持擴充設(shè)計。第一,繼承關(guān)系有助于重用已有定義,使開發(fā)新定義更加容易。隨著繼承結(jié)構(gòu)逐漸變深,新類定義繼承的規(guī)格說明和實現(xiàn)的量也就逐漸增大。這通常意味著,當繼承結(jié)構(gòu)增長時,開發(fā)一個新類的工作量反而逐漸減小。第二,在面向?qū)ο蟮恼Z言中,類型系統(tǒng)的多態(tài)性也支持可擴充的設(shè)計。④可集成性。面向?qū)ο蟮脑O(shè)計過程產(chǎn)生便于將單個構(gòu)件集成為完整的設(shè)計。4.4.3

面向?qū)ο笤O(shè)計的步驟和經(jīng)驗性規(guī)則1.面向?qū)ο笤O(shè)計的步驟面向?qū)ο蟮脑O(shè)計將面向?qū)ο蠓治龇椒ń⒌姆治瞿P娃D(zhuǎn)化為構(gòu)造軟件的設(shè)計模型。在進行對象分析和設(shè)計的時候,可以總結(jié)出如下的步驟:(1)識別對象識別對象首先需要對系統(tǒng)進行描述,然后對描述進行語法分析,找出名詞或者名詞短語,根據(jù)這些名詞或者名詞短語確定對象,對象可以是外部實體、物、發(fā)生或者事件、角色、組織單位、場所、結(jié)構(gòu)等。一般可以從以下6個特征來考察潛在的對象是否可以作為正式對象:包含的信息。該對象的信息對于系統(tǒng)運行是必不可少的情況,潛在對象才是有用的。需要的服務。對象必須具有一組能以某種方式改變其屬性值的操作。多重屬性。一個只有一個屬性的對象可能確實有用,也可將其表示成另外一個對象的屬性可能會更好。公共屬性??梢詾閷ο蠖x一組公共屬性,這些屬性適用于對象出現(xiàn)的所有場合。公共操作??梢詾閷ο蠖x一組公共操作,這些操作適用于對象出現(xiàn)的所有場合?;拘枨?。出現(xiàn)在問題空間里,生成或者消耗對系統(tǒng)操作很關(guān)鍵的信息的外部實體,幾乎總是被定義為對象。4.4.3

面向?qū)ο笤O(shè)計的步驟和經(jīng)驗性規(guī)則(2)確定屬性為了找出對象的一組有意義的屬性,可以再研究系統(tǒng)描述,選擇合理的與對象相關(guān)聯(lián)的信息。例如,對象“安全系統(tǒng)”,其中房主可以為系統(tǒng)設(shè)置參數(shù),如傳感器信息、報警響應信息、啟動/撤銷信息、標識信息等。這些數(shù)據(jù)項表示如下:傳感器信息:傳感器類型+傳感器編號+警報臨界值。報警響應信息:延遲時間+電話號碼+警報類型。啟動/撤銷信息:主口令+允許嘗試的次數(shù)+暫時口令。4.4.3

面向?qū)ο笤O(shè)計的步驟和經(jīng)驗性規(guī)則(3)定義操作一個操作以某種方式改變對象的一個或者多個屬性值,因此操作必須了解對象屬性的性質(zhì),操作能處理從屬性中抽取出來的數(shù)據(jù)結(jié)構(gòu)。為了提取對象中的一組操作,可以再研究系統(tǒng)的需求描述,選擇合理的屬于對象的操作。為此可以進行語法分析,隔離出動詞,某些動詞是合法的操作,很容易與某個特定的對象相聯(lián)系。由前面的系統(tǒng)描述,可以知道“傳感器被賦予一個編號和類型”或者“設(shè)置一個主口令使系統(tǒng)處于警報狀態(tài)或警報解除狀態(tài)”。說明如下:一個賦值操作與對象傳感器相關(guān)。對象系統(tǒng)可以加上操作設(shè)置。處于警報狀態(tài)和警報解除狀態(tài)是系統(tǒng)的操作。分析語法之后,通過考察對象之間的通信,可以獲得相關(guān)對象的更多認識,對象靠彼此之間發(fā)送消息進行通信。4.4.3

面向?qū)ο笤O(shè)計的步驟和經(jīng)驗性規(guī)則(4)消息設(shè)計建立一個系統(tǒng),僅僅定義對象是不夠的,在對象之間必須建立一種通信機制,即消息。要求一個對象執(zhí)行某個操作,就要向它發(fā)送—個消息,告訴對象做什么。收到者響應消息的順序:首先選擇符合消息名的操作并執(zhí)行,然后將控制返回給使用者。消息機制對一個面向?qū)ο笙到y(tǒng)的實現(xiàn)是很重要的。4.4.3

面向?qū)ο笤O(shè)計的步驟和經(jīng)驗性規(guī)則(5)完成對象定義前面從語法分析中選取操作,確定其他操作還要考慮對象的生存期以及對象之間傳遞的消息。對象必須被創(chuàng)建、修改、處理、以某種方式讀取或者刪除,所以能夠定義對象的生存期。考察對象在生存期內(nèi)的活動,可以定義一些操作,從對象之間的通信可以確定一些操作。2.面向?qū)ο笤O(shè)計的經(jīng)驗性規(guī)則(1)設(shè)計結(jié)果應該清晰易懂(2)一般—特殊結(jié)構(gòu)的深度應適當(3)設(shè)計簡單的類4.4.4

問題域子系統(tǒng)的設(shè)計面向?qū)ο蠓治黾杏趩栴}域、系統(tǒng)責任和需求,它是獨立于編程語言的。面向?qū)ο笤O(shè)計集中于用可得到的技術(shù)實現(xiàn)上述需求,在很大程度上仍然獨立于編程語言。面向?qū)ο笤O(shè)計是面向?qū)ο蠓治龅臄U充,主要是增加各種組成部分。面向?qū)ο笤O(shè)計的模型可劃分為5層、4個組成部分:人機交互部分、問題域、任務管理和數(shù)據(jù)管理。4.4.4

問題域子系統(tǒng)的設(shè)計問題域子系統(tǒng)也稱問題域部分。面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計是一個平滑的過渡,即沒有間斷,沒有明確的分界線。面向?qū)ο蠓治鼋⑾到y(tǒng)的問題域?qū)ο竽P?,而面向?qū)ο笤O(shè)計是建立求解域的對象模型。都是建模,但兩者的性質(zhì)卻不相同,分析建??梢耘c系統(tǒng)的具體實現(xiàn)無關(guān),設(shè)計建模則要考慮系統(tǒng)的具體實現(xiàn)環(huán)境的約束,如要考慮系統(tǒng)準備使用的編程語言,可用的軟構(gòu)件庫以及程序員的編程經(jīng)驗等約束問題。面向?qū)ο蠓椒ㄖ械囊粋€主要目標是保持問題域組織框架的完整性、穩(wěn)定性,這樣可提高分析、設(shè)計及實現(xiàn)的追蹤性。因為系統(tǒng)的總體框架都是建立在問題域基礎(chǔ)上的,所以在

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論