軟件工程第6章-面向?qū)ο蠓椒▽W(xué)與UML_第1頁(yè)
軟件工程第6章-面向?qū)ο蠓椒▽W(xué)與UML_第2頁(yè)
軟件工程第6章-面向?qū)ο蠓椒▽W(xué)與UML_第3頁(yè)
軟件工程第6章-面向?qū)ο蠓椒▽W(xué)與UML_第4頁(yè)
軟件工程第6章-面向?qū)ο蠓椒▽W(xué)與UML_第5頁(yè)
已閱讀5頁(yè),還剩114頁(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)介

軟件工程6面向?qū)ο蠓椒▽W(xué)與UML本章概述

面向?qū)ο蠓椒ㄓ性S多優(yōu)點(diǎn),是目前廣泛使用的軟件開發(fā)方法之一。面向?qū)ο蠓椒ǖ囊厥菍?duì)象、類、繼承和用消息通信。軟件工程領(lǐng)域在1995~1997年期間取得的最重要的成果之一,是統(tǒng)一建模語(yǔ)言(UnifiedModelingLanguage,UML)。UML是一種直觀的、通用的、可視化建模語(yǔ)言。在用面向?qū)ο蠓椒ㄟM(jìn)行軟件分析和設(shè)計(jì)時(shí),必須按照其方法和原則,要懂得UML的概念、符號(hào)和使用規(guī)則,然后再學(xué)習(xí)如何靈活應(yīng)用UML進(jìn)行軟件的分析、設(shè)計(jì)。目前在設(shè)計(jì)移動(dòng)互聯(lián)系統(tǒng)時(shí),常采用面向?qū)ο蠓椒āT诮榻B用面向?qū)ο蟮姆椒ㄟM(jìn)行軟件分析和設(shè)計(jì)時(shí),本書采用統(tǒng)一建模語(yǔ)言(UML)來(lái)描述系統(tǒng)?!锉菊轮攸c(diǎn):面向?qū)ο蠓椒ǖ母拍?;UML圖。面向?qū)ο蠓椒▽W(xué)與UMLContents目錄面向?qū)ο蠓椒ǜ攀?1UML概述02UML圖03UML的應(yīng)用0401面向?qū)ο蠓椒ǜ攀雒嫦驅(qū)ο蠓椒ǖ囊睾蛢?yōu)點(diǎn)面向?qū)ο蠓椒ǖ母拍?.1面向?qū)ο蠓椒ǜ攀?/p>

傳統(tǒng)軟件工程方法(結(jié)構(gòu)化分析方法)是其他軟件技術(shù)的基礎(chǔ),曾經(jīng)是主要使用的系統(tǒng)分析設(shè)計(jì)方法。結(jié)構(gòu)化分析方法將結(jié)構(gòu)化分析和結(jié)構(gòu)化設(shè)計(jì)人為地分離成兩個(gè)獨(dú)立的部分。1結(jié)構(gòu)化分析方法將描述數(shù)據(jù)對(duì)象和描述作用于數(shù)據(jù)上的操作分別進(jìn)行,采用不同的表示方法。實(shí)際上數(shù)據(jù)和對(duì)數(shù)據(jù)的處理是密切相關(guān)、不可分割的,分別處理會(huì)增加軟件開發(fā)和維護(hù)的難度。2傳統(tǒng)軟件工程方法:6.1面向?qū)ο蠓椒ǜ攀雒嫦驅(qū)ο蠓椒ê?jiǎn)稱為OO(ObjectedOriented)方法,是1979年以后發(fā)展起來(lái)的,是當(dāng)前軟件方法學(xué)的主要方向,也是目前最有效、最實(shí)用和最流行的軟件開發(fā)方法之一。面向?qū)ο蠓椒ㄊ窃诩橙〗Y(jié)構(gòu)化思想和優(yōu)點(diǎn)的基礎(chǔ)上發(fā)展起來(lái)的,是對(duì)結(jié)構(gòu)化方法的進(jìn)一步發(fā)展和擴(kuò)充。ObjectedOriented6.1面向?qū)ο蠓椒ǜ攀雒嫦驅(qū)ο蠓椒ㄅc傳統(tǒng)方法的不同之處在于,其目的是有效地描述和刻畫問(wèn)題領(lǐng)域的信息和行為,以全局的觀點(diǎn)來(lái)考慮系統(tǒng)中各種對(duì)象的聯(lián)系,考慮系統(tǒng)的完整性和一致性,是對(duì)問(wèn)題域的完整、直接的映射。面向?qū)ο笤O(shè)計(jì)方法和傳統(tǒng)方法一樣,也分為面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)兩個(gè)步驟,但分析和設(shè)計(jì)時(shí)所用的概念和表示法是相同的,它把兩個(gè)步驟結(jié)合在一起,不強(qiáng)調(diào)分析與設(shè)計(jì)之間的嚴(yán)格區(qū)分,不同的階段可以交錯(cuò)、回溯;不過(guò),分析和設(shè)計(jì)仍然有不同的分工和側(cè)重點(diǎn)。ObjectedOriented6.1面向?qū)ο蠓椒ǜ攀雒嫦驅(qū)ο蠓治鲭A段01在面向?qū)ο蠓治觯∣bjectOrientedAnalysis,OOA)階段考慮問(wèn)題和系統(tǒng)責(zé)任,建立一個(gè)獨(dú)立于系統(tǒng)實(shí)現(xiàn)的OOA模型。在分析階段通常建立3種模型:對(duì)象模型、動(dòng)態(tài)模型和功能模型。首先定義對(duì)象及其屬性,建立對(duì)象模型。這里的對(duì)象和傳統(tǒng)方法中的數(shù)據(jù)對(duì)象(實(shí)體)不同,需要根據(jù)問(wèn)題域中的操作規(guī)則和內(nèi)在性質(zhì)定義對(duì)象的行為特征(服務(wù)),建立動(dòng)態(tài)模型,用動(dòng)態(tài)模型描述對(duì)象的生存周期。分析對(duì)象之間的關(guān)系采用封裝、繼承、消息通信等原則使問(wèn)題域的復(fù)雜性得到控制。最后根據(jù)對(duì)象及其生存周期定義處理過(guò)程,建立功能模型。6.1面向?qū)ο蠓椒ǜ攀雒嫦驅(qū)ο笤O(shè)計(jì)階段02在面向?qū)ο笤O(shè)計(jì)(ObjectOrientedDesign,OOD)階段考慮與實(shí)現(xiàn)有關(guān)的因素,對(duì)OOA模型進(jìn)行調(diào)整并補(bǔ)充與實(shí)現(xiàn)有關(guān)的部分,形成面向?qū)ο笤O(shè)計(jì)模型。面向?qū)ο蠓椒紤]問(wèn)題的基本原則是,盡可能模擬人類習(xí)慣的思維方式。面向?qū)ο笫姑枋鰡?wèn)題的問(wèn)題空間(也稱為問(wèn)題域)與實(shí)現(xiàn)解法的解空間(也稱為求解域)在概念和表示方法上盡可能一致。面向?qū)ο蠓椒ㄓ性S多優(yōu)點(diǎn),是目前廣泛使用的軟件開發(fā)方法之一。6.1面向?qū)ο蠓椒ǜ攀?.1.1面向?qū)ο蠓椒ǖ囊睾蛢?yōu)點(diǎn)面向?qū)ο蠓椒ㄕJ(rèn)為客觀世界是由各種對(duì)象組成的,任何事物都是對(duì)象,復(fù)雜對(duì)象由簡(jiǎn)單對(duì)象組成。把面向?qū)ο髮?shí)體抽象為問(wèn)題域中的對(duì)象,用對(duì)象分解取代了傳統(tǒng)的功能分解。1

把所有對(duì)象都劃分成各種對(duì)象類,每個(gè)對(duì)象類都定義了一組數(shù)據(jù)和一組方法。其中,數(shù)據(jù)用于表示對(duì)象的靜態(tài)屬性,是對(duì)象的狀態(tài)信息。方法是允許施加于該類對(duì)象上的操作,是該類所有對(duì)象共享的。2面向?qū)ο蠓椒ǖ乃囊?對(duì)象類6.1面向?qū)ο蠓椒ǜ攀?.1.1面向?qū)ο蠓椒ǖ囊睾蛢?yōu)點(diǎn)按照父類(或稱為基類)與子類(或稱為派生類)的關(guān)系,把若干對(duì)象類組成一個(gè)層次結(jié)構(gòu)的系統(tǒng)(也稱為類等級(jí))。在層次結(jié)構(gòu)中,下層的派生類具有和上層的基類相同的特性(包括數(shù)據(jù)和方法),稱為繼承。3

對(duì)象彼此之間僅能通過(guò)傳遞消息相互聯(lián)系。對(duì)象與傳統(tǒng)數(shù)據(jù)的本質(zhì)區(qū)別是,它不是被動(dòng)地等待外界對(duì)它施加操作,而是必須發(fā)消息請(qǐng)求執(zhí)行某個(gè)操作,處理它的數(shù)據(jù)。對(duì)象是處理的主體,外界不能直接對(duì)它的數(shù)據(jù)進(jìn)行操作。4繼承用消息通信

對(duì)象的信息都被封裝在該對(duì)象類的定義中,必須發(fā)消息請(qǐng)求執(zhí)行它的某個(gè)操作,處理它的數(shù)據(jù),不能從外界直接對(duì)它的數(shù)據(jù)進(jìn)行操作,這就是封裝性。面向?qū)ο蠓椒ǖ乃囊?6.1面向?qū)ο蠓椒ǜ攀?.1.1面向?qū)ο蠓椒ǖ囊睾蛢?yōu)點(diǎn)綜上所述,面向?qū)ο缶褪鞘褂脤?duì)象、類和繼承機(jī)制,并且對(duì)象之間僅能通過(guò)傳遞消息實(shí)現(xiàn)彼此通信??梢杂孟铝蟹匠虂?lái)概括:OO=Objects+Classes+I(xiàn)nheritance+CommunicationwithMessages(面向?qū)ο螅綄?duì)象+類+繼承+用消息通信)僅使用對(duì)象和消息的方法,稱為基于對(duì)象的方法(Object-based),不能稱為面向?qū)ο蠓椒?。使用?duì)象、消息和類的方法,稱為基于類的方法(Class-based),也不能稱為面向?qū)ο蠓椒?。只有同時(shí)使用對(duì)象、類、繼承和消息的方法,才是面向?qū)ο蟮姆椒ā?.1面向?qū)ο蠓椒ǜ攀?.1.1面向?qū)ο蠓椒ǖ囊睾蛢?yōu)點(diǎn)1與人類習(xí)慣的思維方法一致

