資源描述:
《§8_包圖、組件圖、部署》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、1包(Package)重點(diǎn):1.包的定義2.在設(shè)計(jì)包時(shí)應(yīng)遵循的原則1.1包的基本概念包用于定義一個(gè)名字空間或容器(Container)。它本身也是UML的一種模型元素。運(yùn)用包可以把語義上相近的可能一起變更的模型元素組織在同一個(gè)包里,對(duì)包中的元素作為一個(gè)整體對(duì)待,并且控制它們的可見性和存取。定義:包是一種對(duì)模型元素進(jìn)行成組組織的通用機(jī)制。軟件開發(fā)時(shí)常見的一個(gè)問題是如何把一個(gè)大系統(tǒng)分解為多個(gè)較小系統(tǒng)。分解是控制軟件復(fù)雜性的重要手段。在結(jié)構(gòu)化方法中,考慮的是如何對(duì)功能進(jìn)行分解,而在OO方法中,需要考慮的是如
2、何把相關(guān)的類放在一起,而不再是對(duì)系統(tǒng)的功能進(jìn)行分解。包在開發(fā)大型軟件系統(tǒng)時(shí)是一個(gè)非常重要的機(jī)制。包中的元素不僅僅限于類.可以是任何UML建模元素。包就像一個(gè)“容器”,可用于組織模型中的相關(guān)元素以便更容易理解。如圖1.1所示是一個(gè)包的例子。AWT+Window#Form-EventHandler圖1.1AWT包圖1.1中的AWT包有3個(gè)元素:Window、Form和EventHandler。其中window的可見性為公有的(Public),表示在任何導(dǎo)入(import)AWT包的包中,都可以引用Wind
3、ow這個(gè)元素;Form的可見性為保護(hù)的(protected),表示只有AWT包的子包才可以引用Form這個(gè)元素;EventHandler的可見性為私有的(privated),表示只有在AWT包中才可以引用EventHandler這個(gè)元素。對(duì)包的命名有兩種方式,即簡(jiǎn)單包名名(simplename)和路徑包名(pathname)。例如Vision)是一個(gè)簡(jiǎn)單的包名,而Sensors::Vision是帶路徑的包名。其中Sensors是Vision包的外圍包,也就是說,Vision包是嵌套在Sensors包中
4、的。包可以嵌套,但在實(shí)際應(yīng)用中,嵌套層次不應(yīng)太深。包中可以包含其他建模元素,如類、接口、組件、節(jié)點(diǎn)、用例、包等。就像對(duì)類的屬性和操作可以進(jìn)行可見性控制一樣,對(duì)包中元素也可以進(jìn)行可見性控制。AWT+Window#Form-EvebtHandler圖1.1AWT包包與包之間可以存在依賴關(guān)系,但這種依賴關(guān)系沒有傳遞性。如圖1.2所示是包之間非傳遞依賴的例子,包UserServices依賴于包BusinessServices,包BusinessServices又依賴于包DataServices,但包UserS
5、ervices并不依賴于包DataServices。圖中的依賴關(guān)系的版型都是《import》,表示源包會(huì)存取目的包中的內(nèi)容,同時(shí)目的包中的內(nèi)容是加到源包的名字空間的。這樣在引用目的包中的內(nèi)容時(shí)不需要加包名限定,直接用目的包中的元素名字即可。UserServicesBusinessServicesDataServices圖1.2包之間的非傳遞依賴關(guān)系《import》《import》另外,與UML中其他建模元素類似,包之間也可以有泛化關(guān)系。子包繼承了父包中可見性為public和protected的元素。圖
6、1.3包之間的泛化關(guān)系+Window+Form#EventHandlerGUIMacGUI+GUI::Window+Form#GUI::EventHandler+VBFormWindowsGUI如圖1.3所示是包之間泛化關(guān)系的例子,其中包WindowsGUI泛化了包GUI,包WindowsGUI繼承了包GUI中的Window和EventHandler元素,同時(shí)包WindowGUI重新定義(即覆蓋)了包GUI中的Form元素,而VBForm是包WindowsGUI中新增加的元素。與子類和父類之間存在替換
7、原則一樣,子包和父包之間也存在替換原則,即子包可以出現(xiàn)在父包能出現(xiàn)的任何地方。但是在實(shí)際建模過程中,包之間的泛化關(guān)系很少用到。包是UML中的建模元素,但UML中并沒有一個(gè)包圖,通常一些書上所說的包圖指的就是類圖、用例圖等這些圖,只是在這些圖中只有包這一元素。UML中,包是分組事物(groupingthing)的一種,它是在建模時(shí)用來組織模型中的元素的,在系統(tǒng)運(yùn)行時(shí)并不存在包的實(shí)例。這點(diǎn)和類不一樣,類在運(yùn)行時(shí)會(huì)有實(shí)例(即對(duì)象)存在。1.2設(shè)計(jì)包的原則在考慮如何對(duì)類進(jìn)行分組并放入不同的包時(shí),主要是根據(jù)類之
8、間的依賴關(guān)系進(jìn)行分組。包中的類應(yīng)該是功能相關(guān)的,在建立包時(shí),應(yīng)把概念上和語義上相近的模型元素納入一個(gè)包。依賴關(guān)系其實(shí)是耦合的一種體現(xiàn),如果兩個(gè)包中的類之間存在依賴關(guān)系,那么這兩個(gè)包之間也就有了依賴關(guān)系,也就存在了耦合關(guān)系。好的設(shè)計(jì)要求體現(xiàn)高內(nèi)聚、低耦合的特性。在設(shè)計(jì)包時(shí),應(yīng)遵循以下原則:重用等價(jià)原則(ReuseEquivalencyPrinciple,REP)共同閉包原則(CommonClosurePrinciple,CCP)共同重用原則(CommonR