系統(tǒng)分析-類與類圖.ppt_第1頁
系統(tǒng)分析-類與類圖.ppt_第2頁
系統(tǒng)分析-類與類圖.ppt_第3頁
系統(tǒng)分析-類與類圖.ppt_第4頁
系統(tǒng)分析-類與類圖.ppt_第5頁
已閱讀5頁,還剩93頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2020/8/3,1,第4講 類與類圖,2020/8/3,2,內(nèi)容提要,類的定義 類的表示:三部分 類的關(guān)系:依賴、泛化、關(guān)聯(lián) 特殊類:接口,抽象類,參數(shù)化類 建模指南 對象圖:“快照”,1. 類的概念,2020/8/3,4,1.1 類的定義/1,用例圖定義了系統(tǒng)應(yīng)該具備的功能,它描述了系統(tǒng)應(yīng)該為用戶解決的問題。 交互圖描述了此問題的解決方案,它定義了為解決此問題軟件系統(tǒng)中必須設(shè)置的軟件對象及其職責(zé), 這些對象及其職責(zé)或語義,是解決方案的概念或系統(tǒng)詞匯(vocabulary)。 類描述了一組對象的公共的結(jié)構(gòu)和行為, 類為對象規(guī)定了它們的結(jié)構(gòu)和所能提供的服務(wù)(操作), 相當(dāng)于為對象圖中規(guī)定的系統(tǒng)

2、詞匯提供了嚴(yán)格的定義,包括系統(tǒng)詞匯的: 靜態(tài)結(jié)構(gòu) 動態(tài)行為 類構(gòu)成了系統(tǒng)建造的基礎(chǔ),2020/8/3,5,1.1 類的定義/2,類的靜態(tài)結(jié)構(gòu),在UML里用屬性(attribute)描述 類的動態(tài)行為,由操作(operation)描述 交互是用例圖提出的問題的解決方案,交互由對象和它們之間的消息的傳遞構(gòu)成 在交互中,對象為與它相連接的其它對象提供服務(wù),對象本身會有狀態(tài)的保持和轉(zhuǎn)換 在一個(gè)系統(tǒng)中,具有相同的結(jié)構(gòu)和提供相同的服務(wù)的對象可能不止一個(gè),它們可以參與在不同的交互中,提供類似的服務(wù) 類是解決用例視圖定義的問題的解決方案中必須具備的對象的抽象,2020/8/3,6,1.1 類的定義/3,一個(gè)類

3、描述了一組對象的公共的結(jié)構(gòu)和行為 類是真實(shí)世界的事物的抽象 當(dāng)這些事物存在于真實(shí)世界中時(shí),它們是類的實(shí)例,并被稱為對象 同一個(gè)類的各對象具有相同的屬性,提供相同的操作,具有相同的語義,2020/8/3,7,1.2 類的表示,類的圖形表示: 它是分為三個(gè)分隔區(qū)(compartment)的長方形。其中: 頂端的分隔區(qū)為類的名字,下面兩個(gè)分隔區(qū)為可省略的,分別可以列出類的屬性和操作,2020/8/3,8,2020/8/3,9,1.3 類的命名,類的名字是每個(gè)類所必有的構(gòu)成,用于和其它類相區(qū)分 類的名字可分為 簡單名字:簡單名字是一個(gè)不包含冒號的字串 復(fù)雜名字(路徑名字):路徑名是簡單名字前面加上一個(gè)

4、包含此類的所在的模型包的名字,這兩個(gè)名字之間用兩冒號隔開,Temperature Sensor,Wall,Business Rules:FraudAgent,java:awt:Rectsngle,簡單名字,路徑名字,2. 屬性,2020/8/3,11,2.1 屬性的概念/1,類不是孤立存在的,它的對象將參與一個(gè)或多個(gè)交互 類捕獲了系統(tǒng)實(shí)現(xiàn)方案中的概念或詞匯,使得類代表某一類特定事物,具備特定的語義 類的語義是對此對象代表的事物的性質(zhì)的描繪,通過對事物性質(zhì)的描繪,可以記錄對象在交互過程中狀態(tài)的變換,并可進(jìn)一步?jīng)Q定對象在此狀態(tài)下的行為 例如:在基于窗口操作的操作系統(tǒng)中,處理窗口的對象描述窗口的尺寸

5、、位置,類型等性質(zhì),窗口的性質(zhì)的不同取值又可以決定系統(tǒng)對鼠標(biāo)操作的不同響應(yīng)方式。,2020/8/3,12,2.1 屬性的概念/2,類的屬性,它是類的一個(gè)組成部分,描述了類在軟件系統(tǒng)中代表的事物所具備的特征 屬性的定義 在UML里,屬性是類的一個(gè)具名的構(gòu)成(named property),它描述了此構(gòu)成在類的實(shí)例中能具備的取值范圍 根據(jù)定義: 類的屬性首先是類的一個(gè)組成部分; 其次,類每個(gè)屬性都必須有一個(gè)名字, 以區(qū)別于類的其它屬性。為了定義屬性的取值范圍,必須為屬性指定類型。例如: 布爾類型的屬性可以取兩個(gè)值:TRUE和FALSE; 字節(jié)型的屬性只能取256個(gè)值 當(dāng)一個(gè)類的屬性被完備地定義后,