傳統(tǒng)的程序設(shè)計(jì)技術(shù)是面向過(guò)程的設(shè)計(jì)方法,以算法為核心,把數(shù)據(jù)和過(guò)程作為相互獨(dú)立的部分,數(shù)據(jù)代表問(wèn)題空間中的客體,程序代碼用于處理數(shù)據(jù)。這樣,忽略了數(shù)據(jù)和操作之間的內(nèi)在聯(lián)系,問(wèn)題空間和解空間并不一致。面向?qū)ο蠹夹g(shù)以對(duì)象為核心,盡可能接近人類習(xí)慣的抽象思維方法,描述問(wèn)題空間和描述解空間盡可能一致。對(duì)象分類、從特殊到一般、建立類等級(jí)、獲得繼承等開發(fā)過(guò)程,符合人類認(rèn)識(shí)世界、解決問(wèn)題的過(guò)程。2穩(wěn)定性好

面向?qū)ο蠓椒ㄓ脤?duì)象模擬問(wèn)題域中的實(shí)體,以對(duì)象間的聯(lián)系刻畫實(shí)體間的聯(lián)系。當(dāng)系統(tǒng)的功能需求變化時(shí)不會(huì)引起軟件結(jié)構(gòu)的整體變化,只需進(jìn)行局部的修改。由于現(xiàn)實(shí)世界中的實(shí)體是相對(duì)穩(wěn)定的,因而,以對(duì)象為中心構(gòu)造的軟件系統(tǒng)也比較穩(wěn)定。面向?qū)ο蠓椒ǖ闹饕獌?yōu)點(diǎn):6.1面向?qū)ο蠓椒ǜ攀?.1.1面向?qū)ο蠓椒ǖ囊睾蛢?yōu)點(diǎn)4較易開發(fā)大型軟件產(chǎn)品

用面向?qū)ο蠹夹g(shù)開發(fā)大型軟件時(shí),把大型產(chǎn)品看做是一系列相互獨(dú)立的小產(chǎn)品,降低了開發(fā)的技術(shù)難度和開發(fā)工作管理的難度。5可維護(hù)性好

由于面向?qū)ο蟮能浖€(wěn)定性比較好、容易修改、容易理解、易于測(cè)試和調(diào)試,因而軟件的可維護(hù)性好。3可重用性好

面向?qū)ο蠹夹g(shù)可以重復(fù)使用一個(gè)對(duì)象類。例如,創(chuàng)建類的實(shí)例,直接使用類;派生一個(gè)滿足當(dāng)前需要的新類。子類可以重用其父類的數(shù)據(jù)結(jié)構(gòu)和程序代碼,并且可以方便地進(jìn)行修改和擴(kuò)充,子類的修改并不影響父類的使用。6.1面向?qū)ο蠓椒ǜ攀?.1.2面向?qū)ο蠓椒ǖ母拍铑惡蛯?shí)例消息繼承對(duì)象封裝多態(tài)重載6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍顚?duì)象的定義在應(yīng)用領(lǐng)域中,有意義的、與所要解決的問(wèn)題有關(guān)系的任何事物都可以作為對(duì)象,可以是具體的物理實(shí)體的抽象、人為的概念等。例如,一名學(xué)生、一個(gè)班級(jí)、借書、還書等。對(duì)象是封裝了數(shù)據(jù)結(jié)構(gòu)及可施加在這些數(shù)據(jù)結(jié)構(gòu)上的操作的封裝體,它有唯一的標(biāo)識(shí)符,向外界提供一組服務(wù)(操作)。01對(duì)象6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍顚傩裕ˋttribute)屬性是對(duì)象的數(shù)據(jù),它是對(duì)客觀世界實(shí)體所具有性質(zhì)的抽象。每個(gè)對(duì)象都有自己特有的屬性值。例如,在學(xué)生成績(jī)管理系統(tǒng)中,可以定義“學(xué)生”類,并定義姓名、性別、學(xué)號(hào)等相同的屬性。每位學(xué)生有自己特定的姓名、學(xué)號(hào)、性別、年齡等,這些就是學(xué)生類的屬性。02對(duì)象6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍罘椒ǎ∕ethod)方法是對(duì)象所能執(zhí)行的操作。方法描述了對(duì)象執(zhí)行操作的算法和響應(yīng)消息的方法,方法的實(shí)現(xiàn)要給出代碼。對(duì)象中的數(shù)據(jù)表示對(duì)象的狀態(tài),一個(gè)對(duì)象的狀態(tài)只能由該對(duì)象的操作來(lái)改變。每當(dāng)需要改變對(duì)象的狀態(tài)時(shí),只能由其他對(duì)象向該對(duì)象發(fā)送消息,對(duì)象響應(yīng)消息時(shí),按照消息模式找出與之匹配的方法,并執(zhí)行該方法來(lái)改變對(duì)象的狀態(tài)。例如,“學(xué)生”對(duì)象可以定義選課、補(bǔ)考、升級(jí)/留級(jí)等操作,每個(gè)對(duì)象實(shí)現(xiàn)具體的操作。有的學(xué)生成績(jī)不好,需要通過(guò)補(bǔ)考來(lái)決定升級(jí)或留級(jí),而成績(jī)合格的學(xué)生可直接升級(jí)。03對(duì)象6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍顚?duì)象的特點(diǎn)以數(shù)據(jù)為核心:對(duì)象的操作圍繞對(duì)其數(shù)據(jù)所需要做的處理來(lái)設(shè)置,操作的結(jié)果往往與當(dāng)時(shí)所處的狀態(tài)(數(shù)據(jù)的值)有關(guān)。主動(dòng)性:對(duì)象是進(jìn)行處理的主體,不是被動(dòng)地等待對(duì)它進(jìn)行處理,而是必須通過(guò)接口向?qū)ο蟀l(fā)送消息,請(qǐng)求它執(zhí)行某個(gè)操作,處理它的私有數(shù)據(jù)。實(shí)現(xiàn)了數(shù)據(jù)封裝:對(duì)象的數(shù)據(jù)是封裝起來(lái)的,是不可見(jiàn)的,對(duì)數(shù)據(jù)的訪問(wèn)和處理只能通過(guò)公有的操作進(jìn)行。本質(zhì)上具有并行性:不同對(duì)象各自獨(dú)立地處理自身的數(shù)據(jù),彼此通過(guò)發(fā)送消息傳遞信息完成通信。模塊獨(dú)立性好:要求模塊內(nèi)聚性強(qiáng),耦合性弱。04對(duì)象6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍铑愂菍?duì)具有相同數(shù)據(jù)和相同操作的一組相似對(duì)象的定義。在定義類的屬性和操作時(shí),一定要與所解決的問(wèn)題域有關(guān)。同類對(duì)象具有相同的屬性和方法,但是,每個(gè)對(duì)象的屬性值不同,執(zhí)行方法的結(jié)果也不同。類01類和實(shí)例6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍罾?,在學(xué)生成績(jī)管理系統(tǒng)中,可以定義“學(xué)生”類,該類可定義姓名、學(xué)號(hào)、性別、年齡等相同的屬性。類中的每位學(xué)生都有自己特定的姓名、學(xué)號(hào)、性別、年齡等,這些就是學(xué)生類的屬性。可以定義學(xué)生類的操作:“留級(jí)”/“升級(jí)”,如果某個(gè)學(xué)生對(duì)象的不及格課程門數(shù)達(dá)到規(guī)定的數(shù)量,就要“留級(jí)”,而成績(jī)合格的學(xué)生則“升級(jí)”。而在學(xué)校圖書館管理系統(tǒng)中,可以定義借書證號(hào)、姓名、性別等屬性,可以定義“借書”/“還書”等操作。但是“留級(jí)”/“升級(jí)”與圖書館管理沒(méi)有關(guān)系,就不必定義了。類01類和實(shí)例6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍顚?shí)例是由某個(gè)特定的類所描述的一個(gè)具體對(duì)象。例如,學(xué)生是一個(gè)類,某位學(xué)生“王偉”就是學(xué)生類的一個(gè)實(shí)例。一般地,實(shí)例的概念還有更廣泛的用法,其他建模元素也有實(shí)例。實(shí)例02類和實(shí)例6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍?/p>

消息就是向?qū)ο蟀l(fā)出的服務(wù)請(qǐng)求,是要求某個(gè)對(duì)象執(zhí)行它所屬的類中所定義的某個(gè)操作的規(guī)格說(shuō)明。一個(gè)消息通常由以下3部分組成:01

接收消息的對(duì)象(提供服務(wù)的對(duì)象的標(biāo)識(shí)符);03

輸入信息和回答信息。02

消息標(biāo)識(shí)符(也稱為消息名、服務(wù)標(biāo)識(shí));消息6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍罘庋b就是把對(duì)象的屬性和方法(服務(wù))結(jié)合成一個(gè)獨(dú)立的單位,盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié)。封裝實(shí)際上也就是信息隱藏,通過(guò)封裝把對(duì)象的實(shí)現(xiàn)細(xì)節(jié)對(duì)外界隱藏起來(lái)。對(duì)用戶來(lái)說(shuō),實(shí)現(xiàn)部分是不可見(jiàn)的,用戶可見(jiàn)的是接口(即協(xié)議)。封裝可以保護(hù)對(duì)象,防止用戶直接存取對(duì)象的內(nèi)部細(xì)節(jié),封裝也保護(hù)了客戶端,對(duì)象實(shí)現(xiàn)部分的改變不會(huì)影響客戶端。Encapsulation封裝6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍钐厥忸惖膶?duì)象擁有其一般類的全部屬性與服務(wù),稱為特殊類對(duì)一般類的繼承。繼承是子類自動(dòng)地?fù)碛懈割愔卸x的屬性和方法的機(jī)制。面向?qū)ο蠓椒ò杨惤M成一個(gè)層次結(jié)構(gòu)的系統(tǒng),稱為類等級(jí):子類/父類或派生類/基類或特殊類/一般類。繼承具有傳遞性,一個(gè)對(duì)象繼承了它所在的類等級(jí)中、它的上層類的全部屬性和方法,它的子類又繼承了它的屬性和方法。Inheritance繼承6.1面向?qū)ο蠓椒ǜ攀?.1.2面向?qū)ο蠓椒ǖ母拍罾^承有兩類:?jiǎn)卫^承和多重繼承。單繼承:一個(gè)類只允許有一個(gè)父類,即類等級(jí)為樹形結(jié)構(gòu)時(shí),類的繼承是單繼承。例如,學(xué)生類分為??粕⒈究粕?、研究生3個(gè)子類,就是單繼承。多重繼承:當(dāng)一個(gè)類有多個(gè)父類,即類等級(jí)為網(wǎng)狀結(jié)構(gòu)時(shí),類的繼承是多重繼承。例如,冷藏車?yán)^承了汽車類和冷藏設(shè)備類兩個(gè)類的屬性和服務(wù)。Inheritance消息6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍疃鄳B(tài)性是指允許屬于不同類的對(duì)象對(duì)同一消息做出響應(yīng)。例如,不同層次的類可以共享一個(gè)行為的名稱,在接收到發(fā)給它的消息時(shí),根據(jù)對(duì)象所屬的類動(dòng)態(tài)選用在該類中定義的實(shí)現(xiàn)算法,即該行為具有多態(tài)性。例如,多邊形的特殊類有正多邊形、軸向矩形。在多邊形繪圖時(shí),需要確定n個(gè)頂點(diǎn)的坐標(biāo);在正多邊形繪圖時(shí),需要確定其邊數(shù)、中心坐標(biāo)、外接圓半徑和一個(gè)頂點(diǎn)的坐標(biāo);而在軸向矩形繪圖時(shí),只需要確定與坐標(biāo)原點(diǎn)相對(duì)的一個(gè)頂點(diǎn)的坐標(biāo)。因此,多邊形繪圖時(shí)的算法具有多態(tài)性。Polymorphism多態(tài)性6.1面向?qū)ο蠓椒ǜ攀?/p>

