




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、123類(lèi)圖描述了系統(tǒng)中的類(lèi)及其相類(lèi)圖描述了系統(tǒng)中的類(lèi)及其相互之間的各種關(guān)系,其本質(zhì)是反映互之間的各種關(guān)系,其本質(zhì)是反映了系統(tǒng)中包含的各種對(duì)象類(lèi)型以及了系統(tǒng)中包含的各種對(duì)象類(lèi)型以及對(duì)象間的各種靜態(tài)關(guān)系。對(duì)象間的各種靜態(tài)關(guān)系。4概念層類(lèi)圖概念層類(lèi)圖, , 描述應(yīng)用領(lǐng)域的概念描述應(yīng)用領(lǐng)域的概念, ,與實(shí)現(xiàn)與實(shí)現(xiàn)它的軟件沒(méi)有直接的聯(lián)系它的軟件沒(méi)有直接的聯(lián)系. .說(shuō)明層類(lèi)圖說(shuō)明層類(lèi)圖, , 描述軟件的接口部分描述軟件的接口部分, , 不是實(shí)現(xiàn)不是實(shí)現(xiàn)部分部分. .實(shí)現(xiàn)層類(lèi)圖考慮實(shí)現(xiàn)問(wèn)題實(shí)現(xiàn)層類(lèi)圖考慮實(shí)現(xiàn)問(wèn)題, , 提提供類(lèi)的細(xì)節(jié)供類(lèi)的細(xì)節(jié). .可以使用可以使用UMLUML的版型機(jī)制標(biāo)明類(lèi)圖的版型機(jī)制標(biāo)明
2、類(lèi)圖的抽象層次的抽象層次5類(lèi)名屬性操作6應(yīng)該來(lái)自系統(tǒng)的問(wèn)題域。應(yīng)該來(lái)自系統(tǒng)的問(wèn)題域。 應(yīng)該是一個(gè)名詞,且不應(yīng)該有前綴或后綴。應(yīng)該是一個(gè)名詞,且不應(yīng)該有前綴或后綴。 分為簡(jiǎn)單名稱(chēng)和路徑名稱(chēng)。分為簡(jiǎn)單名稱(chēng)和路徑名稱(chēng)。 7可見(jiàn)性可見(jiàn)性屬性名屬性名:類(lèi)型類(lèi)型多重性多重性次序次序=初值初值特性特性+ +public# #protected- -privateRoseUML可見(jiàn)性可見(jiàn)性+size: Area = (100,100)#visibility: Boolean = falsecolors: Color3points: Point2.* orderedname: String0.18可見(jiàn)性可見(jiàn)性操
3、作名操作名(參數(shù)列表參數(shù)列表): 返回值類(lèi)型返回值類(lèi)型特性特性+ +public# #protected- -privateRoseUML可見(jiàn)性可見(jiàn)性+display(): Location+hide()#create()-attachXWindow(xwing: XwindowPtr)9常見(jiàn)的類(lèi)之間的關(guān)系包括常見(jiàn)的類(lèi)之間的關(guān)系包括: 關(guān)聯(lián)、聚集、組合、泛化、依賴(lài)等關(guān)聯(lián)、聚集、組合、泛化、依賴(lài)等.10關(guān)聯(lián)關(guān)聯(lián)(association)是模型元素間的一種語(yǔ)義聯(lián)系是模型元素間的一種語(yǔ)義聯(lián)系, 它是對(duì)具有它是對(duì)具有共同的結(jié)構(gòu)特性、行為特性、關(guān)系和語(yǔ)義的鏈共同的結(jié)構(gòu)特性、行為特性、關(guān)系和語(yǔ)義的鏈(Li
4、nk)的描述的描述.鏈?zhǔn)顷P(guān)聯(lián)的實(shí)例鏈?zhǔn)顷P(guān)聯(lián)的實(shí)例關(guān)聯(lián)表示類(lèi)與類(lèi)之間的關(guān)系關(guān)聯(lián)表示類(lèi)與類(lèi)之間的關(guān)系鏈表示對(duì)象與對(duì)象之間的關(guān)系鏈表示對(duì)象與對(duì)象之間的關(guān)系11/ 類(lèi)類(lèi)A的源碼的源碼public class A public B theB; public A() / 類(lèi)類(lèi)B的源碼的源碼public class B public B() / 類(lèi)類(lèi)A的源碼的源碼public class A public B theB; public A() / 類(lèi)類(lèi)B的源碼的源碼public class B public A theA; public B() 12單向關(guān)聯(lián):只在一個(gè)方向上存在導(dǎo)航表示單向關(guān)聯(lián):只在一個(gè)方向
5、上存在導(dǎo)航表示雙向關(guān)聯(lián):在兩個(gè)方向上都有導(dǎo)航表示。雙向關(guān)聯(lián):在兩個(gè)方向上都有導(dǎo)航表示。雙向關(guān)聯(lián)的限制:角色的互逆雙向關(guān)聯(lián)的限制:角色的互逆13用來(lái)描述關(guān)聯(lián)的作用,在含義十分明顯時(shí),名字可以省略。用來(lái)描述關(guān)聯(lián)的作用,在含義十分明顯時(shí),名字可以省略。14關(guān)聯(lián)的兩端可以以某種角色參與關(guān)聯(lián)關(guān)聯(lián)的兩端可以以某種角色參與關(guān)聯(lián), 如果不標(biāo)注角色則隱含如果不標(biāo)注角色則隱含用類(lèi)名作為角色名用類(lèi)名作為角色名.角色的多重性角色的多重性,表示可以有多少個(gè)對(duì)象參與該關(guān)聯(lián)表示可以有多少個(gè)對(duì)象參與該關(guān)聯(lián).15多重性用非負(fù)整數(shù)的一個(gè)子集來(lái)表示多重性用非負(fù)整數(shù)的一個(gè)子集來(lái)表示0.1,0.*,1.n,如果多重性的上界大于如果多重
6、性的上界大于1,則稱(chēng)為,則稱(chēng)為多值角色多值角色,通常把這種,通常把這種多值角色看成一個(gè)集合。多值角色看成一個(gè)集合。由于集合是無(wú)序的,因此對(duì)于多值角色可使用一些由于集合是無(wú)序的,因此對(duì)于多值角色可使用一些約束約束。16(1)UML沒(méi)有為約束定義嚴(yán)格的語(yǔ)法。沒(méi)有為約束定義嚴(yán)格的語(yǔ)法。(2)約束應(yīng)寫(xiě)在)約束應(yīng)寫(xiě)在 括號(hào)中括號(hào)中(3)約束可用自然語(yǔ)言寫(xiě),也可用程序語(yǔ)言寫(xiě)。)約束可用自然語(yǔ)言寫(xiě),也可用程序語(yǔ)言寫(xiě)。1718契約式設(shè)計(jì)是契約式設(shè)計(jì)是Bertrand MeyerBertrand Meyer在在EiffelEiffel語(yǔ)言中開(kāi)發(fā)語(yǔ)言中開(kāi)發(fā)的一項(xiàng)技術(shù)。的一項(xiàng)技術(shù)。契約式設(shè)計(jì)的核心是斷言。斷言應(yīng)是一
7、個(gè)永真的邏契約式設(shè)計(jì)的核心是斷言。斷言應(yīng)是一個(gè)永真的邏輯公式。一旦為假即表示存在錯(cuò)誤。輯公式。一旦為假即表示存在錯(cuò)誤。斷言有三種斷言有三種前置條件:描述在操作前應(yīng)滿(mǎn)足的條件。前置條件:描述在操作前應(yīng)滿(mǎn)足的條件。后置條件:描述在操作后應(yīng)滿(mǎn)足的條件。后置條件:描述在操作后應(yīng)滿(mǎn)足的條件。不變式:關(guān)于類(lèi)的斷言。對(duì)于類(lèi)的所有實(shí)例,無(wú)論在不變式:關(guān)于類(lèi)的斷言。對(duì)于類(lèi)的所有實(shí)例,無(wú)論在操作執(zhí)行前,還是執(zhí)行后,不變式恒為真。操作執(zhí)行前,還是執(zhí)行后,不變式恒為真。19契約式設(shè)計(jì)方法要求:契約式設(shè)計(jì)方法要求:類(lèi)的不變式和后置條件必須適用于所有的子類(lèi)。類(lèi)的不變式和后置條件必須適用于所有的子類(lèi)。子類(lèi)只可以減弱前置條件
8、。子類(lèi)只可以減弱前置條件。子類(lèi)只可以加強(qiáng)后置條件。子類(lèi)只可以加強(qiáng)后置條件。在在UMLUML中可以使用斷言技術(shù)。類(lèi)圖中關(guān)于類(lèi)的約束實(shí)中可以使用斷言技術(shù)。類(lèi)圖中關(guān)于類(lèi)的約束實(shí)質(zhì)上就是類(lèi)的一種不變式。質(zhì)上就是類(lèi)的一種不變式。屬性約束和操作約束:描述限制或合法返回值屬性約束和操作約束:描述限制或合法返回值角色約束:角色約束:order表示目標(biāo)對(duì)象有順序,表示目標(biāo)對(duì)象有順序,bag表示目標(biāo)對(duì)表示目標(biāo)對(duì)象可以多次出現(xiàn)。象可以多次出現(xiàn)。2021有時(shí)需要為關(guān)聯(lián)設(shè)置一些屬性、操作及其它特性。有時(shí)需要為關(guān)聯(lián)設(shè)置一些屬性、操作及其它特性。UMLUML用建模元素用建模元素“關(guān)聯(lián)類(lèi)關(guān)聯(lián)類(lèi)”來(lái)表示。來(lái)表示。UMLUML規(guī)
9、定:在任何兩個(gè)相關(guān)的對(duì)象之間,只能存在規(guī)定:在任何兩個(gè)相關(guān)的對(duì)象之間,只能存在關(guān)聯(lián)類(lèi)的一個(gè)實(shí)例。關(guān)聯(lián)類(lèi)的一個(gè)實(shí)例。22/Company.javapublic class Company private String companyName; public Person employee;/Person.javapublic class Person private int personName; public Company employer;/Contract.javapublic class Employ private dataRange Period;23關(guān)聯(lián)類(lèi)也可以用普通(正式)的類(lèi)
10、來(lái)表示。關(guān)聯(lián)類(lèi)也可以用普通(正式)的類(lèi)來(lái)表示。 這種表示在描述一個(gè)對(duì)象與另一個(gè)對(duì)象之間,需要有這種表示在描述一個(gè)對(duì)象與另一個(gè)對(duì)象之間,需要有多于一個(gè)的關(guān)聯(lián)類(lèi)實(shí)例時(shí),是可行的。(此時(shí)使用關(guān)聯(lián)類(lèi)多于一個(gè)的關(guān)聯(lián)類(lèi)實(shí)例時(shí),是可行的。(此時(shí)使用關(guān)聯(lián)類(lèi)是不行的,因?yàn)槟菢泳瓦`反了是不行的,因?yàn)槟菢泳瓦`反了UMLUML的規(guī)定)的規(guī)定)24限定關(guān)聯(lián)是一對(duì)多或多對(duì)多關(guān)聯(lián)的另一種表達(dá)形式。它限定關(guān)聯(lián)是一對(duì)多或多對(duì)多關(guān)聯(lián)的另一種表達(dá)形式。它通過(guò)在關(guān)聯(lián)的一方添加限定符,明確地標(biāo)識(shí)在關(guān)聯(lián)的另一通過(guò)在關(guān)聯(lián)的一方添加限定符,明確地標(biāo)識(shí)在關(guān)聯(lián)的另一方出現(xiàn)的多個(gè)對(duì)象中的每一個(gè)對(duì)象。方出現(xiàn)的多個(gè)對(duì)象中的每一個(gè)對(duì)象。25關(guān)于一份訂單
11、,對(duì)于產(chǎn)品中的每一個(gè)實(shí)例,最多只有一關(guān)于一份訂單,對(duì)于產(chǎn)品中的每一個(gè)實(shí)例,最多只有一個(gè)訂單項(xiàng)。個(gè)訂單項(xiàng)。 限定關(guān)聯(lián)是為了顯示關(guān)聯(lián)的查找接口。限定關(guān)聯(lián)是為了顯示關(guān)聯(lián)的查找接口。 限定關(guān)聯(lián)的重?cái)?shù)是在限定關(guān)聯(lián)的重?cái)?shù)是在限定符方面限定符方面的重?cái)?shù)。的重?cái)?shù)。 引入限定符的一個(gè)目的就是降低另一端的多重性。引入限定符的一個(gè)目的就是降低另一端的多重性。public class Order public OrderLine getLineItem(Product aProduct)public void addLineItem(Number amount, Product forProduct) 26(1) 自
12、反關(guān)聯(lián)自反關(guān)聯(lián)public class EnginePart public EnginePart theEnginePart;(2) 二元關(guān)聯(lián)二元關(guān)聯(lián)(3) N元關(guān)聯(lián)元關(guān)聯(lián)27聚集聚集(aggregation)是一種特殊的關(guān)聯(lián)是一種特殊的關(guān)聯(lián), 表示類(lèi)之間的整體與部表示類(lèi)之間的整體與部分關(guān)系分關(guān)系.28組合組合(composition)是一種特殊的聚集是一種特殊的聚集, 強(qiáng)調(diào)整體和部分具有相強(qiáng)調(diào)整體和部分具有相同的生命期同的生命期.29在概念層,泛化表示類(lèi)與子類(lèi)的關(guān)系。在概念層,泛化表示類(lèi)與子類(lèi)的關(guān)系。在說(shuō)明層,泛化意味著子類(lèi)的接口必須包括父類(lèi)型在說(shuō)明層,泛化意味著子類(lèi)的接口必須包括父類(lèi)型接口
13、中的每個(gè)元素。接口中的每個(gè)元素。在實(shí)現(xiàn)層,泛化可以用在實(shí)現(xiàn)層,泛化可以用類(lèi)繼承技術(shù)類(lèi)繼承技術(shù)和和授權(quán)技術(shù)授權(quán)技術(shù)來(lái)實(shí)來(lái)實(shí)現(xiàn)。現(xiàn)。泛化涉及可替代性,凡適用于父類(lèi)的代碼也同樣適用泛化涉及可替代性,凡適用于父類(lèi)的代碼也同樣適用于子類(lèi)。于子類(lèi)。泛化關(guān)系指一般元素和特殊元素之間的分類(lèi)關(guān)系泛化關(guān)系指一般元素和特殊元素之間的分類(lèi)關(guān)系.3031操作操作類(lèi)的包類(lèi)的包繼承繼承抽象類(lèi)抽象類(lèi)package MyPackage; abstract class MyAbstractClass . . . . package MyPackage; class MyDerivedClass extends MyAbstrac
14、tClass int att; . . . . . void myFunction( ReferencedClass r ) . . MyDerivedClassatt: intmyFunction()MyPackageMyAbstractClass屬性屬性32用繼承機(jī)制實(shí)現(xiàn)泛化關(guān)系的條件用繼承機(jī)制實(shí)現(xiàn)泛化關(guān)系的條件一個(gè)父類(lèi)的任何子類(lèi)都必須具有其父類(lèi)的所有行為。這種一個(gè)父類(lèi)的任何子類(lèi)都必須具有其父類(lèi)的所有行為。這種行為的一致性要求類(lèi)中的操作不僅在語(yǔ)法上一致,而且在行為的一致性要求類(lèi)中的操作不僅在語(yǔ)法上一致,而且在語(yǔ)義上語(yǔ)義上也要一致。也要一致。語(yǔ)義上語(yǔ)義上的一致意味著每個(gè)對(duì)象都應(yīng)該是其父類(lèi)的一
15、個(gè)對(duì)象,的一致意味著每個(gè)對(duì)象都應(yīng)該是其父類(lèi)的一個(gè)對(duì)象,父類(lèi)中的所有屬性和操作都完全適用于子類(lèi)對(duì)象。父類(lèi)中的所有屬性和操作都完全適用于子類(lèi)對(duì)象。即便子類(lèi)重載父類(lèi)中的操作,必須保證這個(gè)操作提供與父即便子類(lèi)重載父類(lèi)中的操作,必須保證這個(gè)操作提供與父類(lèi)操作類(lèi)操作同樣的服務(wù)同樣的服務(wù)。只不過(guò)服務(wù)的內(nèi)容可以更多更具體。只不過(guò)服務(wù)的內(nèi)容可以更多更具體。33但是程序員在很多時(shí)候,沒(méi)有嚴(yán)格確保子類(lèi)與父類(lèi)在語(yǔ)義但是程序員在很多時(shí)候,沒(méi)有嚴(yán)格確保子類(lèi)與父類(lèi)在語(yǔ)義上的一致性。往往違背語(yǔ)義的一致性,采用繼承機(jī)制借用上的一致性。往往違背語(yǔ)義的一致性,采用繼承機(jī)制借用一個(gè)類(lèi)的部分行為一個(gè)類(lèi)的部分行為,導(dǎo)致行為繼承的錯(cuò)誤。導(dǎo)
16、致行為繼承的錯(cuò)誤。34授權(quán)就是把原來(lái)屬于類(lèi)授權(quán)就是把原來(lái)屬于類(lèi)A A的職責(zé)或任務(wù)轉(zhuǎn)交給類(lèi)的職責(zé)或任務(wù)轉(zhuǎn)交給類(lèi)B B來(lái)來(lái)完成。類(lèi)完成。類(lèi)B B成為類(lèi)成為類(lèi)A A不可分割的一個(gè)組成部分。不可分割的一個(gè)組成部分。35如果修改元素如果修改元素X X會(huì)導(dǎo)致另一個(gè)元素會(huì)導(dǎo)致另一個(gè)元素Y Y的修改,則的修改,則Y Y依賴(lài)于依賴(lài)于X X一個(gè)類(lèi)是另一個(gè)類(lèi)的數(shù)據(jù)成員類(lèi)型一個(gè)類(lèi)是另一個(gè)類(lèi)的數(shù)據(jù)成員類(lèi)型一個(gè)類(lèi)的方法使用另一個(gè)類(lèi)作為形式參數(shù)一個(gè)類(lèi)的方法使用另一個(gè)類(lèi)作為形式參數(shù)消息的發(fā)送者與接收者之間的關(guān)系消息的發(fā)送者與接收者之間的關(guān)系一個(gè)類(lèi)的方法創(chuàng)建了另一個(gè)類(lèi)的實(shí)例一個(gè)類(lèi)的方法創(chuàng)建了另一個(gè)類(lèi)的實(shí)例36class MyD
17、ependentClass private MyReferencedClass RC . . . . . void myFunction1( MyReferencedClass r ) . . MyReferencedClass myFunction2( ) . . void myFunction3( ) MyReferencedClass m MyDependentClassatt: intmyFunction()MyReferencedClass依賴(lài)依賴(lài)(引用一個(gè)類(lèi)引用一個(gè)類(lèi))or參數(shù)參數(shù)or 返回類(lèi)型返回類(lèi)型or 局部變量局部變量數(shù)據(jù)成員數(shù)據(jù)成員37派生屬性(關(guān)聯(lián))指可以由其他屬性(關(guān)聯(lián)
18、)計(jì)算得到的屬性,名字前加”/”.38抽象類(lèi)抽象類(lèi)一種不能夠被直接實(shí)例化的類(lèi),也就是說(shuō)不能夠創(chuàng)建一一種不能夠被直接實(shí)例化的類(lèi),也就是說(shuō)不能夠創(chuàng)建一個(gè)屬于抽象類(lèi)的對(duì)象。個(gè)屬于抽象類(lèi)的對(duì)象。抽象類(lèi)可以含有屬性和某些方法的具體實(shí)現(xiàn)。抽象類(lèi)可以含有屬性和某些方法的具體實(shí)現(xiàn)。接口接口一個(gè)接口是一個(gè)不帶實(shí)現(xiàn)的類(lèi),它只規(guī)定類(lèi)的外部特性。一個(gè)接口是一個(gè)不帶實(shí)現(xiàn)的類(lèi),它只規(guī)定類(lèi)的外部特性。接口可通過(guò)抽象類(lèi)來(lái)描述。抽象類(lèi)可提供一些實(shí)現(xiàn),但接口可通過(guò)抽象類(lèi)來(lái)描述。抽象類(lèi)可提供一些實(shí)現(xiàn),但主要用于聲明接口。主要用于聲明接口。39抽象類(lèi)抽象類(lèi)接口接口UML用斜體表示抽象元素(包括類(lèi)、屬性、方法等)的名稱(chēng)。用斜體表示抽象
19、元素(包括類(lèi)、屬性、方法等)的名稱(chēng)。40定義獨(dú)立于平臺(tái)的抽象窗口類(lèi)定義獨(dú)立于平臺(tái)的抽象窗口類(lèi)41interface MyAbstractClass . . . . class MyClass implements MyInterface . . . . . 42版型版型(stereotype)是是UML的的3種擴(kuò)展機(jī)制之一。種擴(kuò)展機(jī)制之一。版型是建模人員在已有的構(gòu)造塊上派生出新的構(gòu)造塊,這些新版型是建模人員在已有的構(gòu)造塊上派生出新的構(gòu)造塊,這些新的構(gòu)造塊擴(kuò)展已有的構(gòu)造塊的語(yǔ)義,與特定問(wèn)題相關(guān)。的構(gòu)造塊擴(kuò)展已有的構(gòu)造塊的語(yǔ)義,與特定問(wèn)題相關(guān)。版型可以應(yīng)用于所有類(lèi)型的模型元素。版型可以應(yīng)用于所有類(lèi)
20、型的模型元素。系統(tǒng)預(yù)定義的版型系統(tǒng)預(yù)定義的版型用戶(hù)自義的版型用戶(hù)自義的版型43 定義一種新版型元素的步驟:定義一種新版型元素的步驟: 在基元素的模型符號(hào)的基礎(chǔ)上,附加一個(gè)在基元素的模型符號(hào)的基礎(chǔ)上,附加一個(gè)版型名稱(chēng)版型名稱(chēng)或者指定一個(gè)圖符?;蛘咧付ㄒ粋€(gè)圖符。 定義版型元素的語(yǔ)義,其語(yǔ)義必須與基元素的語(yǔ)義一定義版型元素的語(yǔ)義,其語(yǔ)義必須與基元素的語(yǔ)義一致。語(yǔ)義定義可采用形式語(yǔ)言和自然語(yǔ)言進(jìn)行定義。致。語(yǔ)義定義可采用形式語(yǔ)言和自然語(yǔ)言進(jìn)行定義。 版型與約束版型與約束 都可用于為模型元素增加語(yǔ)義都可用于為模型元素增加語(yǔ)義 約束側(cè)重于施加某種限制約束側(cè)重于施加某種限制 版型則有分類(lèi)的意味版型則有分類(lèi)的
21、意味44 在大多數(shù)在大多數(shù)OOOO程序設(shè)計(jì)語(yǔ)言中程序設(shè)計(jì)語(yǔ)言中, ,都假定對(duì)象的分類(lèi)是單值的和都假定對(duì)象的分類(lèi)是單值的和靜態(tài)的。靜態(tài)的。單值:一個(gè)對(duì)象只能屬于一個(gè)類(lèi)。單值:一個(gè)對(duì)象只能屬于一個(gè)類(lèi)。 UML UML允許在概念模型中使用多值的、動(dòng)態(tài)的分類(lèi)。允許在概念模型中使用多值的、動(dòng)態(tài)的分類(lèi)。 多值:一個(gè)類(lèi)可以根據(jù)多個(gè)不同的分類(lèi)標(biāo)準(zhǔn),分成多多值:一個(gè)類(lèi)可以根據(jù)多個(gè)不同的分類(lèi)標(biāo)準(zhǔn),分成多個(gè)子類(lèi)族。這樣一個(gè)對(duì)象可以用幾個(gè)類(lèi)來(lái)描述,而且這些個(gè)子類(lèi)族。這樣一個(gè)對(duì)象可以用幾個(gè)類(lèi)來(lái)描述,而且這些類(lèi)之間不必有繼承關(guān)系。類(lèi)之間不必有繼承關(guān)系。 多重繼承:一個(gè)類(lèi)可以有多個(gè)父類(lèi),但一個(gè)對(duì)象仍然多重繼承:一個(gè)類(lèi)可以有
22、多個(gè)父類(lèi),但一個(gè)對(duì)象仍然只屬于一個(gè)類(lèi)。只屬于一個(gè)類(lèi)。 多值與多重繼承是不同的。多值與多重繼承是不同的。4546在圖中在圖中“人人”可以按多種標(biāo)準(zhǔn)分成多個(gè)類(lèi)。可以按多種標(biāo)準(zhǔn)分成多個(gè)類(lèi)。多值分類(lèi)允許將這些按不同標(biāo)準(zhǔn)定義的類(lèi)進(jìn)行任意組合,多值分類(lèi)允許將這些按不同標(biāo)準(zhǔn)定義的類(lèi)進(jìn)行任意組合,然后指派一個(gè)對(duì)象。然后指派一個(gè)對(duì)象。按同一種標(biāo)準(zhǔn)劃分的子類(lèi),彼此之間是互斥的。按同一種標(biāo)準(zhǔn)劃分的子類(lèi),彼此之間是互斥的。completecomplete表示分類(lèi)后得到的子類(lèi)是一個(gè)全集。這意味著表示分類(lèi)后得到的子類(lèi)是一個(gè)全集。這意味著父類(lèi)的任何實(shí)例都必須是這個(gè)(全集)分類(lèi)中某個(gè)子類(lèi)的父類(lèi)的任何實(shí)例都必須是這個(gè)(全集)分
23、類(lèi)中某個(gè)子類(lèi)的一個(gè)實(shí)例。一個(gè)實(shí)例。47合法的類(lèi)組合合法的類(lèi)組合(A A)(男人,理療師)(男人,理療師)(B B)(女人,病人)(女人,病人)(C C)(女人,病人,護(hù)士)(女人,病人,護(hù)士)(D D)(女人,醫(yī)生,外科醫(yī)生)(女人,醫(yī)生,外科醫(yī)生)不合法的類(lèi)組合不合法的類(lèi)組合(A A)(病人,醫(yī)生)(病人,醫(yī)生) 注:缺全集類(lèi)注:缺全集類(lèi)(B B)(男人,醫(yī)生,護(hù)士)注:含兩個(gè)互斥的類(lèi))(男人,醫(yī)生,護(hù)士)注:含兩個(gè)互斥的類(lèi)多值對(duì)象就是指這些類(lèi)組合的實(shí)例對(duì)象多值對(duì)象就是指這些類(lèi)組合的實(shí)例對(duì)象48動(dòng)態(tài)分類(lèi)動(dòng)態(tài)分類(lèi)(1 1)動(dòng)態(tài)分類(lèi)允許在同類(lèi)的子類(lèi)集中,動(dòng)態(tài)地改變對(duì)象所屬)動(dòng)態(tài)分類(lèi)允許在同類(lèi)的子
24、類(lèi)集中,動(dòng)態(tài)地改變對(duì)象所屬的類(lèi)。的類(lèi)。(2 2)靜態(tài)分類(lèi)不允許對(duì)象改變類(lèi)型。)靜態(tài)分類(lèi)不允許對(duì)象改變類(lèi)型。49UML中三種主要的類(lèi)版型中三種主要的類(lèi)版型邊界類(lèi)邊界類(lèi), boundary class控制類(lèi)控制類(lèi), control class實(shí)體類(lèi)實(shí)體類(lèi), entity class引入多種類(lèi)版型幫助分析和設(shè)計(jì)人員確定系統(tǒng)中的類(lèi)引入多種類(lèi)版型幫助分析和設(shè)計(jì)人員確定系統(tǒng)中的類(lèi). .50邊界類(lèi)位于系統(tǒng)與外界的交界處邊界類(lèi)位于系統(tǒng)與外界的交界處,包括包括:用戶(hù)界面類(lèi)用戶(hù)界面類(lèi), , 如如: : 窗口、對(duì)話(huà)框、報(bào)表類(lèi)等窗口、對(duì)話(huà)框、報(bào)表類(lèi)等通訊協(xié)議類(lèi)通訊協(xié)議類(lèi), , 如如: TCP/IP: TCP/IP的類(lèi)
25、的類(lèi)直接與外部設(shè)備交互的類(lèi)直接與外部設(shè)備交互的類(lèi)直接與外部系統(tǒng)交互的類(lèi)直接與外部系統(tǒng)交互的類(lèi)邊界類(lèi)的邊界類(lèi)的UML表示方法表示方法:51通過(guò)用例圖可以確定需要的邊界類(lèi)通過(guò)用例圖可以確定需要的邊界類(lèi), 每個(gè)每個(gè)Actor/User case對(duì)至少需要一個(gè)邊界類(lèi)對(duì)至少需要一個(gè)邊界類(lèi).但并不是每個(gè)但并不是每個(gè)Actor/Use case都都需要生成惟一邊界需要生成惟一邊界類(lèi)類(lèi), 多個(gè)多個(gè)actor啟動(dòng)啟動(dòng)同一同一use case可以可以使用同一邊界類(lèi)使用同一邊界類(lèi).52實(shí)體類(lèi)保存要放進(jìn)持久存儲(chǔ)體實(shí)體類(lèi)保存要放進(jìn)持久存儲(chǔ)體( (數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)/ /文件等文件等) )的信息的信息. .實(shí)體類(lèi)通過(guò)事件流和交
26、互圖發(fā)現(xiàn)實(shí)體類(lèi)通過(guò)事件流和交互圖發(fā)現(xiàn), , 采用目標(biāo)領(lǐng)域術(shù)語(yǔ)命名采用目標(biāo)領(lǐng)域術(shù)語(yǔ)命名. .通常實(shí)體類(lèi)對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表通常實(shí)體類(lèi)對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表, , 其屬性對(duì)應(yīng)表的字段其屬性對(duì)應(yīng)表的字段, , 但實(shí)體但實(shí)體類(lèi)與數(shù)據(jù)庫(kù)中的表不一定是一一對(duì)應(yīng)關(guān)系類(lèi)與數(shù)據(jù)庫(kù)中的表不一定是一一對(duì)應(yīng)關(guān)系. .53控制類(lèi)是負(fù)責(zé)管理或控制其他類(lèi)工作的類(lèi)控制類(lèi)是負(fù)責(zé)管理或控制其他類(lèi)工作的類(lèi). .每個(gè)用例通常有一個(gè)控制類(lèi)每個(gè)用例通常有一個(gè)控制類(lèi), , 控制用例中的事件順序控制用例中的事件順序, , 控制類(lèi)控制類(lèi)也可以在多個(gè)用例間共用也可以在多個(gè)用例間共用. . 控制較少接收消息控制較少接收消息, , 發(fā)出較多消息發(fā)出較多消息.
27、 .54根據(jù)用例描述中的名詞確定候選類(lèi)根據(jù)用例描述中的名詞確定候選類(lèi).使用使用CRC分析法尋找類(lèi)分析法尋找類(lèi), CRC指指: 類(lèi)類(lèi)(class)、職責(zé)、職責(zé)(responsibility)、協(xié)作、協(xié)作(collaboration).根據(jù)邊界類(lèi)、控制類(lèi)和實(shí)體類(lèi)的劃分來(lái)幫助發(fā)現(xiàn)類(lèi)根據(jù)邊界類(lèi)、控制類(lèi)和實(shí)體類(lèi)的劃分來(lái)幫助發(fā)現(xiàn)類(lèi).參考設(shè)計(jì)模式來(lái)確定類(lèi)參考設(shè)計(jì)模式來(lái)確定類(lèi).根據(jù)軟件開(kāi)發(fā)過(guò)程的指導(dǎo)尋找類(lèi)根據(jù)軟件開(kāi)發(fā)過(guò)程的指導(dǎo)尋找類(lèi), 如如:RUP等等.尋找類(lèi)的方法尋找類(lèi)的方法構(gòu)造類(lèi)圖時(shí)注意構(gòu)造類(lèi)圖時(shí)注意不要試圖使用所有的符號(hào)不要試圖使用所有的符號(hào).不要過(guò)早陷入細(xì)節(jié)不要過(guò)早陷入細(xì)節(jié), 根據(jù)階段、層次逐步細(xì)化根
28、據(jù)階段、層次逐步細(xì)化.構(gòu)造完成要將模型與目標(biāo)問(wèn)題對(duì)照驗(yàn)證其是否合理構(gòu)造完成要將模型與目標(biāo)問(wèn)題對(duì)照驗(yàn)證其是否合理.55研究分析問(wèn)題領(lǐng)域研究分析問(wèn)題領(lǐng)域, 確定系統(tǒng)需求確定系統(tǒng)需求.確定類(lèi)確定類(lèi), 明確類(lèi)的含義和職責(zé)明確類(lèi)的含義和職責(zé), 確定屬性和操作確定屬性和操作.確定類(lèi)之間的關(guān)系確定類(lèi)之間的關(guān)系.調(diào)整和細(xì)化類(lèi)及類(lèi)之間的關(guān)系調(diào)整和細(xì)化類(lèi)及類(lèi)之間的關(guān)系.繪制類(lèi)圖并增加相應(yīng)的說(shuō)明繪制類(lèi)圖并增加相應(yīng)的說(shuō)明.建立類(lèi)圖的步驟建立類(lèi)圖的步驟56建立類(lèi)圖的過(guò)程就是對(duì)領(lǐng)域及其解決方案的分析與設(shè)建立類(lèi)圖的過(guò)程就是對(duì)領(lǐng)域及其解決方案的分析與設(shè)計(jì)過(guò)程計(jì)過(guò)程.領(lǐng)域分析包括領(lǐng)域分析包括:通過(guò)對(duì)某一領(lǐng)域中的已有應(yīng)用系統(tǒng)、理
29、論、技術(shù)、通過(guò)對(duì)某一領(lǐng)域中的已有應(yīng)用系統(tǒng)、理論、技術(shù)、開(kāi)發(fā)歷史等的研究開(kāi)發(fā)歷史等的研究, 來(lái)標(biāo)識(shí)、收集、組織、分析和來(lái)標(biāo)識(shí)、收集、組織、分析和表示領(lǐng)域模型及軟件體系結(jié)構(gòu)的過(guò)程表示領(lǐng)域模型及軟件體系結(jié)構(gòu)的過(guò)程;根據(jù)這一過(guò)程得到的結(jié)果根據(jù)這一過(guò)程得到的結(jié)果.57開(kāi)閉原則開(kāi)閉原則(Open/Closed Principle, OCP)Liskov替換原則替換原則(Liskov Substitution Principle, LSP)依賴(lài)倒置原則依賴(lài)倒置原則(Dependency Inversion Principle, DSP)接口分離原則接口分離原則(Interface Segregation P
30、rinciple, ISP)58開(kāi)閉原則指的是一個(gè)模塊在開(kāi)閉原則指的是一個(gè)模塊在擴(kuò)展性擴(kuò)展性方面應(yīng)該是開(kāi)放的方面應(yīng)該是開(kāi)放的, 而在更而在更改性方面應(yīng)該是改性方面應(yīng)該是封閉封閉的的.其目的是在寫(xiě)模塊時(shí)其目的是在寫(xiě)模塊時(shí),應(yīng)該盡量使得模塊可以擴(kuò)展應(yīng)該盡量使得模塊可以擴(kuò)展, 并且在擴(kuò)展并且在擴(kuò)展時(shí)不需要對(duì)模塊的源代碼進(jìn)行修改時(shí)不需要對(duì)模塊的源代碼進(jìn)行修改.為達(dá)到開(kāi)閉原則為達(dá)到開(kāi)閉原則, 設(shè)計(jì)時(shí)就盡量使用接口進(jìn)行封閉設(shè)計(jì)時(shí)就盡量使用接口進(jìn)行封閉, 采用抽象采用抽象機(jī)制機(jī)制, 并利用并利用OO中的多態(tài)性技術(shù)中的多態(tài)性技術(shù).59OCP的關(guān)鍵在于抽象的關(guān)鍵在于抽象抽象技術(shù):抽象技術(shù):abstract cl
31、ass, Interface抽象預(yù)見(jiàn)了可能的所有擴(kuò)展(閉)抽象預(yù)見(jiàn)了可能的所有擴(kuò)展(閉)由抽象可以隨時(shí)導(dǎo)出新的類(lèi)(開(kāi))由抽象可以隨時(shí)導(dǎo)出新的類(lèi)(開(kāi))60例例: 某輸出類(lèi)某輸出類(lèi)Output中包含一個(gè)中包含一個(gè)output方法方法, 該方法可能使用多種該方法可能使用多種不同的打印機(jī)不同的打印機(jī), 如如: HP、EPSON、Canon,每種打印機(jī)都有不同,每種打印機(jī)都有不同的的print方法。方法。設(shè)計(jì)方案設(shè)計(jì)方案1 1void output(int printType) if(printType=1) Hp prt = new Hp(); prt.print(args); else if(pri
32、ntType=2) Epson prt = new Epson(); prt.print(args); else 61設(shè)計(jì)方案設(shè)計(jì)方案2 2void output(Printer printer) printer.print(args); 如何增加打印機(jī)類(lèi)型如何增加打印機(jī)類(lèi)型? ?62LSP(The Liskov Substitution Principle, Liskov替換原替換原則)則) “若對(duì)于類(lèi)型若對(duì)于類(lèi)型S的任一對(duì)象的任一對(duì)象o1,均有類(lèi)型,均有類(lèi)型T的對(duì)象的對(duì)象o2存在,使得在存在,使得在T定義的所有程序定義的所有程序P中,用中,用o1替換替換o2之之后,程序的行為不變,則后,程
33、序的行為不變,則S是是T的子類(lèi)型的子類(lèi)型”如果在任何情況下,子類(lèi)(或子類(lèi)型)或?qū)崿F(xiàn)類(lèi)與如果在任何情況下,子類(lèi)(或子類(lèi)型)或?qū)崿F(xiàn)類(lèi)與基類(lèi)都是可以互換的,那么繼承的使用就是合適的。基類(lèi)都是可以互換的,那么繼承的使用就是合適的。為了達(dá)到這一目標(biāo),為了達(dá)到這一目標(biāo),“”6364ABABC6566DIP(依賴(lài)倒置原則,(依賴(lài)倒置原則,The Dependency Inversion Principle)高層模塊不應(yīng)該依賴(lài)于低層模塊。二者都應(yīng)該依賴(lài)高層模塊不應(yīng)該依賴(lài)于低層模塊。二者都應(yīng)該依賴(lài)于抽象于抽象抽象不應(yīng)該依賴(lài)于細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴(lài)于抽象抽象不應(yīng)該依賴(lài)于細(xì)節(jié)。細(xì)節(jié)應(yīng)該依賴(lài)于抽象針對(duì)接口編程,不要針對(duì)實(shí)
34、現(xiàn)編程針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程67依依賴(lài)賴(lài)的的方方向向高級(jí)商業(yè)邏輯中層模塊中層模塊中層模塊底層模塊底層模塊底層模塊底層模塊底層模塊68依依賴(lài)賴(lài)的的方方向向依依賴(lài)賴(lài)的的方方向向高級(jí)商業(yè)邏輯抽象層抽象層抽象層實(shí)現(xiàn)層實(shí)現(xiàn)層實(shí)現(xiàn)層實(shí)現(xiàn)層實(shí)現(xiàn)層6970ISP( The Interface Segregation Principle,接口隔離,接口隔離原則)原則)客戶(hù)不應(yīng)該依賴(lài)他們不用到的方法,只給每個(gè)客戶(hù)客戶(hù)不應(yīng)該依賴(lài)他們不用到的方法,只給每個(gè)客戶(hù)它所需要的接口它所需要的接口為了避免為了避免“肥接口肥接口(fat interface)”,應(yīng)當(dāng)以一個(gè)類(lèi)實(shí),應(yīng)當(dāng)以一個(gè)類(lèi)實(shí)現(xiàn)多個(gè)接口,而各客戶(hù)僅僅獲知必
35、須的接口現(xiàn)多個(gè)接口,而各客戶(hù)僅僅獲知必須的接口7172一個(gè)真實(shí)的例子一個(gè)真實(shí)的例子: 某全文查找引擎的系統(tǒng)設(shè)計(jì)某全文查找引擎的系統(tǒng)設(shè)計(jì).違反接口分離原則違反接口分離原則73探索器接口探索器接口索引生成器接口索引生成器接口搜索結(jié)果集接口搜索結(jié)果集接口功能接口的劃分:功能接口的劃分:74遵守遵守OO設(shè)計(jì)原則設(shè)計(jì)原則.不同類(lèi)中相似方法的名稱(chēng)應(yīng)該相同不同類(lèi)中相似方法的名稱(chēng)應(yīng)該相同.遵守已有的約定俗成的習(xí)慣遵守已有的約定俗成的習(xí)慣.盡量減少消息模式的數(shù)目盡量減少消息模式的數(shù)目. 只要可能只要可能,使消息具有一致使消息具有一致的模式的模式, 以利于理解以利于理解.設(shè)計(jì)簡(jiǎn)單的類(lèi)設(shè)計(jì)簡(jiǎn)單的類(lèi). 類(lèi)的職責(zé)要明確
36、類(lèi)的職責(zé)要明確, 不要在類(lèi)中提供太多不要在類(lèi)中提供太多的服務(wù)的服務(wù), 應(yīng)該從類(lèi)名可以比較容易推斷出用途應(yīng)該從類(lèi)名可以比較容易推斷出用途.泛化結(jié)構(gòu)的深度要適當(dāng)泛化結(jié)構(gòu)的深度要適當(dāng).定義簡(jiǎn)單的方法定義簡(jiǎn)單的方法. 一個(gè)方法內(nèi)不要包含過(guò)多的功能一個(gè)方法內(nèi)不要包含過(guò)多的功能.75好的設(shè)計(jì)的變動(dòng)軌跡好的設(shè)計(jì)的變動(dòng)軌跡: :76對(duì)象圖表示地組對(duì)象及它們之間的關(guān)系對(duì)象圖表示地組對(duì)象及它們之間的關(guān)系. 是系統(tǒng)詳細(xì)狀態(tài)在是系統(tǒng)詳細(xì)狀態(tài)在某一時(shí)刻的快照某一時(shí)刻的快照, 表示復(fù)雜的類(lèi)圖的一個(gè)實(shí)例表示復(fù)雜的類(lèi)圖的一個(gè)實(shí)例.對(duì)象圖的建模元素對(duì)象圖的建模元素: 對(duì)象和鏈對(duì)象和鏈對(duì)象圖在對(duì)象圖在UML建模中使用有限建模中使
37、用有限, 用于表達(dá)數(shù)據(jù)結(jié)構(gòu)的示例用于表達(dá)數(shù)據(jù)結(jié)構(gòu)的示例, 了解了解系統(tǒng)在某個(gè)特定時(shí)刻的具體情況系統(tǒng)在某個(gè)特定時(shí)刻的具體情況.77對(duì)象名:由于對(duì)象是一個(gè)類(lèi)的實(shí)例,因此其名稱(chēng)的格式對(duì)象名:由于對(duì)象是一個(gè)類(lèi)的實(shí)例,因此其名稱(chēng)的格式是是“對(duì)象名:類(lèi)名對(duì)象名:類(lèi)名”,這兩個(gè)部分是可選的,但如果是,這兩個(gè)部分是可選的,但如果是包含了類(lèi)名,則必須加上包含了類(lèi)名,則必須加上“:”,另外為了和類(lèi)名區(qū)分,另外為了和類(lèi)名區(qū)分,還必須加上下劃線。還必須加上下劃線。屬性:由于對(duì)象是一個(gè)具體的事物,因此所有的屬性值屬性:由于對(duì)象是一個(gè)具體的事物,因此所有的屬性值都已經(jīng)確定,因此通常會(huì)在屬性的后面列出其值。都已經(jīng)確定,因此
38、通常會(huì)在屬性的后面列出其值。78類(lèi)圖類(lèi)圖對(duì)象圖對(duì)象圖小王小王是一個(gè)愛(ài)書(shū)之是一個(gè)愛(ài)書(shū)之人人,家里家里各類(lèi)各類(lèi)書(shū)籍書(shū)籍已過(guò)千冊(cè),而平時(shí)已過(guò)千冊(cè),而平時(shí)又時(shí)常有又時(shí)常有朋友朋友外借,因此需要一個(gè)外借,因此需要一個(gè)個(gè)人圖書(shū)管理系統(tǒng)個(gè)人圖書(shū)管理系統(tǒng)。該系統(tǒng)應(yīng)該能夠?qū)?shū)籍的該系統(tǒng)應(yīng)該能夠?qū)?shū)籍的基本信息基本信息按按計(jì)算機(jī)類(lèi)計(jì)算機(jī)類(lèi)、非計(jì)算非計(jì)算機(jī)類(lèi)機(jī)類(lèi)分別建檔,實(shí)現(xiàn)按分別建檔,實(shí)現(xiàn)按書(shū)名書(shū)名、作者作者、類(lèi)別類(lèi)別、出版社出版社等等關(guān)關(guān)鍵字鍵字的組合查詢(xún)的組合查詢(xún)功能功能。在使用該系統(tǒng)錄入。在使用該系統(tǒng)錄入新書(shū)籍新書(shū)籍時(shí)時(shí)系統(tǒng)系統(tǒng)會(huì)自動(dòng)按會(huì)自動(dòng)按規(guī)則規(guī)則生成生成書(shū)號(hào)書(shū)號(hào),可以修改,可以修改信息信息,但一經(jīng)創(chuàng)建
39、就,但一經(jīng)創(chuàng)建就不允許刪除。該系統(tǒng)還應(yīng)該能夠?qū)?shū)籍的外借情況進(jìn)行不允許刪除。該系統(tǒng)還應(yīng)該能夠?qū)?shū)籍的外借情況進(jìn)行記錄記錄,可對(duì),可對(duì)外借情況列表外借情況列表打印。另外,還希望能夠?qū)?shū)打印。另外,還希望能夠?qū)?shū)籍的籍的購(gòu)買(mǎi)金額購(gòu)買(mǎi)金額、冊(cè)數(shù)冊(cè)數(shù)按按特定時(shí)間周期特定時(shí)間周期進(jìn)行統(tǒng)計(jì)進(jìn)行統(tǒng)計(jì) “小王小王”、“人人”、“家里家里”很明顯是系統(tǒng)外很明顯是系統(tǒng)外的概念,無(wú)須對(duì)其建模;的概念,無(wú)須對(duì)其建模;而而“個(gè)人圖書(shū)管理系統(tǒng)個(gè)人圖書(shū)管理系統(tǒng)”、“系統(tǒng)系統(tǒng)”指的就是指的就是將要開(kāi)發(fā)的系統(tǒng),即系統(tǒng)本身,也無(wú)須對(duì)其進(jìn)將要開(kāi)發(fā)的系統(tǒng),即系統(tǒng)本身,也無(wú)須對(duì)其進(jìn)行建模;行建模;很明顯很明顯“書(shū)籍書(shū)籍”是一個(gè)很重要的
40、類(lèi),而是一個(gè)很重要的類(lèi),而“書(shū)名書(shū)名”、“作者作者”、“類(lèi)別類(lèi)別”、“出版社出版社”、“書(shū)書(shū)號(hào)號(hào)”則都是用來(lái)描述書(shū)籍的基本信息的,因此則都是用來(lái)描述書(shū)籍的基本信息的,因此應(yīng)該作為應(yīng)該作為“書(shū)籍書(shū)籍”類(lèi)的屬性處理,而類(lèi)的屬性處理,而“規(guī)則規(guī)則”是指書(shū)號(hào)的生成規(guī)則,而書(shū)號(hào)則是書(shū)籍的一個(gè)是指書(shū)號(hào)的生成規(guī)則,而書(shū)號(hào)則是書(shū)籍的一個(gè)屬性,因此屬性,因此“規(guī)則規(guī)則”可以作為編寫(xiě)可以作為編寫(xiě)“書(shū)籍書(shū)籍”類(lèi)類(lèi)構(gòu)造函數(shù)的指南。構(gòu)造函數(shù)的指南?!盎拘畔⒒拘畔ⅰ眲t是書(shū)名、作者、類(lèi)別等則是書(shū)名、作者、類(lèi)別等描述書(shū)籍的基本信息統(tǒng)稱(chēng),描述書(shū)籍的基本信息統(tǒng)稱(chēng),“關(guān)鍵字關(guān)鍵字”則是代表其中之一,因此無(wú)需對(duì)其建模則是代表其中
41、之一,因此無(wú)需對(duì)其建?!肮δ芄δ堋薄ⅰ靶聲?shū)籍新書(shū)籍”、“信息信息”、“記錄記錄”都是在描述需求時(shí)使用到的一些都是在描述需求時(shí)使用到的一些相關(guān)詞語(yǔ),并不是問(wèn)題域的本質(zhì),因此相關(guān)詞語(yǔ),并不是問(wèn)題域的本質(zhì),因此先可以將其淘汰掉;先可以將其淘汰掉;“計(jì)算機(jī)類(lèi)計(jì)算機(jī)類(lèi)”、“非計(jì)算機(jī)類(lèi)非計(jì)算機(jī)類(lèi)”是該系是該系統(tǒng)中圖書(shū)的兩大分類(lèi),因此應(yīng)該對(duì)其建統(tǒng)中圖書(shū)的兩大分類(lèi),因此應(yīng)該對(duì)其建模,并改名為模,并改名為“計(jì)算機(jī)類(lèi)書(shū)籍計(jì)算機(jī)類(lèi)書(shū)籍”和和“非非計(jì)算機(jī)類(lèi)書(shū)籍計(jì)算機(jī)類(lèi)書(shū)籍”,以減少歧義;,以減少歧義;“外借情況外借情況”則是用來(lái)表示一次借閱行為,應(yīng)則是用來(lái)表示一次借閱行為,應(yīng)該成為一個(gè)候選類(lèi),多個(gè)外借情況將組成該成為
42、一個(gè)候選類(lèi),多個(gè)外借情況將組成“外外借情況列表借情況列表”,而外借情況中一個(gè)很重要的角,而外借情況中一個(gè)很重要的角色是色是“朋友朋友”借閱主體。雖然到本系統(tǒng)中并借閱主體。雖然到本系統(tǒng)中并不需要建立不需要建立“朋友朋友”的資料庫(kù),但考慮到可能的資料庫(kù),但考慮到可能會(huì)需要列出某個(gè)朋友的借閱情況,因此還是將會(huì)需要列出某個(gè)朋友的借閱情況,因此還是將其列為候選類(lèi)。為了能夠更好地表述,將其列為候選類(lèi)。為了能夠更好地表述,將“外外借情況借情況”改名為改名為“借閱記錄借閱記錄”,而將,而將“外借情外借情況列表況列表”改名為改名為“借閱記錄列表借閱記錄列表”;“購(gòu)買(mǎi)金額購(gòu)買(mǎi)金額”、“冊(cè)數(shù)冊(cè)數(shù)”都是統(tǒng)計(jì)的結(jié)果,都都是統(tǒng)計(jì)的結(jié)果,都是一個(gè)數(shù)字,因此不用將其建模,而是一個(gè)數(shù)字,因此不用將其建模,而“特定時(shí)特定時(shí)限限”則是統(tǒng)計(jì)的范圍,也無(wú)需將其建模;不過(guò)則是統(tǒng)計(jì)的范圍,也無(wú)需將其建模;不過(guò)從這里的分析中,我們可以發(fā)現(xiàn),在該需求描從這里的分析中,我們可以發(fā)現(xiàn),在該需求描述中隱藏著一個(gè)關(guān)鍵類(lèi)述中隱藏著一個(gè)關(guān)鍵類(lèi)書(shū)籍列表,也就是執(zhí)書(shū)籍列表,也就是執(zhí)行統(tǒng)計(jì)的主體。行統(tǒng)計(jì)的主體。在使用在使用“名詞動(dòng)詞法名詞動(dòng)詞法”尋找類(lèi)的時(shí)候,很多團(tuán)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年鄂爾多斯市鄂托克旗事業(yè)單位引進(jìn)人才真題
- 充電站建設(shè)管理制度
- 農(nóng)村停車(chē)位管理制度
- 衛(wèi)健信息化管理制度
- 外賣(mài)火鍋店管理制度
- 實(shí)訓(xùn)室電腦管理制度
- 小公司人事管理制度
- 展柜廠規(guī)章管理制度
- 無(wú)塵室清掃管理制度
- 柴油庫(kù)消防管理制度
- DBJ∕T 13-261-2017 福建省二次供水不銹鋼水池(箱)應(yīng)用技術(shù)規(guī)程
- 二手車(chē)評(píng)估作業(yè)表簡(jiǎn)單實(shí)際樣本
- 中國(guó)歷史地理復(fù)習(xí)資料
- 物資出入庫(kù)單模板
- 05示例:玉米脫粒機(jī)的設(shè)計(jì)(含全套CAD圖紙)
- 北師大版小學(xué)數(shù)學(xué)五年級(jí)下冊(cè)單元測(cè)試題含答案(全冊(cè))
- 護(hù)理技術(shù)—鼻飼法課件
- 相關(guān)面料檢測(cè)報(bào)告4399f2ab1d0e4e789f57024e89d79cec
- 多重耐藥菌病人的護(hù)理ppt課件
- 肺膿腫護(hù)理查房ppt課件
- 關(guān)于種類(lèi)物與特定物的區(qū)別及意義
評(píng)論
0/150
提交評(píng)論