6、它的任何一個(gè)對象的狀態(tài)都被這些屬性的特定取值所決定,2020/8/3,13,2.2 屬性的表示/1,屬性的圖形表示: 類的屬性被列在其中的第二個(gè)分隔區(qū)中 屬性分隔區(qū)是可省略的 當(dāng)屬性分隔區(qū)未被省略時(shí): 屬性的名字必須出現(xiàn) 屬性的名字后面是它的類型 類型和名字之間用冒號(:)分隔,2020/8/3,14,2.3 屬性的初始值,屬性的初始值: 當(dāng)類的一個(gè)對象被創(chuàng)建,它的各個(gè)屬性就開始有特定的狀態(tài)。有時(shí),對象的初始狀態(tài)對此對象參與的交互是有意義的。這時(shí),有必要在對象的類中定義其對象的屬性的初始值 初始值的圖形表示 類的屬性的初始值在屬性的類型的后面指定 初始值和類型之間用等號(=)分隔 屬性的初始值

7、是可選的 當(dāng)未為屬性指定初始值時(shí),屬性的初值是不確定的,2020/8/3,15,2.4 可省略的描述,除了屬性的名字之外,屬性的其它描述都是可省略的,包括: 類型、初值、可見性,3. 操作,2020/8/3,17,3.1 操作的概念/1,對象在交互中,存在著消息的交換 消息是一個(gè)對象向另一個(gè)對象發(fā)送請求其提供服務(wù)的指令 一個(gè)對象接收的各個(gè)不同的消息,構(gòu)成了此對象的類能提供的服務(wù)的集合。 類的操作就是對這些服務(wù)的具體規(guī)定,包括 接收服務(wù)請求的格式 以及類對合法請求所能提供的有效的服務(wù)的承諾 如果把操作映射到C+語言,則操作就是C+的類的成員函數(shù),2020/8/3,18,3.1 操作的概念/2,操

8、作的定義: 操作是一個(gè)類所能提供的服務(wù)的實(shí)現(xiàn),此服務(wù)能被請求,以改變提供服務(wù)的類的對象的狀態(tài)或?yàn)榉?wù)的請求者返回一個(gè)值 一個(gè)類的操作被定義后,它的任何一個(gè)對象都能提供此操作所定義的服務(wù) 操作 必須有一個(gè)名字 可以有參數(shù)表 可以有返回值,2020/8/3,19,3.2 操作的表示,按照操作的定義,類的操作所提供的服務(wù)可以分為兩類 一類是操作的結(jié)果引起了對象狀態(tài)的改變,狀態(tài)的改變也包括相應(yīng)的動態(tài)行為的發(fā)生 另一類是為服務(wù)的請求者提供返回值 例如:執(zhí)行特定的計(jì)算,并把結(jié)果返回給請求者 操作的圖形表示: 操作被列在屬性最下部的分隔區(qū)里 操作分隔區(qū)是可隱藏的 如果操作分隔區(qū)未被隱藏,則操作的名字必須列出

9、,名字后面必須有一對括弧以表示此名字是操作的名字,2020/8/3,20,2020/8/3,21,3.3 操作署名/1,操作署名(operation signature) 在交互中,操作是通過消息啟動的,為了使操作對應(yīng)的服務(wù)被有效地提供,操作的請求者必須提供合法的啟動消息,包括: 合法的操作參數(shù) 對操作的返回值(如果有的話)的正確解釋 消息的合法性在UML中,通過操作署名(operation signature)規(guī)定定義: 操作署名是操作的參數(shù)的名字、參數(shù)類型、參數(shù)缺省值以及操作的返回值的類型的集合,2020/8/3,22,3.3 操作署名/2,操作署名的圖形表示: 在類的圖符上,操作署名是可

10、隱藏的 如果不隱藏,則參數(shù)表出現(xiàn)在操作名后面的括弧內(nèi) 參數(shù)表內(nèi)的各參數(shù)之間用逗號分隔,參數(shù)包括名字、類型和缺省值 在每個(gè)參數(shù)名字后面跟著的是參數(shù)的類型,它們之間用冒號分隔,類型后面是可選的參數(shù)缺省值,它和類型之間用等號(=)分隔 如果一個(gè)參數(shù)被指定了缺省值,就意味著此操作被調(diào)用時(shí),可以不指定此參數(shù)的值,這時(shí)操作認(rèn)為調(diào)用者使用缺省值作為此參數(shù)的值。 操作的返回值類型出現(xiàn)在此括弧之后,返回類型和括弧之間之間用冒號分隔。,4. 類的表示方法,2020/8/3,24,4.1 類的說明,S,t,e,r,e,o,T,y,p,e,W,I,N,D,O,W,作,者,=,王,剛,狀,態(tài),=,測,試,可,訪,問,性