6.1.2面向?qū)ο蠓椒ǖ母拍钪剌d函數(shù)重載

在同一作用域內(nèi)的若干參數(shù)特征不同的函數(shù),可以使用相同的函數(shù)名。在C++語(yǔ)言中,函數(shù)重載是根據(jù)函數(shù)變?cè)膫€(gè)數(shù)和類型決定使用哪個(gè)實(shí)現(xiàn)代碼的。運(yùn)算符重載

同一運(yùn)算符可以施加于不同類型的操作數(shù)上面。在C++語(yǔ)言中,運(yùn)算符重載是根據(jù)被操作數(shù)的類型決定使用運(yùn)算符的哪種語(yǔ)義的。重載02UML概述UML的發(fā)展UML的內(nèi)容6.2UML概述

6.2.1UML的發(fā)展統(tǒng)一建模語(yǔ)言(UML)是由世界著名的面向?qū)ο蠹夹g(shù)專家GradyBooch,JimRumbaugh和IvarJacobson發(fā)起,在面向?qū)ο蟮腂ooch方法、對(duì)象建模技術(shù)(ObjectModelingTechnique,OMT)和面向?qū)ο筌浖こ蹋∣bjectOrientedSoftwareEngineering,OOSE)的基礎(chǔ)上,不斷進(jìn)行完善和發(fā)展的一種建模語(yǔ)言。1996年年底,UML已經(jīng)穩(wěn)定地占領(lǐng)了面向?qū)ο蠹夹g(shù)市場(chǎng)的85%,成為事實(shí)上的工業(yè)標(biāo)準(zhǔn)。1997年11月,國(guó)際對(duì)象管理組織(OMG)批準(zhǔn)把UML1.1作為基于面向?qū)ο蠹夹g(shù)的標(biāo)準(zhǔn)建模語(yǔ)言。在計(jì)算機(jī)學(xué)術(shù)界、軟件產(chǎn)業(yè)界、商業(yè)界,UML已經(jīng)逐漸成為人們?yōu)楦鞣N系統(tǒng)建立模型,描述系統(tǒng)體系結(jié)構(gòu)、商業(yè)體系結(jié)構(gòu)和商業(yè)過(guò)程時(shí)使用的統(tǒng)一工具,在實(shí)踐過(guò)程中人們還在不斷擴(kuò)展它的應(yīng)用領(lǐng)域。對(duì)象技術(shù)組織(ObjectTechnologyOrganization)已將UML作為對(duì)象建模技術(shù)(OMT)的行業(yè)標(biāo)準(zhǔn)。6.2UML概述

6.2.1UML的發(fā)展1模型是為了理解事物而對(duì)事物做出的一種抽象,是對(duì)事物的一種書面描述。通常,模型由一組圖形符號(hào)和組織這些符號(hào)的規(guī)則組成,模型的描述應(yīng)當(dāng)無(wú)歧義。在開發(fā)軟件系統(tǒng)時(shí),建立模型的目的是為了更好地理解問(wèn)題、減少問(wèn)題的復(fù)雜性、驗(yàn)證模型是否滿足用戶對(duì)系統(tǒng)的需求,并在設(shè)計(jì)過(guò)程中逐步把實(shí)現(xiàn)的有關(guān)細(xì)節(jié)加進(jìn)模型中,最終用程序?qū)崿F(xiàn)模型。UML采用了面向?qū)ο蟮母拍?,引入了各種獨(dú)立于語(yǔ)言的表示符號(hào)。UML通過(guò)建立用例模型、靜態(tài)模型和動(dòng)態(tài)模型完成對(duì)整個(gè)系統(tǒng)的建模,所定義的概念和符號(hào)可用于軟件開發(fā)過(guò)程的分析、設(shè)計(jì)和實(shí)現(xiàn)的全過(guò)程。軟件開發(fā)人員不必在開發(fā)過(guò)程的不同階段進(jìn)行概念和符號(hào)的轉(zhuǎn)換。26.2UML概述

6.2.1UML的發(fā)展3面向?qū)ο筌浖こ蹋∣OSE)方法的最大特點(diǎn)是面向用例(UseCase)。用例代表某些用戶可見(jiàn)的功能,實(shí)現(xiàn)一個(gè)具體的用戶目標(biāo)。用例代表一類功能而不是使用該功能的某一具體實(shí)例。用例是精確描述需求的重要工具,貫穿于整個(gè)軟件開發(fā)過(guò)程,包括對(duì)系統(tǒng)的測(cè)試和驗(yàn)證過(guò)程。6.2UML概述

6.2.2UML的內(nèi)容01

UML是一種描述、構(gòu)造、可視化和文檔化的軟件建模語(yǔ)言。03

UML采用圖形表示法,是一種可視化的圖形建模語(yǔ)言。UML的主要內(nèi)容包括UML語(yǔ)義、UML表示法和幾種模型。02UML是面向?qū)ο蠹夹g(shù)中軟件分析與設(shè)計(jì)的標(biāo)準(zhǔn)建模語(yǔ)言,它統(tǒng)一了面向?qū)ο蠼5幕靖拍?、術(shù)語(yǔ)及其圖形符號(hào),建立了便于交流的通用語(yǔ)言。03

UML表示法為建模者和建模工具的開發(fā)者提供了標(biāo)準(zhǔn)的圖形符號(hào)和文字表達(dá)的語(yǔ)法。這些圖形符號(hào)和文字所表達(dá)的是應(yīng)用級(jí)的模型,使用這些圖形符號(hào)和正文語(yǔ)法為系統(tǒng)建模構(gòu)造了標(biāo)準(zhǔn)的系統(tǒng)模型。UML表示法由UML圖、視圖、模型元素、通用機(jī)制和擴(kuò)展機(jī)制組成。6.2UML概述6.2.2UML的內(nèi)容1UML的基本元素層

基本元素層由基本元素(Thing)組成,代表要定義的所有事物。2元模型層

元模型層由UML的基本元素組成,包括面向?qū)ο蠛兔嫦驑?gòu)件的概念,每個(gè)概念都是基本元素的實(shí)例。它為建模者和使用者提供了簡(jiǎn)單、一致、通用的表示符號(hào)和說(shuō)明。3靜態(tài)模型層

靜態(tài)模型層由UML靜態(tài)模型組成,靜態(tài)模型描述系統(tǒng)的元素及元素間的關(guān)系,常稱為類模型。4用例模型層

用例模型層由用例模型組成,用例模型從用戶的角度描述系統(tǒng)需求,它是所有開發(fā)活動(dòng)的指南。UML語(yǔ)義是定義在一個(gè)建立模型的框架中的,建??蚣苡腥缦?個(gè)層次(抽象級(jí)別)。6.2UML概述6.2.2UML的內(nèi)容行為圖:包括狀態(tài)圖和活動(dòng)圖,用于描述系統(tǒng)的動(dòng)態(tài)行為和對(duì)象之間的交互關(guān)系。UML的模型圖交互圖:包括順序圖和協(xié)作圖,用于描述系統(tǒng)的對(duì)象之間的動(dòng)態(tài)合作關(guān)系。用例圖:用于表示系統(tǒng)的功能,并指出各功能的操作者。12345靜態(tài)圖:包括類圖、對(duì)象圖及包,表示系統(tǒng)的靜態(tài)結(jié)構(gòu)。實(shí)現(xiàn)圖:包括構(gòu)件圖和配置圖,用于描述系統(tǒng)的物理實(shí)現(xiàn)。UML的模型是用圖來(lái)表示的,共有5類9種圖。6.2UML概述6.2.2UML的內(nèi)容135狀態(tài)視圖6活動(dòng)視圖7交互視圖8模型管理視圖1靜態(tài)視圖2用例視圖3實(shí)現(xiàn)視圖4部署視圖視圖由若干張圖構(gòu)成,從不同的目的或角度描述系統(tǒng)。UML視圖主要包括:靜態(tài)視圖、用例視圖、實(shí)現(xiàn)視圖、部署視圖、狀態(tài)視圖、活動(dòng)視圖、交互視圖、模型管理視圖等。6.2UML概述6.2.2UML的內(nèi)容

圖中使用的概念,如用例、類、對(duì)象、消息和關(guān)系,統(tǒng)稱為模型元素。模型元素在圖中用相應(yīng)的圖形符號(hào)表示。

一個(gè)模型元素可以在多個(gè)不同的圖中出現(xiàn),但它的含義和符號(hào)是相同的。模型元素6.2UML概述6.2.2UML的內(nèi)容412345字符串:用于表示有關(guān)模型的信息。名字:用于表示模型元素。標(biāo)號(hào):用于表示附屬于圖形符號(hào)的字符。特定字符串:用于表示附屬于模型元素的特性。類型表達(dá)式:用于聲明屬性變量和參數(shù)。3

UML為所有元素在語(yǔ)義和語(yǔ)法上提供了簡(jiǎn)單、一致、通用的定義性說(shuō)明。UML利用通用機(jī)制為圖附加一些額外信息。通用機(jī)制的表示方法有:6.2UML概述6.2.2UML的內(nèi)容擴(kuò)展機(jī)制標(biāo)簽(用{}表示)版型(用《》表示)約束(用{}表示)UML的擴(kuò)展機(jī)制使它能夠適應(yīng)一些特殊方法或用戶的某些特殊需要。6.2UML概述6.2.2UML的內(nèi)容靜態(tài)模型描述系統(tǒng)內(nèi)的對(duì)象、類、包以及類與類、包與包之間的相互關(guān)系等。靜態(tài)模型用類圖、對(duì)象圖、包、構(gòu)件圖、部署圖等描述。02用例模型描述用戶所理解的系統(tǒng)功能。用例模型通過(guò)用例圖描述。01實(shí)現(xiàn)模型包括構(gòu)件圖和部署圖,它們描述了系統(tǒng)實(shí)現(xiàn)時(shí)的一些特性。04動(dòng)態(tài)模型描述系統(tǒng)的行為,描述系統(tǒng)中的對(duì)象通過(guò)通信相互協(xié)作的方式及對(duì)象在系統(tǒng)中改變狀態(tài)的方式等。動(dòng)態(tài)模型用狀態(tài)圖、順序圖、活動(dòng)圖、協(xié)作圖等描述。03UML可以建立系統(tǒng)的用例模型、靜態(tài)模型、動(dòng)態(tài)模型和實(shí)現(xiàn)模型,每種模型由適當(dāng)?shù)腢ML圖組成。03UML圖用例圖類圖和包順序圖活動(dòng)圖對(duì)象圖狀態(tài)圖協(xié)作圖構(gòu)件圖部署圖6.3UML圖

