華南理工大學UML-5類圖和對象圖_第1頁
華南理工大學UML-5類圖和對象圖_第2頁
華南理工大學UML-5類圖和對象圖_第3頁
華南理工大學UML-5類圖和對象圖_第4頁
華南理工大學UML-5類圖和對象圖_第5頁
已閱讀5頁,還剩62頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件需求分析與建模

-靜態圖:類圖、對象圖姓名:(

)2024年1月30日1靜態圖:類圖、對象圖類和對象的基本概念;三個層次的觀點;類圖和對象圖的基本要素;小結。I類和對象的基本概念引言;對象和類;類和對象的實例;類和對象的表示;三個層次的觀點。引言類圖技術是OO方法的核心技術,應用非常廣泛,其中類、對象以及它們之間的關系是最基本的建模元素。類模型和對象模型揭示了系統的結構。分類可以有效地使復雜問題簡化。建立類模型的過程,是把現實世界中與問題有關的各種對象及其相互關系進行抽象和分類的過程。對象和類對象是指某個事物,大多對應于真實世界中的某個客觀實體;但有些對象在真實世界中沒有直接的對應物,是人們對某個事物的一種抽象描述。所有的對象都是有唯一標識的獨立實體。對象之間的區別是由它們固有的存在性所決定的,而與它們的特征是否相同無關。對象的基本特征可以歸納為對象的屬性和行為兩類。類是指對一組具有相同特征的對象的抽象描述;任何對象都是某個類的實例。我們采用類的概念來研究系統的構成,劃分問題域中涉及到的各種對象。類之間的繼承關系是OO方法中的一個重要概念。類和對象的實例在一個信息系統中:客戶(Customer)、合同(Agreement)、發票(Invoice)、債務(Debt)、資產(Asset)、報價單(Quotation)在一個技術系統中:感應器(Sensor)、顯示器(Display)、輸入輸出卡(I/OCard)、按鍵(Button)在軟件系統中:文件(File)、執行程序(Executableprogram)、設備(Device)、圖標(Icon)、窗口(Window)、滾動條(Scrollbar)...在人類社會中:社團、俱樂部、大學、公司、商店、企業...例:客戶類的表示

類和對象的表示:類圖和對象圖類圖描述系統中的類及其相互之間的各種關系,反映了系統中包含的各種對象的類型以及對象間的各種靜態關系,主要是:關聯和子類型。類圖也可描述類的屬性和行為以及對模型中各種成分的約束。對象圖是類圖的實例,描述系統中各種對象(類的實例)以及對象之間的各種靜態關系。類圖(和對象圖)中各個區間的文法:獨立于實現時所使用的程序設計語言,也可以選用某種語言的文法規則,如C++,Java,…。類中的一個操作可以有多種不同的實現,每一個實現稱作一個方法。類和對象的表示(續)

:類圖和對象圖類名(ClassName)類名屬性(Attributes)類名屬性(Attributes)操作

(Operations)類的表示對象名(ObjectName)對象名屬性值(AValues)對象名屬性值(AValues)方法

(Methods)對象的表示三個層次的觀點畫類圖和理解類圖時都應采用三個層次的觀點。這些觀點也適用于其它模型。三個層次的觀點不是UML的組成部分,但對建造模型或評價模型都非常有用,且都可應用于UML。三個層次:概念層說明層實現層概念層描述應用域中的概念,是對現實世界的直接描述,與實現它們的類有關,但與實現方案和實現語言無關。說明層描述軟件的接口,而不是軟件的實現。一個類型描述一個接口,但可能有多種實現。實現層從實現的角度定義類及其實現,揭示了軟件實現體的構成情況。

II類圖和對象圖的基本要素關聯;屬性;操作;泛化;授權;約束規則。II.1

關聯一個典型的類圖;基本概念;角色及其命名;角色的多元性;三個層次中的關聯;導航特性。

一個典型的類圖多重性:限制性的1*0..1雇員銷售代表多重性:選擇關聯訂單客戶nameaddress泛化類團體客戶個人客戶多重性:多值產品1

項*角色名稱1訂單項關聯**個人客戶信用卡號數量:Integer價格:Money確認:Boolean定貨單收到日期預付款數量價格發貨()結束()客戶姓名地址信用等級():String集團客戶聯系人姓名信用等級信用限額余額()月帳單(Integer){信用等級()=="低"}定單欄目雇員產品*1***110..1采購員{if定貨單.客戶.信用等級=="低"then定貨單.預付款必須是"真"}欄目