11、,名,稱,:,類,型,=,缺,省,值,(,+,#,-,),可,訪,問,性,函,數(shù),名,(,變,量,表,),:,返,回,類,型,(,+,#,-,),變,量,表,變,量,名,:,類,型,=,缺,省,值,2020/8/3,25,2020/8/3,26,4.2 屬性和操作的表達(dá)/1,類的構(gòu)成有可能很復(fù)雜,將產(chǎn)生很長的屬性列表和操作列表,沒有必要在模型圖上把所有的屬性和操作都繪制在模型圖上。這是因?yàn)椋?一方面,這樣會使UML圖過于繁雜 另一方面,出于表達(dá)特定問題的需要,不需要將與問題無關(guān)屬性和操作與重要的屬性和操作同時(shí)繪制在模型圖上 這時(shí),可以應(yīng)用UML的隱藏原則,在UML模型圖上把對表達(dá)問題不重要的屬

12、性或操作隱藏 因此,如果發(fā)現(xiàn)模型圖上某個(gè)類的屬性分隔區(qū)或操作缺失或分隔區(qū)內(nèi)沒有內(nèi)容,不表示此類沒有屬性或操作,有可能它們是被省略了。,2020/8/3,27,4.2 屬性和操作的表達(dá)/2,類的隱藏表示,可以采取4種方式: 隱藏分隔區(qū) 有選擇地隱藏屬性/操作 隱藏操作署名 隱藏屬性/操作的變體 如果一個(gè)類的所有操作和屬性可以根據(jù)它們的語義分為若干組,可以在操作或?qū)傩郧懊鏋樗鼈冎付ㄗ凅w標(biāo)記,使得同一分組的操作或?qū)傩詭в型瑯拥淖凅w標(biāo)記,2020/8/3,28,5. 類的建模指南,2020/8/3,30,5.1 類的設(shè)計(jì)的特點(diǎn),類的設(shè)計(jì)是軟件系統(tǒng)建造的第一步,它決定著 軟件系統(tǒng)結(jié)構(gòu)合理性 軟件部件的

13、可維護(hù)性 可重用性 可移植性 軟件系統(tǒng)的類的設(shè)置、職責(zé)的明確、類的屬性和操作的確定,其過程是: 用例驅(qū)動的 面向?qū)ο蟮?2020/8/3,31,5.2 類的職責(zé)/1,為了給軟件系統(tǒng)設(shè)置有效的實(shí)現(xiàn)類,應(yīng)當(dāng)從系統(tǒng)的用例圖出發(fā),得出系統(tǒng)為實(shí)現(xiàn)用例規(guī)定的功能,內(nèi)部應(yīng)實(shí)現(xiàn)的交互 通過合理地設(shè)置參與交互的對象的職責(zé), 確定這些對象的實(shí)現(xiàn)類的職責(zé) 根據(jù)類的職責(zé),以及其對象在交互中起的作用, 為類指定屬性和操作。,2020/8/3,32,5.2 類的職責(zé)/2,類由交互圖導(dǎo)出 在交互圖中,不同的類互相合作,以完成用例圖規(guī)定的功能或任務(wù) 在交互中,不同的對象擔(dān)負(fù)著不同的職責(zé),為其它對象提供所需的服務(wù) 對象的職責(zé)對

14、應(yīng)到其實(shí)現(xiàn)類,就成為了類的職責(zé)(responsibility) 在UML里,職責(zé)是一個(gè)類所承擔(dān)的義務(wù)或協(xié)議 一個(gè)良好定義的類應(yīng)該有清晰的職責(zé) 一個(gè)類只應(yīng)承擔(dān)一種職責(zé) 類的職責(zé)劃分的好壞,取決于對象參與交互時(shí),此對象在交互中擔(dān)任的職責(zé)的劃分的合理性,2020/8/3,33,5.2 類的職責(zé)/3,類的職責(zé)是通過用例驅(qū)動,以面向?qū)ο蟮姆绞疆a(chǎn)生的 通過對用例的分析,產(chǎn)生了系統(tǒng)的交互。在交互中,通過以面向?qū)ο蟮姆绞椒治鼋换ブ型瓿赡橙蝿?wù)所需的步驟及完成步驟的主體,以產(chǎn)生合理的對象職責(zé)的劃分 例如:在位圖瀏覽的交互中,專門設(shè)置“外殼”對象負(fù)責(zé)和操作系統(tǒng)打交道,又有專門的對象負(fù)責(zé)系統(tǒng)內(nèi)部功能的實(shí)現(xiàn)(“內(nèi)核”對

15、象) 在“內(nèi)核”對象中,有職責(zé)明確的對象分別負(fù)責(zé)鼠標(biāo)工具狀態(tài)機(jī)的實(shí)現(xiàn),位圖顯示狀態(tài)的維護(hù)的實(shí)現(xiàn)等等 有了合理的對象職責(zé)的劃分,就自然地導(dǎo)出了合理的類的職責(zé)的劃分,2020/8/3,34,5.2 類的職責(zé)/4,指定類的職責(zé),是對類進(jìn)行建模的第一步 類所應(yīng)具備的屬性和操作,將根據(jù)類的職責(zé)給出 例如: “位圖瀏覽”鼠標(biāo)工具的對象的交互,“位圖瀏覽” 對象的職責(zé)是翻譯鼠標(biāo)消息,使其轉(zhuǎn)換為對位圖的瀏覽操作。該職責(zé)決定了實(shí)現(xiàn)位圖瀏覽鼠標(biāo)工具的類必須有的相應(yīng)的操作接口,它接收傳進(jìn)來的三個(gè)鼠標(biāo)消息,決定了這個(gè)類必須具備一個(gè)屬性,作為狀態(tài)變量以記錄鼠標(biāo)按鍵的狀態(tài) 處理鼠標(biāo)移動消息時(shí),如果鼠標(biāo)按鍵處于按下狀態(tài),才