符號(hào)表示內(nèi)容注釋:框中的文字是注釋內(nèi)容。同步消息:表示調(diào)用者發(fā)出消息后必須等待消息返回。只有當(dāng)處理消息的操作執(zhí)行完畢,調(diào)用者才可以繼續(xù)執(zhí)行自己的操作。異步消息:發(fā)送者發(fā)出消息后,不用等待消息處理完就可以繼續(xù)執(zhí)行自己的操作。異步消息主要用于描述實(shí)時(shí)系統(tǒng)中的并發(fā)行為。簡(jiǎn)單消息:表示簡(jiǎn)單的控制流,只表示消息從一個(gè)對(duì)象傳給另一個(gè)對(duì)象,沒(méi)有描述通信的任何細(xì)節(jié)。同步且立即返回:可以把一個(gè)簡(jiǎn)單消息和一個(gè)同步消息合并成一個(gè)消息,這樣的消息表示操作調(diào)用一旦完成就立即返回。

UML圖包括用例圖、類圖、對(duì)象圖、狀態(tài)圖、順序圖、活動(dòng)圖、協(xié)作圖、構(gòu)件圖、部署圖9種。以下幾種符號(hào)在各種UML圖中可能都要用。6.3UML圖

6.3.1用例圖用例代表某些用戶可見(jiàn)的功能,實(shí)現(xiàn)一個(gè)具體的用戶目標(biāo)。整個(gè)系統(tǒng)功能是由一系列用例組成的,待所有用例設(shè)計(jì)完成,系統(tǒng)設(shè)計(jì)工作也就完成了,這就是用例驅(qū)動(dòng)方法。用例圖(UseCaseDiagram)定義了系統(tǒng)的功能需求。用例圖從用戶的角度描述系統(tǒng)功能,并指出各功能的操作者。用UML開發(fā)軟件,是對(duì)用例進(jìn)行迭代、漸增式地構(gòu)造的過(guò)程。用例圖的主要元素是用例、執(zhí)行者和通信聯(lián)系。用例圖中用方框畫出系統(tǒng)的功能范圍,該系統(tǒng)功能的用例都置于方框中,用例的執(zhí)行者都置于方框外。執(zhí)行者和用例之間要進(jìn)行通信聯(lián)系(信息交換)。UseCaseDiagram6.3UML圖

6.3.1用例圖用例用例是一個(gè)類,它代表一類功能而不是使用該功能的某一具體實(shí)例。用例代表某些用戶可見(jiàn)的功能,實(shí)現(xiàn)一個(gè)具體用戶目標(biāo)。用例由執(zhí)行者激活,并提供確切的值給執(zhí)行者。用例可大可小,但必須是對(duì)一個(gè)具體用戶目標(biāo)實(shí)現(xiàn)的完整描述。用例之間存在一定的關(guān)系,如一般-特殊關(guān)系、包含關(guān)系(特殊的依賴關(guān)系)。

用例用橢圓()表示。6.3UML圖

6.3.1用例圖執(zhí)行者執(zhí)行者實(shí)際上就是類。執(zhí)行者是與系統(tǒng)交互的人或物。執(zhí)行者是能夠使用某個(gè)功能的一類人或物。執(zhí)行者之間可以有一般-特殊關(guān)系。

執(zhí)行者也稱角色,用一個(gè)人形圖案()表示。6.3UML圖

6.3.1用例圖執(zhí)行者和用例之間要交換信息,稱為通信聯(lián)系。執(zhí)行者與用例之間用線段連接,表示兩者之間進(jìn)行通信聯(lián)系。執(zhí)行者不一定是一個(gè)具體的人,可能是使用該系統(tǒng)的其他系統(tǒng)或設(shè)備等,但都用人形圖案來(lái)表示。執(zhí)行者激活用例,并與用例交換信息。單個(gè)執(zhí)行者可與多個(gè)用例聯(lián)系;反過(guò)來(lái),一個(gè)用例也可與多個(gè)執(zhí)行者聯(lián)系。對(duì)于同一個(gè)用例,不同執(zhí)行者起的作用也可以不同。6.3UML圖

6.3.1用例圖腳本是用例的實(shí)例。腳本是系統(tǒng)的一次具體執(zhí)行過(guò)程。用例圖中應(yīng)盡可能包含所有的腳本,才能較完整地從用戶使用的角度來(lái)描述系統(tǒng)的功能。6.3UML圖

案例畫出飲用水自動(dòng)售水系統(tǒng)的用例圖。例6-1飲用水自動(dòng)售水系統(tǒng)的使用方法如下:供水正常時(shí),綠燈亮,等待顧客投幣。如果顧客投入一元硬幣,則可以自動(dòng)控制放水5L;若投入五角硬幣,可放水2.5L;如果選擇一元,投入兩個(gè)五角硬幣,也可放水5L。如果連續(xù)放水較多,飲用水來(lái)不及供應(yīng),會(huì)亮紅燈表示要求顧客等待,并會(huì)把顧客投入的硬幣掉下來(lái)。供水恢復(fù)正常時(shí),紅燈滅、綠燈亮。顧客投入的硬幣由收銀員定期回收。要求畫出該系統(tǒng)的用例圖。6.3UML圖

案例畫出飲用水自動(dòng)售水系統(tǒng)的用例圖。例6-1解:下面通過(guò)分析該系統(tǒng)的腳本、用例、執(zhí)行者,從而畫出用例圖。顧客甲投入一個(gè)一元硬幣,系統(tǒng)收到錢后放出5L水,這個(gè)過(guò)程就是一個(gè)腳本。飲用水自動(dòng)售水系統(tǒng)中,投入硬幣的人可以是甲,也可以是乙,但是甲或乙不能稱為執(zhí)行者。因?yàn)榫唧w某個(gè)人,如甲,可以放入一元硬幣,也可以放入五角硬幣,還可以執(zhí)行取款功能,把錢取走。根據(jù)系統(tǒng)功能,可以將執(zhí)行者分為收銀員和顧客兩類。顧客可以投入一元或五角的硬幣,顧客投入兩個(gè)五角硬幣和投入一個(gè)一元硬幣的效果相同,因而顧客買水有兩個(gè)腳本。如果系統(tǒng)飲用水產(chǎn)生得不夠,系統(tǒng)亮紅燈并把投入的硬幣掉下來(lái),這個(gè)過(guò)程是另一個(gè)腳本。收銀員取款也是一個(gè)腳本。故系統(tǒng)共有4個(gè)腳本。圖示是飲用水自動(dòng)售水系統(tǒng)的用例圖。案例畫出飲用水自動(dòng)售水系統(tǒng)的用例圖。例6-16.3UML圖

6.3UML圖

6.3.2類圖和包類圖(ClassDiagram)描述類與類之間的靜態(tài)關(guān)系。類圖表示系統(tǒng)或領(lǐng)域中的實(shí)體以及實(shí)體之間的關(guān)聯(lián),由表示類的類框和表示類之間如何關(guān)聯(lián)的連線所組成。包用于把各種相關(guān)的建模元素組織在一起,形成一個(gè)整體。6.3UML圖

6.3.2類圖和包類圖的符號(hào)01類的UML圖標(biāo)是一個(gè)矩形框,分成3個(gè)部分,上部寫類名,中間寫屬性,下部寫操作。類的圖形符號(hào)如圖6-4所示。類與類之間的關(guān)系用連線表示,不同的關(guān)系用不同的連線和連線端點(diǎn)處的修飾符來(lái)區(qū)別,如圖6-4所示。圖6-4類的圖形符號(hào)和關(guān)系的連線6.3UML圖

6.3.2類圖和包類的名稱類的名稱是名詞,應(yīng)當(dāng)含義明確、無(wú)歧義。類的屬性描述該類對(duì)象的共同特性。類屬性的值應(yīng)能描述并區(qū)分該類的每個(gè)對(duì)象。例如,學(xué)生對(duì)象有屬性“姓名”,是每個(gè)學(xué)生都具有的共同特性,而具體的某個(gè)姓名可以用來(lái)區(qū)分學(xué)生對(duì)象。屬性的選取應(yīng)符合系統(tǒng)建模的目的,系統(tǒng)需要的特性才可作為類的屬性。屬性的語(yǔ)法格式為

可見(jiàn)性屬性名:類型名=初值{性質(zhì)串}例如,+性別:字符型=“男”{“男”,“女”}類的屬性6.3UML圖