關聯的表示關聯的表示:用一條無向線段表示,是一種雙向關系。例如客戶和訂單的關聯:從客戶看,訂單是他提交的;從訂單看,它有一個客戶。用一條有向線段表示,是一種單向關系關聯的命名:可以用動詞詞組或名詞命名。但只要這個關聯的含義明確,則可省略這個名字。角色及其命名關聯的兩端與類之間(或與類的實例之間)的接口表示該類(或該類的實體)在這個關聯中的行為,稱之為角色。每個關聯有兩個角色。例如,對于客戶和訂單之間的關聯是:客戶和訂單。可將引出角色的類稱作源,將引入角色的類稱作目標。例如,從訂單到客戶的角色的源是訂單,目標是客戶。為了明確對象在關聯中的角色,可以為角色命名。例如從訂單到訂單項方向上的角色可以命名為項。如果在關聯上沒有標出角色名,則隱含地用該角色的目標類的名稱作為它的名稱。例如,從訂單到客戶的角色應叫做客戶。角色的多元性角色可具有多元性(一個角色可以有多個對象來扮演)。例如,每個客戶對象可以有零或多個訂單對象。多元性的表示。1表示1..1;*代表零到無窮;0..1是選擇符,表示沒有或僅有1個;一個數;一個范圍;數字和范圍不連續的組合。

*

B

A表示A和零個、一個或多個B關聯。0..1

B

A表示A和零個或一個B關聯1..*

A

A表示A和一個或多個B關聯1

B

A表示A和一個B關聯(1)關聯的名稱(2)端點(3)多重性(4)有序(5)多元關聯三個層面中,關聯性意味著什么?概念層:在應用域中兩類對象之間存在的某種關系說明層:表示一種職責(Responsibility),一方向另一方請求或發送某種消息或服務,但并不涉及實現這種服務的具體方法(methods)例,定單的一個職責是記住和報告它的所有者是誰實現層:意味著(用指針來)建立某種關聯性。實現層中的關聯(續)對雙向關聯:相關聯的兩個類中都有指向對方的指針。例如,訂單有一個指針集指向訂單項,有一個指針指向客戶。ClassOrder{privateCustomer_customer;privateVector_orderLines;...}ClassCustomer{privateVector_orders;...}導航特性1導航訂單*收到日期預付款數量價格發貨()結束()客戶姓名地址信用等級():String產品1*1

項*訂單項數量:Integer價格:Money確認:Boolean導航特性(續)箭頭表示導航特性。如果只在一個方向上有導航表示,稱作單向關聯。如果在兩個方向上都有導航表示,稱作雙向關聯。如果不帶箭頭,表示未知或尚未確定。單向關聯時,說明模型中的訂單指出它是由哪個客戶發出的;實現模型中的訂單包含一個指向客戶的指針。對雙向關聯的限制是兩個角色必須互逆。II.2

屬性在三個層面中的屬性;屬性的語法;補充說明。在三個層面中的屬性在概念層,描述類具有的一些屬性(客戶對象的名字屬性表示客戶有名字)。在說明層,規定類對象屬性的值并給出設定這些值的方法(表示客戶對象的名字并有一些設置名字的方法)。在實現層,設置一個物理存儲區來保存屬性的值(也可稱做一個實例變量或一個數據成員)。屬性的語法UML規定其語法為:可見性名稱[多重性]:類型=缺省值{約束特性}可見性:表示該屬性對類外的元素是否可見。常用的有公有、受保護和私有三種。名稱:屬性的名稱,是一個字符串。多重性:任選項,用多值表達式表示,表達格式為“低值..高值。(低值、高值、0..*、1..1)類型:定義屬性的種類(基本數據類型或用戶自定義的類型)。缺省值:屬性的初始值。約束特性:描述對屬性的約束。補充說明客戶屬性的名稱可以定義為一個單獨的類:定義名字的屬性及其相關的操作;然后在客戶類和該屬性名稱類之間建立關聯。對于任何一個對象,其每個屬性都具有一個確定的值。而且,一般來講,屬性總是單值的。目前只須將屬性看成是一個小而簡單的類,諸如字符串、日期、資金對象以及非對象的值(例如整型和實型)。類的派生屬性人姓名年齡人姓名生日/年齡{年齡=今天-生日}personName:Char*BirthDay:Date-age:IntegerAge():IntegerII.3

操作在三個層面中的操作;操作的語法;補充說明。在三個層面中的操作

