UML 初級篇 Class 3 (package)

  • 3244
  • 0
  • UML
  • 2010-07-24

UML 初級篇 Class 3 (package)

Class 1 and 2 是說明如何使用(How to use), 但考試的重點是在為什麼可以這樣用(Why can use)

因此必須就要K規格書以及母模(metamodel)了,

不過讀規格書真的很無聊, 由其是按照它的章節去讀,

完全弄得一團亂 ...

我自己後來是逆著看, 先上課有概念, 然後先不看abstract meta class (太抽象了)

而是改由寫程式的方式來看內容

方向大致上:   package -> interface -> class -> abstract meta class

方式:

1. 本身是什麼, 有什麼

2. 父類別是什麼, 有什麼

3. 其它有關係的類別是什麼, 有什麼

 

先讓腦袋來一點不一樣的, UML 沒有教的觀念簡述, 如果不懂也沒關係, 往後多看幾個章節, 就會有意會.

1. 形 與 名 : 形本身是存在的, 名稱是人類給予的. 如: 前者是"氧氣" 後者是被命名為"氧氣"

2. 框 與 線 : 框是用來限制, 線是用來連結的. 如: 前者是物件 後者是關連

3. 類別部份抽象化 : 從多個類別中我們會發現某些共同點且有意義之語義, 將它抽象化變為抽象類別(或介面).

4. 抽象類別 : 不可誕生個體.

 

一. 套件 
package

============================================================

1. Package (套件 , 框, 類別)

  1.1 Package 繼承Nampespace : 直覺想到 qualified name , 套件除了自己有名字之外 , 亦給予其項下之元素名字. 如 : java::lang::String , System::Collection::List

  1.2 Package 繼承PackageableElement : 所以自己也可以被其它套件包住(0..1 -> *). 如: java::util ,  System.Data.SqlClient. 父套件稱為nestingPackage包的稱為nestedPackage.

  1.3 Package 是用來將PackageableElement群組起來. 不是所有元素都可以套住 如: 無形的東西, 鬼魂 , 人的思想

  1.4 Package 不只是包住類別, 仍然可以包住如: UseCase ... 等元素. (Member)

  1.5 Package 最常見是包住類別, 母模是用較高層次的Type來關連, 但又寫了ownedClassifier, (Type是Classifier的父類別) <-- 為什麼是用Type而不是Classifier, 我還在找原因

  1.6 Package 本身很惡霸, 如果它被砍了, 他項下的Member, Classifier, Package 及 PackageMerge 都會被砍光.

  1.7 Package 連想到Visibility, <<enumeration>> VisibilityKind 中的 package (~)

package_presentation Package 示意圖: Package像"裝水果的箱子", Namespace是"水果箱"

 

 

 package_notation 3種package的表示法

 

============================================================

2. PackageMerge (套件合併 , 線 , 類別)

packagemerge_notation 

  2.1 package 可類似類別繼承般, 去merge另一個package, 讓mergingPackage(擴大方) 擴有更多的元素.

  2.2 PackageMerge 繼承自DirectedRelationShip , 故是一種具向關係, 由merging package 為來源端, merged package為目標端, 並由stereotype <<merge>>來做表示.

  2.3 PackageMerge 的概念圖如下, 是將 B 套件擴充成 B' . 不是nesting package的層層包裝, 而是建立一個新的package.

packagemerge_concept

  2.4 PackageMerge的transform flow:

      a. 將merged package中的元素拉入resulting package中, 並增加套件名稱以示別.

      b. 將merged package中與receiving package同名元素, 複製一份為receiving package元素, 並繼承自原本元素.

      c. 將merged package中與receiving package同名之元素, 做一般化關係.

packagemerge_example

 

============================================================

3. PackageImport (套件匯入, 線 , 類別)

packageimport

    3.1 Namespace(Package為其實作類別)可以去引用另一個套件(importedPackage), 即可引用該套件的所有元素. 是一種具向的關係

    3.2 Merge是is , Import是has

    3.3 屬性 - visibility:VisibilityKind. public import <<import>> | private import <<access>> , <<access>> 表示第3方package 要import 第2方時是看不到第1方的

    3.4 當importing(主動方)的名稱空間(NampleSpace) 消滅時 PackageImport亦會被刪除

 

packageimport_ex