6.3.2類圖和包(1)屬性的可見(jiàn)性就是可訪問(wèn)性,通常分為3種。公有的(Public):用加號(hào)(+)表示。私有的(Private):用減號(hào)(–)表示。保護(hù)的(Protected):用井號(hào)(#)表示。(2)屬性名和類型名之間用冒號(hào)(:)分隔。類型名表示該屬性的數(shù)據(jù)類型,類型可以是基本數(shù)據(jù)類型,如整數(shù)、實(shí)數(shù)、布爾型等,也可以是用戶自定義的類型。(3)屬性的缺省值用屬性的初值表示。(4)等號(hào):類型名和初值之間用等號(hào)連接。(5)標(biāo)記值:用花括號(hào)括起來(lái)的性質(zhì)串是一個(gè)標(biāo)記值,列出屬性所有可能的取值,每個(gè)值之間用逗號(hào)分隔。也可以用性質(zhì)串說(shuō)明該屬性的其他信息,比如{只讀}。6.3UML圖

6.3.2類圖和包類的操作類的操作用于修改、檢索類的屬性或執(zhí)行某些動(dòng)作。操作只能用于該類的對(duì)象上。描述類的操作的語(yǔ)法規(guī)則為可見(jiàn)性操作名(參數(shù)表):返回值類型{性質(zhì)串}類與類之間的關(guān)系通常有關(guān)聯(lián)關(guān)系、繼承關(guān)系、依賴關(guān)系和細(xì)化關(guān)系4種。6.3UML圖

6.3.2類圖和包類的關(guān)聯(lián)關(guān)系02兩個(gè)類之間的關(guān)聯(lián)關(guān)系用直線連接來(lái)表示。類的關(guān)聯(lián)關(guān)系有方向時(shí),用黑三角表示方向,可在方向上起名字,也可不起名字,圖6-5表示了關(guān)聯(lián)的方向。不帶箭頭的關(guān)聯(lián)可以是方向未知、未確定或雙向的。在類圖中還可以表示關(guān)聯(lián)中的數(shù)量關(guān)系,即參與關(guān)聯(lián)的對(duì)象的個(gè)數(shù)或數(shù)量范圍。例如右圖:圖6-5表示學(xué)生與計(jì)算機(jī)的關(guān)聯(lián),學(xué)生使用計(jì)算機(jī),計(jì)算機(jī)被學(xué)生使用,幾個(gè)學(xué)生合用一臺(tái)計(jì)算機(jī)或多個(gè)學(xué)生使用多臺(tái)計(jì)算機(jī)。0…1 表示:0到1個(gè)對(duì)象0…*或* 表示:0到多個(gè)對(duì)象1…15 表示:1到15個(gè)對(duì)象3 表示:3個(gè)對(duì)象個(gè)數(shù)缺省 表示:1圖6-5類與類的關(guān)聯(lián)

普通關(guān)聯(lián)6.3UML圖

6.3.2類圖和包限定關(guān)聯(lián)在一對(duì)多或多對(duì)多的關(guān)聯(lián)關(guān)系中,可以用限定詞將關(guān)聯(lián)變成一對(duì)一的關(guān)聯(lián),限定詞放在關(guān)聯(lián)關(guān)系末端的一個(gè)小方框內(nèi),如圖6-6所示。圖6-6類的限定6.3UML圖

6.3.2類圖和包關(guān)聯(lián)類為了說(shuō)明關(guān)聯(lián)的性質(zhì),可以用關(guān)聯(lián)類來(lái)記錄關(guān)聯(lián)的一些附加信息。關(guān)聯(lián)類與一般類一樣,可以定義其屬性、操作和關(guān)聯(lián)。關(guān)聯(lián)類用一條虛線與關(guān)聯(lián)連接。例如,學(xué)生與所學(xué)習(xí)的課程具有關(guān)聯(lián)關(guān)系,學(xué)生學(xué)習(xí)每門課程都可得到相應(yīng)的學(xué)分、成績(jī)。圖6-7是學(xué)生類與課程類關(guān)聯(lián)關(guān)系的關(guān)聯(lián)類圖示。圖6-7關(guān)聯(lián)類圖示6.3UML圖

6.3.2類圖和包聚集

聚集表示類與類之間的關(guān)系是整體與部分的關(guān)系。在需求分析時(shí),使用“包含”、“組成”、“分為”等詞時(shí),意味著存在聚集關(guān)系。聚集關(guān)系除了一般聚集關(guān)系,還有兩個(gè)特殊的聚集關(guān)系,即共享聚集和復(fù)合聚集。共享聚集部分對(duì)象可同時(shí)參與多個(gè)整體對(duì)象的構(gòu)成,稱為共享聚集。例如,學(xué)生可參加多個(gè)學(xué)生社團(tuán)組織。一般聚集和共享聚集的表示符號(hào)都是在整體類的旁邊畫一空心菱形,用直線連接部分類,如圖6-8所示。圖6-8共享聚集6.3UML圖

6.3.2類圖和包聚集復(fù)合聚集(組成)如果部分類完全隸屬于整體類,部分與整體共存亡,則稱該聚集為復(fù)合聚集,簡(jiǎn)稱為組成。組成關(guān)系用實(shí)心菱形表示。例如,旅客列車由火車頭和若干車廂組成,車廂分為軟席、硬席、軟席臥鋪和硬席臥鋪4種。圖6-9是旅客列車組成圖,是復(fù)合聚集圖例。圖6-9復(fù)合聚集圖例6.3UML圖

6.3.2類圖和包類的一般-特殊關(guān)系03類的一般-特殊關(guān)系,也稱繼承關(guān)系或類的泛化,用空心三角形表示,三角形的頂角對(duì)著父類。圖6-10(a)表示汽車類含客車與貨車兩個(gè)子類,子類與父類有單繼承關(guān)系。圖6-10(b)表示冷藏車既繼承貨車的特性(載貨),又繼承冷藏設(shè)備的特性(冷藏),具有多重繼承關(guān)系。

(a)(b)圖6-10類的單繼承關(guān)系和多重繼承關(guān)系6.3UML圖

6.3.2類圖和包類的依賴關(guān)系04用帶箭頭的虛線連接有依賴關(guān)系的兩個(gè)類,箭頭指向獨(dú)立的類。如圖6-11所示,類A是獨(dú)立的,類B以某種方式依賴于類A,如果類A改變了,將影響依賴于它的類B中的元素。如果一個(gè)類向另一個(gè)類發(fā)送消息,一個(gè)類使用另一個(gè)類的對(duì)象作為操作的參數(shù),一個(gè)類使用另一個(gè)類的對(duì)象作為它的數(shù)據(jù)成員等,這樣的兩個(gè)類之間都存在依賴關(guān)系。連接依賴關(guān)系的虛線可以帶一個(gè)標(biāo)簽,具體說(shuō)明依賴的種類。圖6-11類的依賴關(guān)系6.3UML圖

6.3.2類圖和包類的細(xì)化關(guān)系05在軟件開發(fā)的不同階段都使用類圖,這些類圖表示了類在不同層次的抽象。類圖可以分為3個(gè)層次。分別是概念層類圖,說(shuō)明層類圖,實(shí)現(xiàn)層類圖。當(dāng)對(duì)同一事物在不同抽象層次上進(jìn)行描述時(shí),這些描述之間具有細(xì)化關(guān)系。例如,類A進(jìn)一步詳細(xì)描述后得到類B,稱為類A與類B具有細(xì)化關(guān)系,用由類B指向類A的虛線及空心三角形表示。圖6-12所示為類的細(xì)化關(guān)系,類A進(jìn)一步細(xì)化后得到類B,類B細(xì)化了類A。細(xì)化主要用于表示類的模型之間的相關(guān)性,常用于跟蹤模型的演變。圖6-12類的細(xì)化關(guān)系6.3UML圖

6.3.2類圖和包說(shuō)明層類圖實(shí)現(xiàn)層類圖概念層類圖類的細(xì)化關(guān)系說(shuō)明層類圖

在設(shè)計(jì)階段用說(shuō)明層類圖描述軟件的接口部分。概念層類圖在需求分析階段用概念層類圖描述應(yīng)用領(lǐng)域中的概念。

實(shí)現(xiàn)層類圖在實(shí)現(xiàn)階段用實(shí)現(xiàn)層類圖描述軟件系統(tǒng)中類的實(shí)現(xiàn)。6.3UML圖

6.3.2類圖和包包06包(Package)是一種組合機(jī)制。包由類圖或另一個(gè)包構(gòu)成,表示包與包之間的依賴、細(xì)化和泛化等關(guān)系。包像一個(gè)“容器”,可以組織模型中的相關(guān)元素。包是把各種各樣的模型元素通過(guò)內(nèi)在的語(yǔ)義關(guān)系連接在一起而形成的一個(gè)高內(nèi)聚、低耦合的整體。包通常用于對(duì)模型的管理,有時(shí)可把包稱為子系統(tǒng)。包的圖示符號(hào)如圖6-13所示。包的名稱可以寫在小矩形內(nèi),也可寫在大矩形內(nèi)。當(dāng)不需要關(guān)心包的內(nèi)容和細(xì)節(jié)時(shí),把包的名稱標(biāo)注在大矩形內(nèi);當(dāng)需要顯示包的內(nèi)容時(shí),把包的名稱寫在小矩形內(nèi),包的內(nèi)容放在大矩形內(nèi)。包的內(nèi)容可以是類的列表、類圖或是另一個(gè)包。圖6-13包的圖示符號(hào)6.3UML圖

6.3.2類圖和包包06包與包之間可以建立依賴、泛化和細(xì)化關(guān)系,其圖形符號(hào)與類圖中相同。包是模型的一部分,實(shí)際上是整個(gè)系統(tǒng)的子系統(tǒng)。建模人員可將模型按內(nèi)容分配到一系列的包中。設(shè)計(jì)包時(shí)必須遵守的原則有:重用等價(jià)原則、共同閉包原則、共同重用原則和非循環(huán)依賴原則。在UML中,包是一種建模元素,在建模時(shí)用來(lái)組織模型中的各種元素,是分組事物(GroupingThing)的一種。UML中并沒(méi)有包圖,通常所說(shuō)的包圖是指類圖、用例圖等。在系統(tǒng)運(yùn)行時(shí),并不存在包的實(shí)例。而類在運(yùn)行時(shí)會(huì)有實(shí)例存在,即某個(gè)具體的對(duì)象。圖6-13包的圖示符號(hào)6.3UML圖

6.3.2類圖和包重用等價(jià)原則

把包作為可重用的單元。把類放在包中時(shí),要方便重用,方便對(duì)該包的各個(gè)版本進(jìn)行管理。共同閉包原則

把需要同時(shí)改變的類放在一個(gè)包中。共同閉包原則旨在提高包的內(nèi)聚,降低包的耦合。共同重用原則

不會(huì)一起使用的包不要放在同一個(gè)包中。非循環(huán)依賴原則

包和包之間的依賴關(guān)系不要形成循環(huán)。

設(shè)計(jì)包時(shí)必須遵守的原則有:重用等價(jià)原則、共同閉包原則、共同重用原則和非循環(huán)依賴原則。6.3UML圖

6.3.3對(duì)象圖

對(duì)象是類的實(shí)例。因此,對(duì)象圖(ObjectDiagram)可以看做是類圖的實(shí)例,能幫助人們理解比較復(fù)雜的類圖。類圖與對(duì)象圖之間的區(qū)別是,對(duì)象圖中對(duì)象的名稱下面要加下劃線。對(duì)象有以下3種表示方式:對(duì)象名:類名對(duì)象名:類名(1)對(duì)象名與類名之間用冒號(hào)(:)連接,一起加下劃線。(2)可以只寫對(duì)象名并加下劃線,將冒號(hào)及類名省略。(3)如果只有類名沒(méi)有對(duì)象名,在表示對(duì)象時(shí),類名前一定要加冒號(hào),冒號(hào)和類名要同時(shí)加下劃線。6.3UML圖

案例對(duì)象圖圖6-14圖6-5表示學(xué)生類與計(jì)算機(jī)類之間的關(guān)聯(lián)關(guān)系,而圖6-14表示學(xué)生類中的對(duì)象實(shí)例“王一”與計(jì)算機(jī)類中的對(duì)象實(shí)例“10號(hào)機(jī)”之間的關(guān)聯(lián)關(guān)系,這里對(duì)象名及類名的下面都加了下劃線。這兩個(gè)對(duì)象的屬性和服務(wù)沒(méi)有標(biāo)出,強(qiáng)調(diào)的是兩個(gè)類之間的聯(lián)系:學(xué)生類對(duì)象“王一”使用了計(jì)算機(jī)類的對(duì)象“10號(hào)機(jī)”。圖6-14對(duì)象圖6.3UML圖

6.3.4狀態(tài)圖01

面向?qū)ο蠓椒ㄔ谶M(jìn)行系統(tǒng)分析時(shí),與傳統(tǒng)方法的需求分析一樣,有時(shí)應(yīng)分析對(duì)象的狀態(tài),畫出狀態(tài)圖,才可正確地認(rèn)識(shí)對(duì)象的行為并定義它的服務(wù)。03

狀態(tài)轉(zhuǎn)換是指兩個(gè)狀態(tài)之間的關(guān)系,它描述了對(duì)象從一個(gè)狀態(tài)進(jìn)入另一個(gè)狀態(tài)的情況,并執(zhí)行了所包含的動(dòng)作。02

并不是所有的類都需要畫狀態(tài)圖。有明確意義的狀態(tài)、在不同狀態(tài)下行為有所不同的類才需要畫狀態(tài)圖。6.3UML圖