16、能把鼠標(biāo)移動消息“翻譯”為位圖的拖動操作,2020/8/3,35,5.2 類的職責(zé)/5,類的職責(zé)的描述: 可以用非形式的普通文本描述 可以出現(xiàn)在操作分隔區(qū)下面的第四個(gè)分隔區(qū)內(nèi) 在某些工具里,類的職責(zé)不占一個(gè)單獨(dú)的分隔區(qū) 而是在一個(gè)專門的文檔窗口(documentation)中出現(xiàn) 考慮類的職責(zé)劃分時(shí),應(yīng)注意類的職責(zé)的平衡分布, 應(yīng)注意 既不要使一個(gè)類的職責(zé)過重、過多 又不要使類的職責(zé)過于簡單、平淡 分析和考察類的職責(zé)的平衡分布,可以在交互圖上進(jìn)行,2020/8/3,36,5.3 指南/1,一個(gè)實(shí)用的軟件系統(tǒng),其結(jié)構(gòu)是復(fù)雜的,類是其中基本的構(gòu)成元素 可以用模型包(package)將語義上緊密聯(lián)系

17、的類組織到一起 在類的表達(dá)方面,應(yīng)充分應(yīng)用UML模型的隱藏機(jī)制,有重點(diǎn)地用類來表達(dá)系統(tǒng)的各個(gè)側(cè)面,2020/8/3,37,5.3 指南/2,軟件系統(tǒng)只有和外部直接交互,才能夠?yàn)槠溆脩籼峁┦褂脙r(jià)值,因此在設(shè)計(jì)和建造一個(gè)軟件系統(tǒng)時(shí),免不了要對軟件系統(tǒng)之外的非軟件事物,如用戶、外部設(shè)備等,進(jìn)行分析和建模 例如:建造一個(gè)信息管理系統(tǒng),需要分析用戶群的結(jié)構(gòu)、分工、職責(zé)和業(yè)務(wù)流程,類和對象也是描述這類非軟件事物的手段,可以用特定的類來代表一類特定的非軟件事物,用交互圖描述它們的業(yè)務(wù)流程,用屬性和操作定義它們的職責(zé),可以用UML的變體機(jī)制將非軟件事物與軟件事物相區(qū)分。,2020/8/3,38,5.3 指南/

18、3,類描述了和軟件系統(tǒng)在建造和實(shí)現(xiàn)過程中產(chǎn)生的相關(guān)概念或詞匯 對于大多數(shù)的軟件系統(tǒng)而言,它們不可能直接在一個(gè)不含任何軟件的純硬件平臺上建造,總會存在一個(gè)軟件的開發(fā)環(huán)境支持這個(gè)軟件系統(tǒng)的建造,這包括: 操作系統(tǒng) 高級語言開發(fā)環(huán)境等 這些系統(tǒng)本身已經(jīng)存在了大量的預(yù)定義好的概念或詞匯,亦即已經(jīng)存在了大量預(yù)定義好的類或類型 在這樣的開發(fā)環(huán)境上設(shè)計(jì)軟件系統(tǒng)的過程中,預(yù)定義類會被大量地引用 例如:在應(yīng)用MFC進(jìn)行軟件開發(fā)時(shí),會有許多其類庫中的類或類型被引用。 在建模時(shí),可以簡單地把這些預(yù)定義類(類型),作為應(yīng)用系統(tǒng)設(shè)計(jì)模型中的類來加以引用。在引用時(shí),可以根據(jù)需要,利用UML的隱藏機(jī)制 不暴露或只暴露所需的

19、屬性或操作。,6. 關(guān)系,2020/8/3,40,6.1 關(guān)系的定義/1,對象不是孤立存在的,它必定參與某一交互,參與一個(gè)交互的各對象之間必然要發(fā)生語義的連接 對象的特性,包括結(jié)構(gòu)方面和行為方面的特性,在UML中,被類所捕獲。對象的類之間,必然也存在語義上的連接。這種連接,在UML中,被抽象為類之間的關(guān)系 在UML中,類之間的語義連接被定義為關(guān)系 類之間的關(guān)系的建模,為其對象之間的交互提供了實(shí)現(xiàn)支持 對象之間的交互,可以對應(yīng)到類之間的關(guān)系,而這些關(guān)系,又可以被映射到大多數(shù)的程序設(shè)計(jì)語言,從而使得對象之間交互得到最終的實(shí)現(xiàn),2020/8/3,41,6.1 關(guān)系的定義/2,在類之間的關(guān)系中,最常用

20、的是 依賴關(guān)系 泛化關(guān)系 關(guān)聯(lián)關(guān)系 它們在面向?qū)ο蟮慕V校鹬种匾淖饔谩?2020/8/3,42,6.2 關(guān)系的表示,關(guān)系的圖形表示: UML中類之間的關(guān)系被圖形化地表示為連接類之間的路徑。 這些路徑以不同的線型,區(qū)分不同的關(guān)系,關(guān)聯(lián),WIndow,open(),close(),move(),diaplay(),handleEvent(),consoleWindow,Event,DialogBox,control,依賴,泛化,2020/8/3,43,6.3 依賴關(guān)系/1,在一個(gè)交互中,存在著對象之間消息的傳遞 消息的傳遞大多數(shù)情況下是以函數(shù)調(diào)用的形式實(shí)現(xiàn)的,有時(shí)也會通過直接訪問目標(biāo)對象