在概念層,操作不是定義類的接口,而是指出類的主要職責,描述類的動態行為。在說明層,主要給出重要的公有操作;然而有可能需要指明哪些屬性是只讀的或是不可修改的。在實現層,給出操作的不同實現方法,有可能會顯示一些私有的和受保護的操作。操作是施于對象的過程調用,而方法是過程體,是操作的一個具體實現。操作的語法可見性名稱(參數表):返回類型表達式{約束特性}可見性:“+”表示公有操作,“#”表示受保護的操作,“-”表示私有操作。名稱:操作的名稱,是一個字符串。參數表:其語法與屬性的參數相同,參數個數是任意的。返回類型表達式(可選項):依賴于語言的描述。約束特性:用以描述對此操作的約束。補充說明兩類操作:不改變類(對象)的可見狀態的查詢操作;例如,查詢操作僅從類中取值,但不改變其可見狀態。改變類(對象)的可見狀態的操作稱為修改操作。查詢操作可以按任意的順序執行,但修改操作的順序是重要的,如果不按照預定的順序執行修改操作,有可能得到不同的結果。為了保證這兩類操作相互獨立,應避免從修改操作中返回值。XIV可見性+(Public):公有成員在程序的任何位置都是可見的,系統中的任何對象都可以使用它。-(Private):私有成員僅可以由定義它的類使用。#(Protected):受保護的成員僅可以由定義它的類和該類的子類中的對象使用。

對“Public”、“Private”和“Protected”等三個可見性標識符的含義,各種語言都有它自己的規定。UML的定義是:操作(Operations)與方法(methods)操作(Operations):界面可見性名稱(參數表):返回類型表達式{約束特性}例:+Age(DateToday):Integer方法(methods):操作的一個具體的實現classPerson{ StringName; DateBirthday;

publicIntegerAge(DateToday){return(Year(Today)-Year(this.Birthday));}}II.4

泛化泛化的定義;在三個層面中的泛化;繼承與泛化。泛化的定義泛化關系(繼承關系)定義類和包之間的一般元素和特殊元素之間的分類關系。例如,個人客戶和團體客戶都是客戶,可以把他們的相似之處放到客戶類(超類型)中,用個人客戶和團體客戶作為它的子類型。客戶nameaddress泛化超類型團體客戶個人客戶超類型例如,前面會議管理系統中存在以下的泛化關系。在三個層面中的泛化在概念層,如果團體客戶的所有實例都是客戶的實例,那么團體客戶類型是客戶類型的一個子類型。在說明層,泛化意味著子類型的接口必須包括超類型的接口中的每個元素,即兩者必須保持一致。在實現層,子類繼承超類的所有屬性和方法,并可覆蓋繼承來的方法。例如,凡適用于客戶的代碼,只要將將客戶替換成團體客戶,都適用于團體客戶。泛化(Generalization)泛化(Generalization):抽象化特化(Specialization):實例化繼承(Inheritance):泛化關系的一種實現機制并非所有的泛化關系都適合用繼承關系實現繼承與泛化繼承是實現泛化的一種機制。在這種機制中,超類的任何一個子類都須具有其超類的所有行為:不僅要求其操作界面在文法上一致,而且要求其行為在語義上一致。當子類中的一個操作重載其超類中相應的操作時,必須確保它提供與超類中的操作相同的服務(內容可以更多或更具體)。如沒有證明子類的行為是否與父類相同,就試圖用繼承來實現新類中的行為,當兩者不一致時,會導致難以預測的錯誤。靜態方法和數據類的靜態方法不僅可以用于整個類的本身,而且還可用于該類的對象中,而類靜態數據只能在多個對象之間實現共享,不能被復制。C++中類靜態方法和數據是依靠關鍵字static來說明的,類的靜態數據還必須在聲明進行初始化,否則就會出錯。Java使用與C++相同的關鍵字static來定義靜態方法和數據的。由于全局函數的存在,使得靜態方法變得非常常用。靜態數據能直接在類的聲明中直接初始化。聚合和組合(1)聚合聚合也是表示類和類之間的“整體-部分”關系,用空心菱形表示。(2)組合組合是聚合的一種特殊情形,用實心菱形表示。II.5

