分類: 設(shè)計(jì)模式 java 2012-06-07 18:34 624人閱讀 評(píng)論(2) 收藏 舉報(bào)
類與類圖
1) 類(Class)封裝了數(shù)據(jù)和行為,是面向?qū)ο蟮闹匾M成部分,它是具有相同屬性、操作、關(guān)系的對(duì)象集合的總稱。
2) 在系統(tǒng)中,每個(gè)類具有一定的職責(zé),職責(zé)指的是類所擔(dān)任的任務(wù),即類要完成什么樣的功能,要承擔(dān)什么樣的義務(wù)。一個(gè)類可以有多種職責(zé),設(shè)計(jì)得好的類一般只有一種職責(zé),在定義類的時(shí)候,將類的職責(zé)分解成為類的屬性和操作(即方法)。
3) 類的屬性即類的數(shù)據(jù)職責(zé),類的操作即類的行為職責(zé)
一、依賴關(guān)系(Dependence):假設(shè)A類的變化引起了B類的變化,則說(shuō)名B類依賴于A類。
? 依賴關(guān)系(Dependency)是一種使用關(guān)系,特定事物的改變有可能會(huì)影響到使用該事物的其他事物,在需要表示一個(gè)事物使用另一個(gè)事物時(shí)使用依賴關(guān)系。大多數(shù)情況下,依 賴關(guān)系體現(xiàn)在某個(gè)類的方法使用另一個(gè)類的對(duì)象作為參數(shù)。
? 在UML中,依賴關(guān)系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
publicclassDriver
{
publicvoiddrive(Carcar)
{
car.move();
}
……
}
publicclassCar
{
publicvoidmove()
{
......
}
……
}
依賴關(guān)系有如下三種情況:
1、A類是B類中的(某中方法的)局部變量;
2、A類是B類方法當(dāng)中的一個(gè)參數(shù);
3、A類向B類發(fā)送消息,從而影響B(tài)類發(fā)生變化;
二、泛化關(guān)系(Generalization):A是B和C的父類,B,C具有公共類(父類)A,說(shuō)明A是B,C的一般化(概括,也稱泛化)
? 泛化關(guān)系(Generalization)也就是繼承關(guān)系,也稱為“is-a-kind-of”關(guān)系,泛化關(guān)系用于描述父類與子類之間的關(guān)系,父類又稱作基類或超類,子類又稱作派生類。在UML中,泛 化關(guān)系用帶空心三角形的直線來(lái)表示。
? 在代碼實(shí)現(xiàn)時(shí),使用面向?qū)ο蟮睦^承機(jī)制來(lái)實(shí)現(xiàn)泛化關(guān)系,如在Java語(yǔ)言中使用extends關(guān)鍵字、在C++/C#中使用冒號(hào)“:”來(lái)實(shí)現(xiàn)。
publicclassPerson
{
protectedStringname;
protectedintage;
publicvoidmove()
{
……
}
publicvoidsay()
{
……
}
}
publicclassStudentextendsPerson
{
privateStringstudentNo;
publicvoidstudy()
{
……
}
}
在UML當(dāng)中,對(duì)泛化關(guān)系有三個(gè)要求:
1、子類與父類應(yīng)該完全一致,父類所具有的屬性、操作,子類應(yīng)該都有;
2、子類中除了與父類一致的信息以外,還包括額外的信息;
3、可以使用父類的實(shí)例的地方,也可以使用子類的實(shí)例;
三、關(guān)聯(lián)關(guān)系(Association):類之間的聯(lián)系,如客戶和訂單,每個(gè)訂單對(duì)應(yīng)特定的客戶,每個(gè)客戶對(duì)應(yīng)一些特定的訂單,再如籃球隊(duì)員與球隊(duì)之間的關(guān)聯(lián)(下圖所示)。
其中,關(guān)聯(lián)兩邊的"employee"和“employer”標(biāo)示了兩者之間的關(guān)系,而數(shù)字表示兩者的關(guān)系的限制,是關(guān)聯(lián)兩者之間的多重性。通常有“*”(表示所有,不限),“1”(表示有且僅有一個(gè)),“0...”(表示0個(gè)或者多個(gè)),“0,1”(表示0個(gè)或者一個(gè)),“n...m”(表示n到m個(gè)都可以),“m...*”(表示至少m個(gè))。
? 關(guān)聯(lián)關(guān)系(Association)是類與類之間最常用的一種關(guān)系,它是一種結(jié)構(gòu)化關(guān)系,用于表示一類對(duì)象與另一類對(duì)象之間有聯(lián)系。
? 在UML類圖中,用實(shí)線連接有關(guān)聯(lián)的對(duì)象所對(duì)應(yīng)的類,在使用Java、C#和C++等編程語(yǔ)言實(shí)現(xiàn)關(guān)聯(lián)關(guān)系時(shí),通常將一個(gè)類的對(duì)象作為另一個(gè)類的屬性。
? 在使用類圖表示關(guān)聯(lián)關(guān)系時(shí)可以在關(guān)聯(lián)線上標(biāo)注角色名。
1) 雙向關(guān)聯(lián):默認(rèn)情況下,關(guān)聯(lián)是雙向的。
publicclassCustomer
{
privateProduct[]products;
……
}

