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. 抽象類別 : 不可誕生個體.
============================================================
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 示意圖: Package像"裝水果的箱子", Namespace是"水果箱"
============================================================
2. PackageMerge (套件合併 , 線 , 類別)
2.1 package 可類似類別繼承般, 去merge另一個package, 讓mergingPackage(擴大方) 擴有更多的元素.
2.2 PackageMerge 繼承自DirectedRelationShip , 故是一種具向關係, 由merging package 為來源端, merged package為目標端, 並由stereotype <<merge>>來做表示.
2.3 PackageMerge 的概念圖如下, 是將 B 套件擴充成 B' . 不是nesting package的層層包裝, 而是建立一個新的package.
2.4 PackageMerge的transform flow:
a. 將merged package中的元素拉入resulting package中, 並增加套件名稱以示別.
b. 將merged package中未與receiving package同名元素, 複製一份為receiving package元素, 並繼承自原本元素.
c. 將merged package中與receiving package同名之元素, 做一般化關係.
============================================================
3. 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亦會被刪除