6.3.4狀態(tài)圖橢圓或圓角矩形:表示對(duì)象的一種狀態(tài),橢圓內(nèi)部填寫狀態(tài)名。箭頭:表示從箭頭出發(fā)的狀態(tài)可以轉(zhuǎn)換到箭頭指向的狀態(tài)。事件:引起狀態(tài)轉(zhuǎn)換的原因。事件名可在箭頭線上方標(biāo)出。條件:事件名后面可加方括號(hào)[],括號(hào)內(nèi)寫狀態(tài)轉(zhuǎn)換的條件。實(shí)心圓:指出該對(duì)象被創(chuàng)建后所處的初始狀態(tài)。內(nèi)部實(shí)心的同心圓:表示對(duì)象的最終狀態(tài)。1狀態(tài)圖的符號(hào)6.3UML圖

6.3.4狀態(tài)圖一張狀態(tài)圖的初始狀態(tài)只有一個(gè),而最終狀態(tài)可以有多個(gè);也可以沒(méi)有最終狀態(tài),只有用圓角矩形表示的中間狀態(tài)。每個(gè)中間狀態(tài)有不同的操作(活動(dòng)),中間狀態(tài)可能包含3個(gè)部分:狀態(tài)名稱、狀態(tài)變量的名稱和值、活動(dòng)表,如圖6-15所示。這里狀態(tài)變量和活動(dòng)表都是可選項(xiàng)。2狀態(tài)圖的狀態(tài)6.3UML圖

6.3.4狀態(tài)圖活動(dòng)表經(jīng)常使用下述3種標(biāo)準(zhǔn)事件:entry(進(jìn)入)、exit(退出)和do(做)。entry事件:指進(jìn)入該狀態(tài)的動(dòng)作,相當(dāng)于狀態(tài)圖中的初始狀態(tài),用實(shí)心圓表示。exit事件:指退出該狀態(tài)的動(dòng)作,對(duì)應(yīng)于狀態(tài)圖中的“”表示。do事件:指在該狀態(tài)下的動(dòng)作,可在表示該狀態(tài)的圓角矩形內(nèi)用狀態(tài)子圖詳細(xì)描述。這些標(biāo)準(zhǔn)事件一般不做其他用途。活動(dòng)表較復(fù)雜時(shí)也可用狀態(tài)圖中嵌套一個(gè)狀態(tài)子圖來(lái)表示?;顒?dòng)表中表示動(dòng)作的語(yǔ)法如下:

事件名(參數(shù)表)/動(dòng)作表達(dá)式事件名可以是任何事件,包括上述3種標(biāo)準(zhǔn)事件;需要時(shí)可以指定事件的參數(shù)表;動(dòng)作表達(dá)式指定應(yīng)做的動(dòng)作。3狀態(tài)圖的事件6.3UML圖

6.3.4狀態(tài)圖狀態(tài)機(jī)(StateMachine)指定某對(duì)象或交互過(guò)程在其整個(gè)生存周期中對(duì)事件做出響應(yīng)而先后經(jīng)歷的各種狀態(tài),同時(shí)表明響應(yīng)和動(dòng)作。狀態(tài)機(jī)為類的對(duì)象在生存周期建立模型。狀態(tài)機(jī)由對(duì)象的一系列狀態(tài)和激發(fā)這些狀態(tài)的轉(zhuǎn)換組成,狀態(tài)轉(zhuǎn)換附屬的某些動(dòng)作可能被執(zhí)行,狀態(tài)機(jī)用狀態(tài)圖描述。6.3UML圖

案例狀態(tài)機(jī)舉例。例6-2

圖6-16是撥打電話的狀態(tài)轉(zhuǎn)換圖,共有兩個(gè)狀態(tài):空閑狀態(tài)和活動(dòng)狀態(tài)。對(duì)于活動(dòng)狀態(tài)又可具體畫出撥打電話時(shí)可能遇到的幾種不同情況,在表示活動(dòng)狀態(tài)的圓角矩形內(nèi)用嵌套的狀態(tài)子圖詳細(xì)描述出來(lái)。含有子狀態(tài)的狀態(tài)稱為組合狀態(tài)(CompositeState)。如圖6-16所示,撥打電話狀態(tài)是組合狀態(tài)。6.3UML圖

案例狀態(tài)機(jī)舉例。例6-26.3UML圖

從上到下:從表示對(duì)象的矩形框開始,從上到下代表時(shí)間的先后順序,并表示某段時(shí)間內(nèi)該對(duì)象是存在的。水平方向:橫向水平線的箭頭指示了不同對(duì)象之間傳遞消息的方向。

順序圖(SequenceDiagram)描述對(duì)象之間動(dòng)態(tài)交互的情況,著重表示對(duì)象間消息傳遞的時(shí)間順序。順序圖中的對(duì)象用矩形框表示,框內(nèi)標(biāo)有對(duì)象名。順序圖有以下兩個(gè)方向:6.3.5順序圖6.3UML圖

6.3.5順序圖如果對(duì)象接收到消息后立即執(zhí)行某個(gè)活動(dòng),稱對(duì)象被激活了,激活用細(xì)長(zhǎng)的矩形框表示,寫在該對(duì)象的下方。消息可以帶有條件表達(dá)式,用來(lái)表示分支或決定是否發(fā)送。帶有分支的消息,某一時(shí)刻只發(fā)送分支中的一個(gè)消息。瀏覽順序圖的方法是,從上到下按時(shí)間的順序查看對(duì)象之間交互的消息。6.3UML圖

案例用順序圖描述打電話的操作過(guò)程。例6-3打電話時(shí),主叫方拿起聽(tīng)筒,信息就發(fā)給交換機(jī);交換機(jī)接到信息后,發(fā)信息給主叫方,電話發(fā)出撥號(hào)音;主叫方撥電話號(hào)碼;交換機(jī)發(fā)響鈴信息給通話雙方;若被叫方在30秒內(nèi)接聽(tīng)電話,雙方就可通話;通話結(jié)束,停止鈴音。若被叫方在30秒內(nèi)沒(méi)有接聽(tīng)電話,則停止鈴音,不能通話。圖6-17是一個(gè)描述打電話操作過(guò)程的順序圖。這里,對(duì)于被叫方?jīng)]有接聽(tīng)電話而不能通話,這樣的情況反映不出來(lái)。此時(shí),可以用活動(dòng)圖描述。6.3UML圖

6.3.6活動(dòng)圖活動(dòng)圖(ActivityDiagram)是狀態(tài)圖的一種特殊情況。無(wú)需指明任何事件,只要?jiǎng)幼鞅粓?zhí)行,活動(dòng)圖中的狀態(tài)就自動(dòng)開始轉(zhuǎn)換。如果狀態(tài)轉(zhuǎn)換的觸發(fā)事件是內(nèi)部動(dòng)作的完成,可用活動(dòng)圖描述;當(dāng)狀態(tài)轉(zhuǎn)換的觸發(fā)事件是外部事件時(shí),常用狀態(tài)轉(zhuǎn)換圖來(lái)表示。在活動(dòng)圖中,用例和對(duì)象的行為中的各個(gè)活動(dòng)之間通常具有時(shí)間順序?;顒?dòng)圖表達(dá)這種順序,展示出對(duì)象執(zhí)行某種行為時(shí)或者在業(yè)務(wù)過(guò)程中所要經(jīng)歷的各個(gè)活動(dòng)和判定點(diǎn)。每個(gè)活動(dòng)用一個(gè)圓角矩形表示,判定點(diǎn)用菱形框表示。6.3UML圖

案例用活動(dòng)圖描述打電話過(guò)程。例6-4打電話過(guò)程可用活動(dòng)圖描述,如圖6-18所示。打電話者拿起聽(tīng)筒;出現(xiàn)撥號(hào)音;撥號(hào);連接時(shí)如果號(hào)碼錯(cuò)誤就停止,如果號(hào)碼正確還要判斷對(duì)方是否線路忙;線路忙則停止;線路不忙才能接通,聽(tīng)到響鈴,若對(duì)方在30秒內(nèi)接聽(tīng)電話,就進(jìn)行通話,通話結(jié)束則停止;若對(duì)方超過(guò)30秒未接聽(tīng)則停止。這個(gè)活動(dòng)圖描述了撥打電話者的電話功能的設(shè)計(jì)方案,電話在遇到不同情況時(shí)進(jìn)入不同的狀態(tài),圖中含有判斷。6.3UML圖

6.3.7協(xié)作圖

協(xié)作圖(CollaborationDiagram)用于描述系統(tǒng)中相互協(xié)作的對(duì)象之間的交互關(guān)系和關(guān)聯(lián)鏈接關(guān)系,它以對(duì)象圖的形式來(lái)描述。協(xié)作圖和順序圖都是描述對(duì)象間的交互關(guān)系,但它們的側(cè)重點(diǎn)不同:順序圖著重表示交互的時(shí)間順序,協(xié)作圖著重表示交互對(duì)象的靜態(tài)鏈接關(guān)系。協(xié)作圖中的對(duì)象圖示與順序圖相同。對(duì)象之間的連線代表了對(duì)象之間的關(guān)聯(lián)和消息傳遞,每個(gè)消息箭頭都帶有一個(gè)消息標(biāo)簽?!啊?.3UML圖

6.3.7協(xié)作圖

書寫消息標(biāo)簽的語(yǔ)法規(guī)則如下:前綴[條件]序列表達(dá)式返回值:=消息說(shuō)明1前綴

前綴表示在發(fā)送當(dāng)前消息之前應(yīng)該把指定序列號(hào)的消息處理完。若有多個(gè)序列號(hào)則用逗號(hào)隔開。用斜線標(biāo)志前綴的結(jié)束。2條件

書寫條件的語(yǔ)法規(guī)則與狀態(tài)圖一樣,在方括號(hào)內(nèi)寫條件。3序列表達(dá)式

序列表達(dá)式用于指定消息發(fā)送的順序。在協(xié)作圖中把消息按順序編號(hào):消息1總是消息序列的開始消息,消息1.1是處理消息1過(guò)程中的第1條嵌套消息,消息1.2是第2條嵌套消息,以此類推。4消息說(shuō)明

消息說(shuō)明由消息名和參數(shù)表組成,其語(yǔ)法與狀態(tài)圖中事件說(shuō)明的語(yǔ)法相同。5返回值

返回值表示消息(操作調(diào)用)的結(jié)果。6.3UML圖

案例在學(xué)生成績(jī)管理系統(tǒng)中,教師擔(dān)任多門課程的教學(xué)任務(wù),以及學(xué)生學(xué)習(xí)多門課程。圖6-19

協(xié)作圖用于描述系統(tǒng)行為是如何由系統(tǒng)的成分協(xié)作實(shí)現(xiàn)的,只有涉及協(xié)作的對(duì)象才會(huì)被表示出來(lái)。在協(xié)作圖中,多對(duì)象用多個(gè)方框重疊表示。圖6-19描述了在學(xué)生成績(jī)管理系統(tǒng)中,教師擔(dān)任多門課程的教學(xué)任務(wù),以及學(xué)生學(xué)習(xí)多門課程。6.3UML圖