21、的成員變量的形式實(shí)現(xiàn) 消息的傳遞,意味著源對象的某些功能或動態(tài)特性將依賴于目標(biāo)對象的功能或動態(tài)特性 在類圖上強(qiáng)調(diào)類的對象之間的這種關(guān)系,可以在對象的對應(yīng)類之間建立依賴關(guān)系,2020/8/3,44,6.3 依賴關(guān)系/2,依賴關(guān)系的定義:兩個(gè)類之間的依賴關(guān)系,表明其中的一個(gè)類(客戶類)依賴于另一個(gè)類(供應(yīng)類)所提供的某些服務(wù) 圖形表示: 依賴關(guān)系被圖形化地表示為一個(gè)帶虛線的箭頭 箭頭所指的類是供應(yīng)類(被依賴的類) 箭頭的出發(fā)點(diǎn)是客戶類,2020/8/3,45,FilmClip,Channel,依賴關(guān)系,客戶類,服務(wù)類,2020/8/3,46,6.3 依賴關(guān)系/3,兩個(gè)類之間存在著依賴關(guān)系,意味著客

22、戶類的語義依賴于服務(wù)類的語義。服務(wù)類的語義的變化,將會導(dǎo)致客戶類的語義的變化 如果兩個(gè)類的對象之間存在著下面的情形,且兩個(gè)類之間不存在結(jié)構(gòu)方面的聯(lián)系(例如:供應(yīng)類以成員變量的形式作為客戶類的一部分),就可以建模成為具有依賴關(guān)系,這些情形是: 客戶類訪問定義在供應(yīng)類內(nèi)部的值(常量或 變量) 客戶類的操作啟動了定義在供應(yīng)類內(nèi)的操作 客戶類的返回類或參數(shù)是供應(yīng)類的實(shí)例 序列圖中的兩個(gè)對象,如果存在著消息的發(fā)送。且它們之間又沒有結(jié)構(gòu)方面的連接,就可以在類圖上用依賴關(guān)系對它們建模,2020/8/3,47,6.4 泛化關(guān)系/1,位圖觀察器的例子, 鼠標(biāo)工具 通常,在這樣的應(yīng)用軟件系統(tǒng)中,會存在多個(gè)鼠標(biāo)工具

23、。它們都從操作系統(tǒng)接收同樣的鼠標(biāo)消息,對這些鼠標(biāo)消息的不同解釋,使得各鼠標(biāo)工具的功能得以區(qū)分 在實(shí)現(xiàn)這些鼠標(biāo)工具時(shí),每一個(gè)鼠標(biāo)工具用一個(gè)對象實(shí)現(xiàn),由于它們所處理的鼠標(biāo)消息是相同的, 因此,它們的實(shí)現(xiàn)類所具備的操作有許多是相同的,區(qū)別在于它們對操作的執(zhí)行上各有不同。有的對象還有可能有些擴(kuò)展的操作,以實(shí)現(xiàn)不同工具的功能 在面向?qū)ο蟮某绦蛟O(shè)計(jì)語言中,這樣的鼠標(biāo)工具的一組實(shí)現(xiàn)對象的實(shí)現(xiàn)類可以共同定義為某個(gè)基類的導(dǎo)出類 UML中,則用泛化關(guān)系為這種基類/導(dǎo)出類的關(guān)系建模,2020/8/3,48,6.4 泛化關(guān)系/2,泛化關(guān)系的定義: 在UML中,泛化關(guān)系表示子類共享定義在一個(gè)或多個(gè)超類(parent)里

24、的結(jié)構(gòu)或行為 泛化關(guān)系表示類之間的一般和特殊的關(guān)系 在一組類中,如果它們都有一組相同的屬性和操作,那么,可以把這組屬性和操作定義在一個(gè)超類中,并把其它類與超類的關(guān)系定義為泛化關(guān)系。如果兩個(gè)類被定義為具有泛化關(guān)系,就意味著在任何超類的對象出現(xiàn)的地方,都可以用子類來代替。,2020/8/3,49,6.4 泛化關(guān)系/3,在UML中,泛化關(guān)系被圖形化地表示為一個(gè)帶有空心三角形的箭頭的線段 箭頭所指的方向是超類 箭頭起始端是子類 在泛化關(guān)系中 一個(gè)類可以有零個(gè)、一個(gè)或多個(gè)超類 如果一個(gè)類只有一個(gè)超類,那么就稱為是單繼承 如果一個(gè)類有多個(gè)超類,就稱為是多重繼承 如果一個(gè)類沒有超類但有一個(gè)或多個(gè)子類,則這個(gè)

25、類成為基類(base class) 如果一個(gè)類沒有任何子類,則成為葉子類(leaf class),2020/8/3,50,6.4 泛化關(guān)系/4,繼承的多態(tài)性 在子類中,如果存在一個(gè)操作和其超類中的操作具有相同的署名(signature), 則子類中的此操作的動態(tài)行為將替代超類的動態(tài)行為。,2020/8/3,51,基類,Shape,origin,move(),resize(),display(),Rectangle,corner : Point,Circle,radius : Float,Polygon,points : List,display(),Square,泛化關(guān)系,葉子類,2020/8