授權利用繼承實現棧;授權的定義;利用隊列實現棧。利用繼承實現棧棧是隊列的特例,其元素的加入和刪除只能在棧頂進行。棧和隊列之間存在泛化關系。但若采用繼承機制來實現這種泛化關系,則存在兩個問題:如重載隊列類中的插入和刪除操作,則名稱與習慣用法不一致;如增加push和pop操作,則子類Stack繼承了超類List中的操作add和remove,這可能破壞棧的結構。如子類Stack繼承超類List中的first和last操作,同樣可能破壞棧的結構。授權的定義授權:把原來屬于類A的部分責任或任務轉交給(授權)類B來完成。這時,類B應看作是類A的不可分割的一個組成部分。目前常用的OOPL(如C++或Java)所提供的繼承機制,難以直接實現多元繼承和動態繼承等泛化關系,而授權技術是一種非常有效的實現技術。

利用隊列實現棧不推薦addremovefirstlastListStackpushpop推薦-Body:ListStackPushpopaddremovefirstlastListII.6

約束規則約束規則的語法;約束規則實例。約束規則的語法在畫類圖的過程中,關聯、屬性和操作等基本要素都要為模型加注約束條件。約束規則的語法:將約束條件放在括號{}中,用自然語言或其他常見的設計語言來描述,其描述要簡潔準確。在理想的情況下,在所使用的程序設計語言中,規則應該作為斷言來實現,并在調試代碼時調用它。約束規則實例{if

定貨單、客戶、信用等級==“低”

then

定貨單、預付款必須是“真”}1*

項訂單項數量:Integer價格:Money確認:Boolean訂單收到日期預付款數量價格發貨()結束()使用類圖的幾點建議1.在項目初始階段,不要使用所有的符號,應從簡單的概念開始。2.不同的開發階段應用不同的觀點畫類圖:分析階段用概念層類圖;設計階段用說明層類圖;實現階段用實現層類圖。3.不要為每個事物都畫一個模型,應把精力放在關鍵的領域,畫幾張較為關鍵的圖,經常使用,不斷更新。4.使用類圖的最大危險是過早地陷入實現的細節,應將重點放在概念層和說明層。類圖和對象圖小結1.類和對象的表示法(1)名稱;(2)屬性;(3)行為;2.類之間的各種關系(1)繼承:子類繼承了超類的所有屬性和行為;(2)關聯:兩個不同類之間關聯,可以單向或雙向;(3)聚合:強關聯關系,整體與部分的生命周期分開;

(4)組合:強聚合,整體與部分的生命周期相同;3.三個概念層次(1)概念層;(2)說明層;(3)實現層類圖的建模分析步驟 (1)尋找出需求中的名詞(候選對象)。(2)合并含義相同的名詞,排除范圍以外的名詞,并尋找隱含的名詞。(3)去掉只能作為類屬性的名詞。(4)剩下的名詞就是要找的分析類(候選類)。(5)根據常識、問題域、系統責任確定該類有那些屬性。(6)補充該類動態屬性,如狀態、對象間聯系(如聚合、關聯)等屬性。(7)從需求中的動詞、功能或系統責任中尋找類的操作(候選操作)。(8)從狀態轉換,流程跟蹤、系統管理等方面補充類的操作。(9)對所尋找的操作進行合并、篩選。(10)對所尋找的操作在類間進行合理分配(職責分配),形成每個類候選操作。(11)補充每個類的的分析文檔,為類的進一步設計打下基礎。會議管理系統類圖中的分析過程-(1)主要分析類 (1)主要分析類每一系統都有一個或幾個主要分析類,并且有一些其他類圍繞在這個類的周圍,輔助主要分析類完成它的生命周期。例如,對于會議管理子系統來講,顯然會議是主要的分析類,主要分析類是在需求采集階段就要確定的類,在畫類圖時只畫主要分析類呢?當然不是,一個孤零零的類什么作用都沒有,只有類和類之間發生關系才能形成業務,所以第一步是要找到其他的支持類,從哪兒找呢?回答原始需求文檔。(2)輔助類 首先我們從原始需求文檔中找到名詞和隱含的名詞,在軟件開發以后,這些名詞可以演化為類或類的屬性,對于會議管理系統來講,前半部分文檔所包含的名詞有:會議、行政管理、手段、會議類別、會議室、會議申請、會議通知、會議紀要、基礎、信息、會議性質名稱、備注、會議室名稱、容納人數、會議室資源、說明、使用情況、會議申請人、會議安排、會議性質、會議議題、預算、會議附件、主持人、記錄人員、參加人員、會議地點、會議室、會議開始時間、會議結束時間、會議內容、審批人。其次要合并含義相同的名詞,如把備注和說明合并為說明、把會議性質和會議性質名稱

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論