6.3.8構(gòu)件圖

一個(gè)可執(zhí)行的程序文件,是鏈接所有二進(jìn)制構(gòu)件所得到的結(jié)果。源構(gòu)件可執(zhí)行構(gòu)件二進(jìn)制構(gòu)件實(shí)現(xiàn)類的源代碼文件

一個(gè)對(duì)象代碼文件、一個(gè)靜態(tài)庫(kù)文件或一個(gè)動(dòng)態(tài)庫(kù)文件。構(gòu)件圖描述軟件構(gòu)件之間的相互依賴關(guān)系。6.3UML圖

6.3.8構(gòu)件圖構(gòu)件圖的圖示符號(hào)是左邊帶有兩個(gè)小矩形的大矩形。構(gòu)件的名稱寫在大矩形內(nèi)。構(gòu)件的依賴關(guān)系用一條帶箭頭的虛線表示。箭頭的形狀表示消息的類型。構(gòu)件的接口:從代表構(gòu)件的大矩形邊框畫出一條線,線的另一端為小空心圓,接口的名稱寫在空心圓附近。這里的接口可以是模塊之間的接口,也可以是軟件與設(shè)備之間的接口或人機(jī)交互界面。圖6-20表示某系統(tǒng)程序有外部接口,并調(diào)用數(shù)據(jù)庫(kù)。由于在調(diào)用數(shù)據(jù)庫(kù)時(shí),必須等數(shù)據(jù)庫(kù)中的信息返回后,程序才能進(jìn)行判斷、操作,因而是同步消息傳送。6.3UML圖

6.3.9部署圖部署圖(DeploymentDiagram)描述計(jì)算機(jī)系統(tǒng)硬件的物理拓?fù)浣Y(jié)構(gòu)及在此結(jié)構(gòu)上執(zhí)行的軟件。使用部署圖可以表示硬件設(shè)備的物理拓?fù)浣Y(jié)構(gòu)和通信路徑、硬件上運(yùn)行的軟件構(gòu)件、軟件構(gòu)件的邏輯單元等。部署圖常用于幫助人們理解分布式系統(tǒng)。部署圖含有以下要素:結(jié)點(diǎn)及其連接、構(gòu)件及其接口、對(duì)象。6.3UML圖

6.3.9部署圖結(jié)點(diǎn)(Node)是一種代表運(yùn)行時(shí)計(jì)算資源的分類器。一般來(lái)說(shuō),結(jié)點(diǎn)至少要具備內(nèi)存,而且常常具有處理能力。運(yùn)行時(shí)對(duì)象和構(gòu)件可駐留在結(jié)點(diǎn)上。結(jié)點(diǎn)可代表一個(gè)物理設(shè)備以及在該設(shè)備上運(yùn)行的軟件系統(tǒng)。例如,一個(gè)服務(wù)器、一臺(tái)計(jì)算機(jī)、一臺(tái)打印機(jī)、一臺(tái)傳真機(jī)等。結(jié)點(diǎn)用一個(gè)立方體表示,結(jié)點(diǎn)名放在立方體的左上角。結(jié)點(diǎn)間的連線表示系統(tǒng)之間進(jìn)行交互的通信線路,在UML中稱為連接。通信的類型寫在表示連接的線旁,以指定所用的通信協(xié)議或網(wǎng)絡(luò)類型。結(jié)點(diǎn)的連接是關(guān)聯(lián),可以加約束、版型、多重性等符號(hào)。結(jié)點(diǎn)和連接016.3UML圖

6.3.9部署圖部署圖中的構(gòu)件代表可執(zhí)行的物理代碼模塊(可執(zhí)行構(gòu)件的實(shí)例),在邏輯上可以和類圖中的包或類對(duì)應(yīng)。因此,部署圖顯示了運(yùn)行時(shí)各個(gè)包或類在結(jié)點(diǎn)中的分布情況。在面向?qū)ο蠓椒ㄖ?,類和?gòu)件的操作及屬性對(duì)外并不都是可見(jiàn)的,類和構(gòu)件等元素對(duì)外提供的可見(jiàn)操作和屬性稱為接口。接口用一端是小圓圈的直線來(lái)表示。構(gòu)件和接口026.3UML圖

6.3.9部署圖部署圖中的構(gòu)件是包或類對(duì)應(yīng)的物理代碼模塊,因此,構(gòu)件中應(yīng)包含一些運(yùn)行的對(duì)象。部署圖中的對(duì)象與對(duì)象圖中的對(duì)象的表示方法相同。對(duì)象036.3UML圖

案例用部署圖描述使用金龍卡飲食銷售系統(tǒng)。例6-5圖6-21是金龍卡飲食銷售系統(tǒng)的部署圖。在該系統(tǒng)中,有若干銷售端,每個(gè)銷售端有一個(gè)金龍卡接口和一個(gè)輸入銷售金額的界面。輸入銷售金額后,要將數(shù)據(jù)庫(kù)中該金龍卡原有的余額減去輸入的金額,再將得到的新余額存入數(shù)據(jù)庫(kù)中。后臺(tái)服務(wù)器有系統(tǒng)程序和數(shù)據(jù)庫(kù),系統(tǒng)程序用來(lái)對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行處理。收銀端有一個(gè)金龍卡接口和一個(gè)輸入金額的界面,這里輸入的金額要與數(shù)據(jù)庫(kù)中該金龍卡原有的余額相加,再將得到的新余額存入數(shù)據(jù)庫(kù)中。6.3UML圖

案例用部署圖描述使用金龍卡飲食銷售系統(tǒng)。例6-504UML的應(yīng)用UML模型UML視圖UML的擴(kuò)展機(jī)制UML的應(yīng)用領(lǐng)域UML使用準(zhǔn)則6.4UML的應(yīng)用

結(jié)構(gòu)化程序設(shè)計(jì)利用UML進(jìn)行軟件開發(fā)時(shí),在面向?qū)ο蠓治鲭A段和面向?qū)ο笤O(shè)計(jì)階段所使用的描述符號(hào)相同。因此,不需要嚴(yán)格區(qū)分這兩個(gè)階段的工作。UML是一種標(biāo)準(zhǔn)建模語(yǔ)言,用來(lái)建立模型,描述某些內(nèi)容,表示使用一個(gè)方法的結(jié)果;它缺少描述解決問(wèn)題的方法和執(zhí)行過(guò)程的機(jī)制,缺少對(duì)過(guò)程或方法做什么、怎么做、為什么做、什么時(shí)候做的指示。那么如何解決這些問(wèn)題6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)為了解決對(duì)過(guò)程的描述問(wèn)題,使用UML進(jìn)行面向?qū)ο箝_發(fā)時(shí),采用以用例驅(qū)動(dòng)、以體系結(jié)構(gòu)為中心的、反復(fù)迭代的、漸增式的構(gòu)造方法。首先選擇系統(tǒng)中某些用例,完成這些用例的開發(fā),再選擇一些未開發(fā)的用例進(jìn)行開發(fā),如此迭代、漸增地進(jìn)行,直至所有的用例都實(shí)現(xiàn)為止。每次迭代都包含了分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試和交付各個(gè)階段。但整個(gè)項(xiàng)目的迭代次數(shù)不宜過(guò)多,通常以3~5次為宜。UML使用UML面向?qū)ο蠓椒◤慕⒛P烷_始,畫出相應(yīng)的UML圖;再考慮不同的視圖補(bǔ)充所需要的圖;最后把這些圖合成為一個(gè)整體。這樣,就可比較全面地建立系統(tǒng)模型,合理正確地解決問(wèn)題、設(shè)計(jì)軟件。6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)6.4.1UML模型用例模型1423UML模型靜態(tài)模型動(dòng)態(tài)模型實(shí)現(xiàn)模型

這些模型由UML圖組成,開發(fā)者并不需要使用所有的圖,也不需要建立每種模型,應(yīng)只對(duì)關(guān)鍵事物建立模型,可根據(jù)軟件系統(tǒng)的實(shí)際需要選擇幾種圖和模型。6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)6.4.1UML模型

用例模型從用戶的角度描述系統(tǒng)需求,是所有開發(fā)活動(dòng)的指南。它包括一張或多張用例圖。用例模型定義了系統(tǒng)的用例、執(zhí)行者(角色Actor)及角色與用例之間的關(guān)聯(lián)(Association),即交互行為。

在迭代漸增式開發(fā)軟件時(shí),每次迭代都是在前一次迭代的基礎(chǔ)上增加另一些用例,對(duì)每次軟件集成的結(jié)果,都應(yīng)進(jìn)行系統(tǒng)測(cè)試,并向用戶演示,表明用例已正確實(shí)現(xiàn)。所有的測(cè)試用例都應(yīng)保存,以便在以后的迭代中進(jìn)行回歸測(cè)試。1用例模型6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)6.4.1UML模型01將用例按優(yōu)先級(jí)分類:優(yōu)先級(jí)高的、必須首先實(shí)現(xiàn)的功能,最先開發(fā)。03

對(duì)用例所需的工作量進(jìn)行估算,合理安排工作計(jì)劃。有些在進(jìn)度方面風(fēng)險(xiǎn)大的、無(wú)法估算工作量的用例,不能放到最后再開發(fā),以免因它的實(shí)際工作量太大,而影響整個(gè)工程的進(jìn)度。02

區(qū)分用例在體系結(jié)構(gòu)方面的風(fēng)險(xiǎn)大?。喝绻硞€(gè)用例暫時(shí)不實(shí)現(xiàn)會(huì)導(dǎo)致以后的迭代漸增開發(fā)時(shí)有大量的改寫工作,這樣的用例需要先開發(fā)。

由于用UML開發(fā)軟件,是對(duì)用例進(jìn)行迭代、漸增式地構(gòu)造的過(guò)程。因此,要對(duì)用例進(jìn)行分析,搞清究竟哪些用例必須先開發(fā),哪些用例可以晚一點(diǎn)開發(fā),正確制訂開發(fā)計(jì)劃。具體步驟如下:6.4UML的應(yīng)用6.4.1UML模型

任何建模語(yǔ)言都以靜態(tài)模型作為建模的基礎(chǔ),UML也不例外。靜態(tài)模型描述系統(tǒng)的元素及元素間的關(guān)系。它定義了類、對(duì)象和它們之間的關(guān)系及組件模型。

UML對(duì)可重用性的支持,在設(shè)計(jì)的前期體現(xiàn)在支持可重復(fù)使用的類和結(jié)構(gòu),后期則體現(xiàn)在組件的裝配上。組件是組成應(yīng)用程序的可執(zhí)行單元,類被分配到各組件中,以提供可重復(fù)使用的應(yīng)用程序結(jié)構(gòu)部件。組件為即插即用的應(yīng)用程序結(jié)構(gòu)奠定了基礎(chǔ)。2靜態(tài)模型

靜態(tài)模型主要描述類、接口、用例、協(xié)作、組件、結(jié)點(diǎn)等體現(xiàn)系統(tǒng)結(jié)構(gòu)的事物。靜態(tài)模型使用的圖,包括用例圖、類圖、包圖、對(duì)象圖、構(gòu)件圖和部署圖等。

