UML依賴特征和使用時(shí)注意事項(xiàng)
本文和大家重點(diǎn)討論一下UML依賴關(guān)系,在學(xué)習(xí)UML的過(guò)程中,你經(jīng)常會(huì)遇到UML關(guān)系問(wèn)題,你對(duì)此是否了解,這里和大家分享一下UML依賴關(guān)系,希望本文的介紹對(duì)你學(xué)習(xí)UML有幫助。
UML學(xué)習(xí)筆記——依賴關(guān)系
UML依賴關(guān)系的特征
對(duì)于兩個(gè)相對(duì)獨(dú)立的系統(tǒng),當(dāng)一個(gè)系統(tǒng)負(fù)責(zé)構(gòu)造另一個(gè)系統(tǒng)的實(shí)例,或者依賴另一個(gè)系統(tǒng)的服務(wù)時(shí),這兩個(gè)系統(tǒng)之間主要體現(xiàn)為依賴關(guān)系,例如生產(chǎn)零件的機(jī)器和零件,機(jī)器負(fù)責(zé)構(gòu)造零件對(duì)象。再例如充電電池和充電器,充電電池通過(guò)充電器來(lái)充電。再例如自行車Bicycle和打氣筒Pump,自行車通過(guò)打氣筒來(lái)充氣。圖1-39為Bicycle類與Pump類的類框圖。
圖1-39Bicycle類與Pump類的依賴關(guān)系
Bicycle類和Pump類之間是UML依賴關(guān)系,在Bicycle類中無(wú)需定義Pump類型的變量。Bicycle類的定義如下:
- publicclassBicycle{
- /**給輪胎充氣*/
- publicvoidexpand(Pumppump){
- pump.blow();
- }
- }
在現(xiàn)時(shí)生活中,通常不會(huì)為某一輛自行車配備專門的打氣筒,而是在需要充氣的時(shí)候,從附近某個(gè)修車棚里借個(gè)打氣筒打氣。在程序代碼中,表現(xiàn)為Bicycle類的expand()方法有個(gè)Pump類型的參數(shù)。以下程序代碼表示某輛自行車先后到兩個(gè)修車棚里充氣:
myBicycle.expand(pumpFromRepairShed1);//到***個(gè)修車棚里充氣
myBicycle.expand(pumpFromRepairShed2);//若干天后,到第二個(gè)修車棚里充氣
UML依賴關(guān)系使用注意事項(xiàng)
1.對(duì)存在依賴關(guān)系的兩個(gè)類生成代碼時(shí),并不對(duì)關(guān)系的類增加屬性。但產(chǎn)生支持關(guān)系所需的特定語(yǔ)句。在C++中,生成代碼中會(huì)包括必要的#include語(yǔ)句。
例如類A依賴于類B,類A沒(méi)有B屬性,因此要用其他方法查找B。有三種方法:
如果B是全局的,則類A知道它存在。
如果B實(shí)例化為類A操作中的本地變量,則類A知道它存在。
如果B作為參數(shù)傳遞到類A中,則類A知道它存在。
在依賴關(guān)系中,必須采用這三種方法之一。
關(guān)聯(lián)于UML依賴的第二個(gè)差別在于方向,關(guān)聯(lián)可以是雙向的,而依賴只能是單向的。
2.包之間同樣存在依賴性。例如包A依賴于包B。則不能直接在另一個(gè)應(yīng)用程序中復(fù)用A包,而要同時(shí)復(fù)用B包。而B包更容易復(fù)用,因?yàn)樗鼪](méi)有依賴于其他包。
要確定包依賴性關(guān)系,就要檢查Class框圖中的關(guān)系。如果不同包中的類之間有關(guān)系,則包也有關(guān)系。
生成包依賴關(guān)系時(shí),要盡量避免循環(huán)依賴性。要避免循環(huán)依賴,可以把一個(gè)包一分為二。
【編輯推薦】
- 專家解析 UML依賴和聚集關(guān)系有何異同
- UML依賴和UML關(guān)聯(lián)關(guān)系的異同點(diǎn)解析
- UML基礎(chǔ) UML構(gòu)件圖簡(jiǎn)介
- UML依賴、關(guān)聯(lián)、聚集等關(guān)系的特征解析
- UML依賴特征和使用注意事項(xiàng)解析