publicclassProduct
{
privateCustomercustomer;
……
}
2 )單向關(guān)聯(lián):類的關(guān)聯(lián)關(guān)系也可以是單向的,單向關(guān)聯(lián)用帶箭頭的實(shí)線表示.
publicclassCustomer
{
privateAddressaddress;
……
}
publicclassAddress
{
……
}
3)自關(guān)聯(lián):在系統(tǒng)中可能會(huì)存在一些類的屬性對(duì)象類型為該類本身,這種特殊的關(guān)聯(lián)關(guān)系稱為自關(guān)聯(lián)。
publicclassNode
{
privateNodesubNode;
……
}
4)重?cái)?shù)性關(guān)聯(lián):重?cái)?shù)性關(guān)聯(lián)關(guān)系又稱為多重性關(guān)聯(lián)關(guān)系(Multiplicity),表示一個(gè)類的對(duì)象與另一個(gè)類的對(duì)象連接的個(gè)數(shù)。在UML中多重性關(guān)系可以直接在關(guān)聯(lián)直線上增加一個(gè)數(shù)字表示與之對(duì)應(yīng)的另一個(gè)類的對(duì)象的個(gè)數(shù)。
表示方式
多重性說(shuō)明
1..1
表示另一個(gè)類的一個(gè)對(duì)象只與一個(gè)該類對(duì)象有關(guān)系
0..*
表示另一個(gè)類的一個(gè)對(duì)象與零個(gè)或多個(gè)該類對(duì)象有關(guān)系
1..*
表示另一個(gè)類的一個(gè)對(duì)象與一個(gè)或多個(gè)該類對(duì)象有關(guān)系
0..1
表示另一個(gè)類的一個(gè)對(duì)象沒(méi)有或只與一個(gè)該類對(duì)象有關(guān)系
m..n
表示另一個(gè)類的一個(gè)對(duì)象與最少m、最多n個(gè)該類對(duì)象有關(guān)系 (m<=n)
publicclassForm
{
privateButtonbuttons[];
……
}
publicclassButton
{
…
}
四、聚合關(guān)系(Aggregation):表示的是整體和部分的關(guān)系,整體與部分可以分開(kāi).
? 聚合關(guān)系(Aggregation)表示一個(gè)整體與部分的關(guān)系。通常在定義一個(gè)整體類后,再去分析這個(gè)整體類的組成結(jié)構(gòu),從而找出一些成員類,該整體類和成員類之間就形成了聚合 關(guān)系。
? 在聚合關(guān)系中,成員類是整體類的一部分,即成員對(duì)象是整體對(duì)象的一部分,但是成員對(duì)象可以脫離整體對(duì)象獨(dú)立存在。在UML中,聚合關(guān)系用帶空心菱形的直線表示。
publicclassCar
{
privateEngineengine;
publicCar(Engineengine)
{
this.engine=engine;
}
publicvoidsetEngine(Engineengine)
{
this.engine=engine;
}
……
}
publicclassEngine
{
……
}
如:電話機(jī)包括一個(gè)話筒
電腦包括鍵盤、顯示器,一臺(tái)電腦可以和多個(gè)鍵盤、多個(gè)顯示器搭配,確定鍵盤和顯示器是可以和主機(jī)分開(kāi)的,主機(jī)可以選擇其他的鍵盤、顯示器組成電腦;
五、組合關(guān)系(Composition):也是整體與部分的關(guān)系,但是整體與部分不可以分開(kāi).
? 組合關(guān)系(Composition)也表示類之間整體和部分的關(guān)系,但是組合關(guān)系中部分和整體具有統(tǒng)一的生存期。一旦整體對(duì)象不存在,部分對(duì)象也將不存在,部分對(duì)象與整體對(duì)象之 間具有同生共死的關(guān)系。
? 在組合關(guān)系中,成員類是整體類的一部分,而且整體類可以控制成員類的生命周期,即成員類的存在依賴于整體類。在UML中,組合關(guān)系用帶實(shí)心菱形的直線表示。
publicclassHead
{
privateMouthmouth;
publicHead()
{
mouth=newMouth();
}
……
}
publicclassMouth
{
……
}
如:公司和部門,部門是部分,公司是整體,公司A的財(cái)務(wù)部不可能和公司B的財(cái)務(wù)部對(duì)換,就是說(shuō),公司A不能和自己的財(cái)務(wù)部分開(kāi);人與人的心臟.
六、實(shí)現(xiàn)關(guān)系(Implementation):是用來(lái)規(guī)定接口和實(shí)線接口的類或者構(gòu)建結(jié)構(gòu)的關(guān)系,接口是操作的集合,而這些操作就用于規(guī)定類或者構(gòu)建的一種服務(wù)。
?接口之間也可以有與類之間關(guān)系類似的繼承關(guān)系和依賴關(guān)系,但是接口和類之間還存在一種實(shí)現(xiàn)關(guān)系(Realization),在這種關(guān)系中,類實(shí)現(xiàn)了接口,類中的操作實(shí)現(xiàn)了接口中所 聲明的操作。在UML中,類與接口之間的實(shí)現(xiàn)關(guān)系用帶空心三角形的虛線來(lái)表示。
publicinterfaceVehicle
{
publicvoidmove();
}
publicclassShipimplementsVehicle
{
publicvoidmove()
{
……
}
}
publicclassCarimplementsVehicle
{
publicvoidmove()
{
……
}
}
愛(ài)華網(wǎng)本文地址 » http://www.klfzs.com/a/25101013/151796.html
愛(ài)華網(wǎng)



