軟件設(shè)計(jì)師UML知識(shí)點(diǎn):第五章通用機(jī)制

字號(hào):

UML中的四種機(jī)制使地它簡(jiǎn)單和更易于使用,你可以在UML語(yǔ)言的任何時(shí)候用同樣的方法來(lái)使用,這四種機(jī)制是:
    l specifications
    l adornments
    l common divisions
    l extensibility
    本章討論adornments和extensibility這兩種機(jī)制。
    注釋是最重要的一種修飾。一個(gè)注釋在UML中是一個(gè)圖形符號(hào),描述了和它相關(guān)聯(lián)的元素或一組元素的限制或注釋語(yǔ)。
     上圖就是一個(gè)使用注釋的例子,圖中右邊的為注釋符號(hào)。
     UML的擴(kuò)充性機(jī)制允許你在控制的方式下擴(kuò)充UML語(yǔ)言。這一類(lèi)的機(jī)制包括:stereotype,標(biāo)記值、約束。Stereotype擴(kuò)充了UML的詞匯表,允許你創(chuàng)建新的建筑塊,這些建筑塊從已有的繼承而來(lái),但特別針對(duì)你的問(wèn)題。標(biāo)記值擴(kuò)充了UML的建筑塊的屬性,允許你在元素的規(guī)格中創(chuàng)建新的信息。約束擴(kuò)充了UML建筑塊的語(yǔ)義,允許你添加新的規(guī)則或修改已有的。你將使用這些機(jī)制來(lái)讓UML滿(mǎn)足你的領(lǐng)域和開(kāi)發(fā)的特別需要。
    上面是一個(gè)使用擴(kuò)充機(jī)制的例子。<>是stereotype,{version = 3.2}是標(biāo)記值
    術(shù)語(yǔ)和概念
     注釋是一種圖形符號(hào)用來(lái)限制或給一個(gè)元素或一組元素加上注解。注釋畫(huà)成一個(gè)帶折角的矩形,在矩形中加上文字或圖形的注解,stereotype是UML詞匯的擴(kuò)充,允許你創(chuàng)建新的UML建筑塊,這些新的建筑塊和原有的類(lèi)似,但特別針對(duì)你自己的問(wèn)題。通常stereotype畫(huà)成用<<和>>包圍起來(lái)的一個(gè)名字,通常放在另一個(gè)元素的名字之上。作為可選,stereotype可以畫(huà)成加一個(gè)圖標(biāo)。
     標(biāo)記值是UML元素特性的擴(kuò)充,允許你創(chuàng)建元素規(guī)格的新的信息。在UML中標(biāo)記值畫(huà)成{}內(nèi)的字符串,跟在元素名后面。
     限制是UML元素語(yǔ)義的擴(kuò)充,允許你對(duì)一個(gè)UML元素添加新規(guī)則或修改存在的規(guī)則。限制通常畫(huà)成{}內(nèi)的字符串,放在關(guān)系附近。當(dāng)然,你也可以把限制用注釋來(lái)表示。
    通用建模技術(shù)
    1. 建模注解
    使用注釋的目的是為了讓模型更清晰,下面是使用注釋的一些技巧:
    l 將注釋放在你要注解的元素邊上,寫(xiě)下注解的文字。用依賴(lài)關(guān)系的線將注釋和被注釋的元素連起來(lái)會(huì)讓人更明白。
    l 記住,你可以隱藏元素或使隱藏的元素可見(jiàn)。這就意味著你可以將注釋不隱藏起來(lái),而她注釋的元素是可見(jiàn)的,這樣會(huì)使你的模型圖簡(jiǎn)潔,在必要的地方讓注釋可見(jiàn)。
    l 如果你的注釋很長(zhǎng)或不僅僅是普通文本,你可以將你的注解放到一個(gè)獨(dú)立的外部文件中(如WORD文檔)然后鏈接或嵌入到你的模型中。
    下面是一個(gè)使用注解的例子:
    建立新的建筑塊
     UML的建筑塊如:類(lèi)、接口、合作、組件、注釋、關(guān)系等等,都在為具體問(wèn)題建模的時(shí)候基本上是夠用了。然而,如果你想擴(kuò)展你的模型的詞匯,如用來(lái)表示你的特定的問(wèn)題領(lǐng)域,你需要stereotypes。
     建立新的建筑塊有如下的技巧:
    l 確定沒(méi)有現(xiàn)成的基本的UML方法可以表達(dá)你的需要。如果你碰到一個(gè)普通的建模問(wèn)題,很有可能已經(jīng)有某種標(biāo)準(zhǔn)的stereotype是你想要的。
    l 如果你確信沒(méi)有現(xiàn)成的東西可以表達(dá)這些語(yǔ)義,首先找到一個(gè)UML中的最接近你要建立的模型的元素(例如:類(lèi)、接口、組件、注釋、關(guān)系等等)然后為她定義一個(gè)stereotype。值得一提的是你可以定義stereotypes的層次從而得到一般的stereotypes和為它定義的特別的特性。這種方法盡量少用。
    l 通過(guò)對(duì)普通的stereotype定義一組標(biāo)記值和對(duì)stereotype進(jìn)行限制可以實(shí)現(xiàn)普通stereotype不能實(shí)現(xiàn)的功能。
    l 如果你希望這些stereotype具有不同的視覺(jué)效果,為他們定義一個(gè)特別的圖標(biāo)。
    上面是一個(gè)例子。假如你用活動(dòng)圖來(lái)為一個(gè)涉及到教練工作流和隊(duì)員工作流的體育活動(dòng)建模。在這里,區(qū)別教練和運(yùn)動(dòng)員以及與其他的本領(lǐng)域的對(duì)象是有意義的。上面的圖中有兩個(gè)事物是很突出的,教練對(duì)象和隊(duì)員對(duì)象。這里不僅僅是普通的類(lèi),更確切地說(shuō),他們現(xiàn)在是兩個(gè)新的建筑塊。因?yàn)槎x了教練和員stereotype,并且運(yùn)用到了UML的類(lèi)上。在這個(gè)圖上,被標(biāo)記為:Coach和:Team的匿名實(shí)例,后者顯示了不同的狀態(tài)。
    建模新屬性
    UML建筑塊的基本屬性如:類(lèi)的屬性和操作,包的內(nèi)容等等,都足夠描述清楚你要建立的模型。然而,如果你想擴(kuò)展這些基本建筑塊(或者用stereotype建立的新的建筑塊)的屬性,你就需要使用標(biāo)記值。
    下面是一些技巧:
    l 首先要確定的是你的需要無(wú)法用基本的UML表達(dá)。如果你碰到一個(gè)普通的建模問(wèn)題,很有可能已經(jīng)有某種標(biāo)準(zhǔn)的標(biāo)記值是你想要的
    l 如果你確定沒(méi)有其他的方法可以表達(dá)你需要的語(yǔ)義,添加新的屬性到一個(gè)單獨(dú)的元素或一個(gè)stereotype。繼承的規(guī)則是適用的,也就是說(shuō)對(duì)父親定義的標(biāo)記值對(duì)兒子也具有。
    建立新的語(yǔ)義
     當(dāng)你用UML建立模型的時(shí)候,你總是使用UML定義的規(guī)則,這實(shí)在是件好事,因?yàn)閯e的懂得如何讀UML的人可以毫無(wú)偏差地讀懂你想要表達(dá)的東西。然而,如果你發(fā)現(xiàn)你需要表達(dá)的語(yǔ)義是UML無(wú)法表達(dá)的或你想要修改UML的規(guī)則,這時(shí)你就需要使用限制了。下面是使用限制的一些技巧:
    l 首先要確定的是你的需要無(wú)法用基本的UML表達(dá)。如果你碰到一個(gè)普通的建模問(wèn)題,很有可能已經(jīng)有某種標(biāo)準(zhǔn)的限制是你想要的。
    l 如果你確定沒(méi)有其他的方法可以表達(dá)你需要的語(yǔ)義,用文本的形式在限制中寫(xiě)下你的新語(yǔ)義,并且將他放在他涉及的元素附近。你可以使用依賴(lài)關(guān)系來(lái)明確地表示限制和他涉及的元素之間的關(guān)聯(lián)。
    l 如果你需要詳細(xì)說(shuō)明你的語(yǔ)義,你可以用使用OCL把它寫(xiě)下來(lái)。
    下面的圖是一個(gè)公司人力資源系統(tǒng)的一小部分:
    這副圖顯示了每個(gè)Person可能是0個(gè)或多個(gè)Department的成員。每個(gè)Department至少要有一個(gè)Person成員。這副圖進(jìn)一步說(shuō)明每個(gè)Department嚴(yán)格地有一個(gè)Person作為管理者,每個(gè)Person可以是0個(gè)或多個(gè)Department的被管理人員。所有的這些語(yǔ)義可以被簡(jiǎn)單的UML表達(dá)。然而,為了指出一個(gè)管理者必須也是Department的成員是多員關(guān)系所忽略的,也是簡(jiǎn)單的UML無(wú)法表達(dá)的。為了表達(dá)這種關(guān)系,你必須寫(xiě)下一個(gè)限制指出管理者是Department成員的一個(gè)子集。從子集到超集用依賴(lài)關(guān)系將兩個(gè)關(guān)系聯(lián)系起來(lái)。