有時(shí)軟件系統(tǒng)并不大,可以只建立對(duì)象模型,描述系統(tǒng)所包含的所有對(duì)象及其相互關(guān)系,而靜態(tài)模型中的其他圖可以省略。6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)6.4.1UML模型

消息交互:對(duì)象之間為達(dá)到特定目的而進(jìn)行的一系列消息交換,從而組成一系列動(dòng)作,通過(guò)消息通信相互協(xié)作等,可用順序圖、活動(dòng)圖、協(xié)作圖等描述。

狀態(tài)機(jī):狀態(tài)機(jī)由對(duì)象的一系列狀態(tài)和激發(fā)這些狀態(tài)轉(zhuǎn)換的事件組成,用狀態(tài)圖描述。動(dòng)態(tài)模型描述系統(tǒng)隨時(shí)間的推移而發(fā)生的行為。動(dòng)態(tài)模型可以使用的UML圖有狀態(tài)圖、順序圖、活動(dòng)圖、協(xié)作圖等。動(dòng)態(tài)模型主要描述兩種動(dòng)作:消息交互和狀態(tài)機(jī)。3動(dòng)態(tài)模型6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)6.4.1UML模型實(shí)現(xiàn)模型包括構(gòu)件圖和部署圖,它們描述了系統(tǒng)實(shí)現(xiàn)時(shí)的一些特性。構(gòu)件圖顯示代碼本身的邏輯結(jié)構(gòu)。構(gòu)件圖描述系統(tǒng)中的軟構(gòu)件以及它們之間的相互依賴關(guān)系,構(gòu)件圖的元素有構(gòu)件、依賴關(guān)系和接口。部署圖顯示系統(tǒng)運(yùn)行時(shí)的結(jié)構(gòu)。部署圖顯示系統(tǒng)硬件的拓?fù)浣Y(jié)構(gòu)和通信路徑、系統(tǒng)結(jié)構(gòu)結(jié)點(diǎn)上執(zhí)行的軟件構(gòu)件所包含的邏輯單元等。4實(shí)現(xiàn)模型6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)6.4.2UML視圖

視圖(View)是模型的簡(jiǎn)化說(shuō)明,即采取特定的角度或觀點(diǎn)并忽略與相應(yīng)角度或觀點(diǎn)無(wú)關(guān)的實(shí)體來(lái)表達(dá)系統(tǒng)的某一方面特征。一個(gè)系統(tǒng)往往可以從不同的角度進(jìn)行觀察。從一個(gè)角度觀察到的系統(tǒng),構(gòu)成系統(tǒng)的一個(gè)視圖,每個(gè)視圖是整個(gè)系統(tǒng)描述的一個(gè)投影,說(shuō)明了系統(tǒng)的一個(gè)特殊側(cè)面。若干不同的視圖可以完整地描述所建造的系統(tǒng)。每種視圖是由若干幅UML圖組成的,每一幅圖包含了系統(tǒng)某一方面的信息,闡明了系統(tǒng)的一個(gè)特定部分或方面。由于不同視圖之間存在一些交叉,因此一幅圖可以作為多個(gè)視圖的一部分。

在UML中,視圖可劃分成9類,分別屬于3個(gè)層次。最上層,視圖被分成3個(gè)視圖域:結(jié)構(gòu)分類、動(dòng)態(tài)行為和模型管理;每個(gè)視圖域的第二層包括一些視圖;第三層由UML圖組成。6.4UML的應(yīng)用

結(jié)構(gòu)化程序設(shè)計(jì)6.4.2UML視圖用例視圖實(shí)現(xiàn)視圖靜態(tài)視圖結(jié)構(gòu)分類用例視圖

由用例圖組成,主要概念為用例、執(zhí)行者、關(guān)聯(lián)、擴(kuò)展、包括用例繼承。靜態(tài)視圖由類圖組成,主要概念為類、關(guān)聯(lián)、繼承、依賴關(guān)系、實(shí)現(xiàn)、接口。

實(shí)現(xiàn)視圖由構(gòu)件圖組成,主要概念為構(gòu)件、接口、依賴關(guān)系和實(shí)現(xiàn)。

結(jié)構(gòu)分類描述系統(tǒng)中的結(jié)構(gòu)成員及其相互關(guān)系。結(jié)構(gòu)分類包括靜態(tài)視圖、用例視圖和實(shí)現(xiàn)視圖。6.4UML的應(yīng)用

結(jié)構(gòu)化程序設(shè)計(jì)6.4.2UML視圖

動(dòng)態(tài)行為描述系統(tǒng)隨時(shí)間推移而發(fā)生的行為。動(dòng)態(tài)行為視圖包括部署視圖、狀態(tài)視圖、活動(dòng)視圖和交互視圖(由順序圖、協(xié)作圖構(gòu)成)。動(dòng)態(tài)行為部署視圖狀態(tài)視圖活動(dòng)視圖交互視圖由部署圖組成,主要概念為結(jié)點(diǎn)、構(gòu)件、依賴關(guān)系、位置。由狀態(tài)圖組成,主要概念為狀態(tài)、事件、轉(zhuǎn)換、動(dòng)作。由活動(dòng)圖組成,主要概念為狀態(tài)、活動(dòng)、轉(zhuǎn)換、分叉、結(jié)合。由順序圖、協(xié)作圖構(gòu)成,主要概念為交互、對(duì)象、消息、激活、協(xié)作、角色。6.4UML的應(yīng)用

結(jié)構(gòu)化程序設(shè)計(jì)6.4.2UML視圖

模型管理說(shuō)明了模型的分層組織結(jié)構(gòu)。模型管理視圖根據(jù)系統(tǒng)開發(fā)和部署組織視圖,主要概念為包、子系統(tǒng)、模型。6.4UML的應(yīng)用

結(jié)構(gòu)化程序設(shè)計(jì)6.4.2UML視圖視圖域視圖圖主要概念結(jié)構(gòu)分類靜態(tài)視圖類圖類、關(guān)聯(lián)、泛化、依賴關(guān)系、實(shí)現(xiàn)、接口用例視圖用例圖用例、執(zhí)行者、關(guān)聯(lián)、擴(kuò)展、包含、用例繼承實(shí)現(xiàn)視圖構(gòu)件圖構(gòu)件、接口、依賴關(guān)系、實(shí)現(xiàn)動(dòng)態(tài)行為部署視圖部署圖結(jié)點(diǎn)、構(gòu)件、依賴關(guān)系、位置。狀態(tài)視圖狀態(tài)圖狀態(tài)、事件、轉(zhuǎn)換、動(dòng)作活動(dòng)視圖活動(dòng)圖狀態(tài)、活動(dòng)、轉(zhuǎn)換、分叉、連接交互視圖順序圖交互、對(duì)象、消息、激活協(xié)作圖協(xié)作、交互、角色、消息模型管理模型管理視圖類圖包、子系統(tǒng)、模型。可擴(kuò)展性所有所有約束、版型、標(biāo)簽值

UML所有的視圖和所有的圖都具有可擴(kuò)展性,擴(kuò)展機(jī)制是用約束、版型、標(biāo)簽值來(lái)實(shí)現(xiàn)的。下表列出了UML的視圖、圖以及與圖有關(guān)的主要概念。6.4UML的應(yīng)用

結(jié)構(gòu)化程序設(shè)計(jì)6.4.2UML視圖用例視圖用例視圖展示了外部執(zhí)行者所觀察到的系統(tǒng)功能。用例視圖為客戶、分析員、設(shè)計(jì)者、編程者和測(cè)試者描述了系統(tǒng)的使用方法。用例視圖是中心,它的內(nèi)容決定了其他視圖的開發(fā)。用戶根據(jù)用例視圖來(lái)確認(rèn)系統(tǒng)是否符合他的需求,開發(fā)者根據(jù)用例視圖設(shè)計(jì)、測(cè)試系統(tǒng)功能。用例視圖有助于用戶、系統(tǒng)分析員、開發(fā)人員和測(cè)試人員的交流。1邏輯視圖邏輯視圖表示系統(tǒng)中含有的類之間的邏輯關(guān)系,描述系統(tǒng)內(nèi)部是如何提供系統(tǒng)功能的。邏輯視圖是為分析者、設(shè)計(jì)者和編程者提供的。邏輯視圖用類圖和對(duì)象圖描述系統(tǒng)的靜態(tài)結(jié)構(gòu);用狀態(tài)圖、順序圖、協(xié)作圖和活動(dòng)圖描述系統(tǒng)的動(dòng)態(tài)行為。2下列5種UML視圖是較常用的,可用來(lái)觀察系統(tǒng)。6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)6.4.2UML視圖并發(fā)視圖并發(fā)視圖描述了系統(tǒng)的并發(fā)性。它將系統(tǒng)分割成并發(fā)執(zhí)行的控制線程,還處理這些線程的通信和同步。例如,哪些事情將會(huì)同時(shí)發(fā)生,哪些事情必須保持同步。建立并發(fā)視圖有助于系統(tǒng)開發(fā)者和系統(tǒng)集成者之間的交流。并發(fā)視圖用狀態(tài)圖、順序圖、協(xié)作圖、活動(dòng)圖、構(gòu)件圖和部署圖來(lái)描述。3構(gòu)件視圖構(gòu)件視圖展示了代碼構(gòu)件的組織結(jié)構(gòu),描述了模塊和模塊之間的依賴關(guān)系。構(gòu)件視圖是針對(duì)開發(fā)者的,用構(gòu)件圖來(lái)描述。46.4UML的應(yīng)用

結(jié)構(gòu)化程序設(shè)計(jì)6.4.2UML視圖部署視圖部署視圖展示系統(tǒng)部署。例如,計(jì)算機(jī)、設(shè)備以及相互間的連接,系統(tǒng)各部件的具體運(yùn)行地點(diǎn)。部署視圖是針對(duì)開發(fā)者、系統(tǒng)集成者和測(cè)試者的,它用部署圖來(lái)描述。5

例如,圖書館的“圖書目錄查詢”程序在讀者查詢機(jī)上運(yùn)行;“圖書流通”(借書、還書)程序在圖書流通部的計(jì)算機(jī)上運(yùn)行。顯然描述系統(tǒng)分析、設(shè)計(jì)的各個(gè)部分和各個(gè)方面的所有UML圖,都是描述同一個(gè)系統(tǒng)的,它們之間不能有矛盾??傊粋€(gè)系統(tǒng)可以有多種視圖,但視圖之間必須是一致的。同樣,系統(tǒng)可以有多種模型,模型之間也必須是一致的。UML有多種模型和多種圖,在實(shí)際的軟件開發(fā)過(guò)程中,開發(fā)者可以根據(jù)自己的需要選擇幾種來(lái)運(yùn)用。6.4UML的應(yīng)用結(jié)構(gòu)化程序設(shè)計(jì)6.4.3UML使用準(zhǔn)則020301

要集中精力圍繞問(wèn)題的核心來(lái)建立模型。最好只畫幾張關(guān)鍵的圖,

溫馨提示

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