26、/3,52,6.5 關(guān)聯(lián)關(guān)系/1,依賴關(guān)系和泛化關(guān)系反映的是類之間在動態(tài)行為方面的聯(lián)系 在軟件系統(tǒng)中還存在著大量的結(jié)構(gòu)方面的聯(lián)系 例如:建造管理信息系統(tǒng)時(shí),需要對其所處的管理機(jī)構(gòu)的運(yùn)行結(jié)構(gòu)進(jìn)行建模,以建立各管理實(shí)體之間的對應(yīng)關(guān)系(部門和雇員之間的關(guān)系、銷售部門和商品之間的關(guān)系等),并在此基礎(chǔ)上建立相應(yīng)的數(shù)據(jù)庫模式。在以前經(jīng)常使用的工具有實(shí)體-關(guān)系模型等 在UML里可以用關(guān)聯(lián)關(guān)系描述,2020/8/3,53,6.5 關(guān)聯(lián)關(guān)系/2,關(guān)聯(lián)關(guān)系的定義: 在UML里,關(guān)聯(lián)關(guān)系表示兩個(gè)類或類和接口之間的語義連接 關(guān)聯(lián)關(guān)系可以是雙向的。它在所有的關(guān)系中間語義最弱 從關(guān)聯(lián)關(guān)系的定義可以看出:如果兩個(gè)類之間存在

27、著依賴關(guān)系或泛化關(guān)系,那么它們一定也隱含著具有關(guān)連關(guān)系 但在些情況下,描述這種關(guān)聯(lián)關(guān)系已經(jīng)沒有意義,所以一般不必再對這種關(guān)聯(lián)關(guān)系進(jìn)行描述,或者說,這時(shí)關(guān)聯(lián)關(guān)系已經(jīng)被依賴關(guān)系或泛化關(guān)系所取代 這就是“語義最弱”的含義所在,2020/8/3,54,6.5 關(guān)聯(lián)關(guān)系/3,關(guān)聯(lián)關(guān)系是一種結(jié)構(gòu)關(guān)系 如果兩個(gè)類之間存在著關(guān)聯(lián)關(guān)系,則它們的對象是互相連接的(對象之間存在著連接關(guān)系),即其中的一個(gè)對象可以訪問另一個(gè)對象,它可以訪問另一個(gè)對象的屬性,或啟動另一個(gè)對象的操作。,2020/8/3,55,6.5 關(guān)聯(lián)關(guān)系/4,關(guān)聯(lián)關(guān)系并不是僅僅一個(gè)抽象的概念 它在實(shí)現(xiàn)為程序設(shè)計(jì)語言源代碼時(shí),會有對應(yīng)的映射 通常,當(dāng)把

28、兩個(gè)有關(guān)聯(lián)關(guān)系的類映射為特定的程序設(shè)計(jì)語言代碼時(shí),每一個(gè)類都會被定義為一個(gè)可以引用對方的類的對象的成員變量 這個(gè)成員變量視對關(guān)聯(lián)關(guān)系的修飾的不同,可能會采取不同的形式,如: 它可以指向?qū)Ψ降念惖闹羔?也可能是對方類的對象,2020/8/3,56,6.5 關(guān)聯(lián)關(guān)系/5,在UML中,關(guān)聯(lián)關(guān)系的圖形化表示的基本形式是連接兩個(gè)類的直線。,對象類,對象類,限定符,關(guān)聯(lián) 對象類,多重性,角色名,限定符,角色名,多重性,關(guān)聯(lián)名,2020/8/3,57,6.5.1 關(guān)聯(lián)關(guān)系:方向,關(guān)聯(lián)方向 關(guān)聯(lián)可以是單向的,也可以是雙向的,雙向的不必標(biāo)出箭頭 說明給出了一個(gè)訂貨,就可以指出辦理該訂貨的顧客,但是給出一個(gè)顧客卻

29、不能標(biāo)識相應(yīng)的訂貨 實(shí)現(xiàn)時(shí),可以在“訂貨”類中設(shè)置一個(gè)指向“顧客”類的指針。,訂貨,顧客,*,1,2020/8/3,58,6.5.2 關(guān)聯(lián)關(guān)系的修飾,由于關(guān)聯(lián)關(guān)系的語義弱,所以可以對關(guān)聯(lián)關(guān)系及其圖形表示進(jìn)行修飾以表達(dá)更為特指的情形 對于關(guān)聯(lián)關(guān)系,存在著四種修飾,它們是: 名字 角色 重復(fù)度(multiplicity) 聚合,2020/8/3,59,6.5.3 關(guān)聯(lián)關(guān)系的名字,對于關(guān)聯(lián)關(guān)系,可以用名字對其進(jìn)行標(biāo)識,以和其它關(guān)聯(lián)關(guān)系相區(qū)別 名字可以是任何有意義的文字串。如果名字里的詞匯帶有指向性, 用以特指所涉及的那個(gè)類,則可以在名字的靠近這個(gè)類的一側(cè)放置一個(gè)指向三角形指向這個(gè)類,2020/8/3

30、,60,Person,Company,Work for,4,名字,關(guān)聯(lián),名字的指向,2020/8/3,61,6.5.4 關(guān)聯(lián)關(guān)系的角色/1,關(guān)聯(lián)關(guān)系中的角色 如果兩個(gè)類之間存在著關(guān)聯(lián)關(guān)系,則它們的對象可以互相訪問 這意味著對其中任意一個(gè)對象而言,存在著另外一個(gè)類的對象能被它訪問 為了訪問關(guān)聯(lián)關(guān)系的某一端類的對象,必須為它定義一個(gè)標(biāo)識,使得通過這標(biāo)識,另一個(gè)類的對象能夠訪問被訪問的對象,2020/8/3,62,6.5.4 關(guān)聯(lián)關(guān)系的角色/2,角色的定義:在UML里,關(guān)聯(lián)關(guān)系兩端的類的對象在對方的類里的標(biāo)識,稱為角色(role)。 角色在關(guān)聯(lián)關(guān)系的圖形化表示里由角色名(role name)表示。

