• 沒有找到結果。

Design Pattern 資訊儲存

3.  Design Pattern 資訊儲存與轉換

3.2  Design Pattern 資訊儲存

NetBeans UML 的內部資料結構是一個 XML 文件,根據 design pattern 的設計,

17

每個interfaces、classes、methods 和 variables 都可能在 design pattern 中扮演一個角 色。因此在XML 文件當中每個描述 interfaces、classes、methods 和 variables 的 xml node 都要能夠追加描述 design pattern 資訊的欄位。我們選擇利用 NetBeans 現有的 XML element <UML:TaggedValue>,然後利用這個 node 來紀錄 design pattern 的資 訊。按照2.4.1 的介紹,element <UML:TaggedValue>是 element <UML:Element.

ownedElement>的一個 sub element。

紀錄design pattern 資訊的 XML element 如表 3-1 定義之,其中的黑體字是我 們要填入的資訊。PatternType 可以被使用者編輯,但它的內容在後續規定,Pattern- Info 則任由使用者編輯,它的內容將會是 design pattern 的資訊。

-<UML:TaggedValue xmi.id="idformIDE" owner=" idformIDE " name="PatternType">

<UML:TaggedValue.dataValue>PatternInfo</UML:TaggedValue.dataValue>

</UML:TaggedValue>

表 3-1 : 紀錄 design pattern 資訊的 XML element

PatternType 所表達的 UML 元件 PatternType 的內容

Interface、Class or Enumeration patternClass

Operation patternOperation

Attribute pattern Attribute

表 3-2 : 對應 UML 元件類型的 PatternType 內容

xmi.id 和 owner 將由 NetBeans 自行創建,並且內容由 NetBeans 負責管理,

而name 這個 attribute 用來紀錄 PatternType,PatternType 是此 XML element 所描述 的元件類型,PatternType 的內容如表 3-2 的方式定義。PatternInfo 是 node 的內容,

用來紀錄此元件的 design pattern 資訊。以圖 3-2 的類別 OPEN 為例子,它的 PatternType 的 內 容 將 會 是 “patternClass” , 而 PatternInfo 的 內 容 則 為

“ConcreteState”。PatternType 的內容取決於此 element 所描述的元件類型,由表 3-2

18

定義;而PatternInfo 的內容將表達此元件在 design pattern 中扮演的角色,按照圖 3-1 與圖 3-2 的對應,PatternInfo 的內容為”ConcreteState”,因為類別 OPEN 代表 的是 ConcreteState,它必須實做 abstrct 類別 State。表 3-3 將描述類別 OPEN 在 UML 中所帶有的 design pattern 資訊,這是利用<UML:TaggedValue>來記錄資訊。

-<UML:TaggedValue xmi.id="idformIDE" owner=" idformIDE " name=" patternClass ">

<UML:TaggedValue.dataValue> ConcreteState </UML:TaggedValue.dataValue>

</UML:TaggedValue>

表 3-3 : 類別 OPEN 的 design pattern 資訊

利 用 <UML:TaggedValue> 紀 錄 design pattern 資 訊 的 主 要 原 因 是

<UML:TaggedValue>這個 node 是 NetBeans 本身提供給使用者編輯的欄位。使用

<UML:TaggedValue>紀錄 design pattern 資訊的好處是使用者可以利用 NetBeans 現 有的介面直接進行編輯,而省去我們修改NetBeans UI 的麻煩。另一個好處是因為

<UML:TaggedValue>可以有兩個以上,依照程式開發者設計的不同,同樣的 UML 元件可能同時扮演著design pattern 中的兩個角色;另一個重要的原因是,UML 在 生成source code 時,我們將利用 java annotation 來記錄此資訊,同樣的兩個以上的 java annotation 可以同時描述於一個類別(或其他元件)。根據 UML 設計上的要求與 java annotation 的特性,<UML:TaggedValue>符合我們的需求,因此利用它來記錄 design pattern 資訊。

上述是利用 element <UML:TaggedValue>來記錄 design pattern 資訊。因為

<UML:TaggedValue>是一個可以編輯的欄位,為了避免使用者的錯誤編輯,我們另 外設計了一個XML attribute 來記錄 design pattern 資訊,而這個 node 將無法被使用 者所編輯。

紀錄annotation 的 XML attribute 如表 3-4 定義之,其中的黑體字是我們要填 入的內容,但使用者並不能編輯。

19

<UML:(UML 元件) xmi.id=" idformIDE " name="editByUser" isAbstract=" editByUser "

owner="idformIDE" PatternType =" PatternInfo ">

表 3-4 : 紀錄 design pattern 資訊的 XML attribute

PatternType 與 PatternInfo 的內容與 element(表 3-1)的定義相同,差別在於 PatternType 將轉為 attribute 的名稱,PatternInfo 將會是 attribute 的內容。同樣的對 照於圖 3-1 與圖 3-2,我們挑選 OPEN 類別的方法 beTouched 做為例子,它的 XML node 內容將會如表 3-5。PatternType 為“PatternOperation”用來代表這是一個 opera- tion,接著 PatternInfo 為 “Handle”用來記錄它所扮演的角色。

<UML:Opration xmi.id=" idformIDE " name="beTouched" isAbstract="no" owner="idformIDE"

PatternOperation =" Handle ">

表 3-5 : 方法 beTouched 的 XML 內容與 design pattern 資訊

在往後的章節,不論是利用XML element 或是 XML attribute,都將用來記錄 design pattern 的資訊,因此我們稱這些 node 為 pattern node。

20