31、當(dāng)關(guān)聯(lián)關(guān)系里的類被映射到程序設(shè)計(jì)語言時(shí) 角色名字就成為類的一個(gè)成員變量的名字,此成員變量的類型將是另一個(gè)類的對象,或指向另一個(gè)類的指針,2020/8/3,63,Person,Company,+employer,+employee,角色名,關(guān)聯(lián)關(guān)系,2020/8/3,64,6.5.4 關(guān)聯(lián)關(guān)系的角色/3,角色的重復(fù)度 當(dāng)一個(gè)類的對象以關(guān)聯(lián)關(guān)系的角色的形式出現(xiàn)在另一個(gè)類里時(shí),此角色可以在此類中出現(xiàn)一次,也可以出現(xiàn)多次。角色的重復(fù)度指的就是角色的這種出現(xiàn)次數(shù)。 角色重復(fù)度的定義:在UML里,角色重復(fù)度被定義為關(guān)聯(lián)關(guān)系的實(shí)例的兩端所連接的對象的數(shù)目。,2020/8/3,65,6.5.4 關(guān)聯(lián)關(guān)系的角色

32、/4,角色重復(fù)度的圖形化表示:角色重復(fù)度被圖示為一個(gè)表達(dá)式,它被放置在關(guān)聯(lián)關(guān)系中靠近相應(yīng)角色的一側(cè),此表達(dá)式確定了一個(gè)常數(shù)值或值的范圍,例如: 重復(fù)度1:代表對象作為角色必須出現(xiàn)且只出現(xiàn)1次。 重復(fù)度0.1:表示對象作為角色可以出現(xiàn)0次或1次。 星號(*):代表任意多次,例如: 重復(fù)度0.*表示對象作為角色可以出現(xiàn)0次任意多次; 重復(fù)度1.*表示對象作為角色必須至少出現(xiàn)1次且可以出現(xiàn)多至任意多次。,2020/8/3,66,+employee,Person,Company,*,1.*,+employer,*,1.*,關(guān)聯(lián),重復(fù)度,2020/8/3,67,6.5.4 關(guān)聯(lián)關(guān)系的角色/5,在一個(gè)帶有

33、多重性的關(guān)聯(lián)關(guān)系中,相關(guān)聯(lián)的某一方可能同時(shí)出現(xiàn)過個(gè)對象。如目錄與文件。 這樣的描述比較粗糙。沒有具體說明在目錄中是如何標(biāo)示一個(gè)文件的。因此,對于目錄這個(gè)對象,雖然可以說出屬于它的所有文件,但卻無法指明哪個(gè)特定的文件要被刪除。 使用限定關(guān)聯(lián)可用來解決該問題。限定符用來說明對于關(guān)聯(lián)關(guān)系的一方,它是如何表示和識別與它相關(guān)聯(lián)的另一方中的多個(gè)對象的。如任何一個(gè)目錄對象都是使用文件名來標(biāo)示屬于它的每個(gè)文件的。,目錄,文件,文件名,1,2020/8/3,68,6.5.4 關(guān)聯(lián)關(guān)系的角色/6,關(guān)聯(lián)的屬性、操作以及其它信息可以由關(guān)聯(lián)對象類進(jìn)一步描述 一個(gè)人能被一個(gè)單位或無單位聘用,一個(gè)單位可以聘用多個(gè)人,聘用的

34、期限和工資信息在關(guān)聯(lián)類“工作崗位”中描述。,2020/8/3,69,6.5.4 關(guān)聯(lián)關(guān)系的角色/7,根據(jù)關(guān)聯(lián)的類的個(gè)數(shù),可以分為: 自返關(guān)聯(lián) 二元關(guān)聯(lián) N元關(guān)聯(lián),2020/8/3,70,(1)自返關(guān)聯(lián),自返關(guān)聯(lián)(Reflexive Association,Recursive Association)是一個(gè)對象類與本身的關(guān)聯(lián),即一個(gè)類的兩個(gè)對象間的關(guān)系 至多只有一個(gè)人的職務(wù)可以為業(yè)主,其他人的職務(wù)可以為工作人員,他們都是“職務(wù)”類的實(shí)例對象。一個(gè)“業(yè)主”可以與多個(gè)“工作人員”相連接。,2020/8/3,71,(2)N元關(guān)聯(lián),發(fā)生在3個(gè)和多個(gè)對象類之間,顧客,供應(yīng)商,商品,訂貨 商品編號 商品名

35、單價(jià),*,*,*,2020/8/3,72,6.5.5 關(guān)聯(lián)關(guān)系:約束,約束: Implicit: 概念性的,在精化中不會再用 Ordered:規(guī)定一個(gè)多重性大于1的一端對象是有序的 Changeable:規(guī)定被關(guān)聯(lián)的對象之間的連接是可變的,可以被添加、刪除和改變 Addonly:規(guī)定可以在任何時(shí)間從源對象添加新的連接 Frozen:規(guī)定當(dāng)源對象已經(jīng)創(chuàng)建和初始化后,就被凍結(jié),不能再添加、修改和刪除連接 Xor:代表一組關(guān)聯(lián)的互斥情況,2020/8/3,73,6.5.6 關(guān)聯(lián)關(guān)系:聚合/1,聚合: 關(guān)聯(lián)關(guān)系的基本形式是雙向的,意味著關(guān)聯(lián)關(guān)系兩端的類的地位是平等的。 關(guān)聯(lián)關(guān)系又是一種結(jié)構(gòu)關(guān)系,其中的

36、角色代表著一個(gè)類的對象在另一個(gè)類中的存在。也就是說關(guān)聯(lián)關(guān)系中類的對象被互相擁有,有時(shí),出于建模的需要,有必要打破這種平等的關(guān)系,強(qiáng)調(diào)類與對象之間的有向的擁有關(guān)系 為此,可以用聚合對關(guān)聯(lián)關(guān)系進(jìn)行修飾,以表示類和對象的擁有關(guān)系。,2020/8/3,74,6.5.6 關(guān)聯(lián)關(guān)系:聚合/2,聚合關(guān)系的定義:在UML中,聚合關(guān)系(aggregation)被定義為兩個(gè)類之間的整體和部分的關(guān)系, 表明聚合關(guān)系中的客戶端以供應(yīng)端的類的對象作為其一部分 聚合對象具有其部分的所有權(quán)。,2020/8/3,75,6.5.6 關(guān)聯(lián)關(guān)系:聚合/3,聚合關(guān)系的圖形表示 通過在關(guān)聯(lián)關(guān)系的聚合類一側(cè)放置一個(gè)菱形得到 聚合關(guān)系還可

37、被進(jìn)一步修飾為兩類: 值聚合(by value, composite aggregate) 引用聚合(by reference),2020/8/3,76,整體:,聚合類、,客戶端,Company,Department,*,1,*,1,聚合,部分:,供應(yīng)端,2020/8/3,77,6.5.7關(guān)聯(lián)關(guān)系:組合,表示事物的整體與部分的關(guān)系較強(qiáng)的情況 組合中,代表整體事物的組合對象負(fù)責(zé)創(chuàng)建和刪除代表部分事物的對象(成分對象)。代表部分事物的對象只屬于一個(gè)組合對象,而且與組合對象同時(shí)存在,同時(shí)消失,一旦刪除了組合對象,也就隨即刪除了相應(yīng)的代表部分事物的對象。 在聚合中,代表部分事物的對象可以屬于多個(gè)聚合對

38、象,可以為多個(gè)聚合對象共享,而且可以隨時(shí)改變它從屬的多個(gè)聚合對象。部分事物對象的生存期與聚合對象的生存期無關(guān)。,2020/8/3,78,6.5.8 關(guān)聯(lián)關(guān)系:組合與聚合/1,多邊形,點(diǎn),圓,圖形屬性塊 顏色 結(jié)構(gòu),1,1,1,1,1,3*,ordered,2020/8/3,79,7. 特殊類,2020/8/3,80,7.1 接口,接口是一組外部可訪問的操作,用于為對象類或組件提供服務(wù)。 接口可以看作一種特殊的抽象類,它不含屬性,操作也沒有方法,即沒有操作的實(shí)現(xiàn) 接口兩端的對象或組件可以獨(dú)立變更,只要它們遵守和實(shí)現(xiàn)接口的規(guī)定,通過接口相聯(lián)系就可以了。,2020/8/3,81,實(shí)現(xiàn),依賴,2020

39、/8/3,82,7.2 抽象類/1,抽象類是不能直接產(chǎn)生實(shí)例的對象類 抽象類的實(shí)例對象只能通過一個(gè)非抽象類的子類產(chǎn)生,2020/8/3,83,7.2 抽象類/2,抽象類一般在繼承結(jié)構(gòu)中作為一個(gè)公共接口。但是在UML中的抽象類與接口是不同的模型元素。一個(gè)抽象類可以有屬性,接口不含有屬性,而且接口既可以由對象類實(shí)現(xiàn)(邏輯模型元素),也可以由組件實(shí)現(xiàn)(物理抽象元素),2020/8/3,84,7.3 參數(shù)化類/1,參數(shù)類(parameterized class)又稱對象類模板(Template)是帶有形式參數(shù)的類描述符,它定義一個(gè)類的家族。在參數(shù)類中屬性和操作都是以形式化參數(shù)來定義。 參數(shù)類不能直接使用,只有通過把參數(shù)類的形式參數(shù)綁定到實(shí)在參數(shù)時(shí)才得到一個(gè)類。綁定的類不能擴(kuò)充參數(shù)類,即不能添加屬性和操作。,2020/8/3,85,7.4 型與實(shí)現(xiàn)對象類,可以用構(gòu)造型把類說明為型(Type)或?qū)崿F(xiàn)類(Implementation Class)。 對象類圖標(biāo)的類名之下標(biāo)有構(gòu)造型type或implementationClass,2020/8/3,86,2020/8/3,87,7.5導(dǎo)出屬性和導(dǎo)出關(guān)聯(lián),可以從其它屬性和關(guān)聯(lián)計(jì)算推延得到的屬性和關(guān)聯(lián),當(dāng)前日

溫馨提示

  • 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

提交評論