11月 13, 2010

UML class diagram

UML 類別表示法


+-----------------------------------+
| P_data |
+-----------------------------------+
| + name :String |
| ~ age :Integer=30 | /* age 預設是 30歲 */
| ~ blood :String |
| ~ dept :String ="IT" {read-only} | /* const string dept */
+-----------------------------------+
| + P_data(A:int, B:String) | /* 建構子 */
| + setAge(x:int) :Bool | /* 我吃 int 回傳 bool */
| + getAge() :Integer |
+-----------------------------------+
權限值表示法
public : +
private : -
protected: # (口訣:我用井字把你圍起來,保護你)
package : ~ (package 是 Java 才有的)

以下解說類別間的關係

class GraphCreater
{
Triangle* createTriangle()
{ return new Triangle(); }
}

class AirPlane
{
Passenger *pList;
Wing myWing;

~AirPlane()
{ delete myWing; }
}
物件之間的關系:相依、關聯、Aggregation、Composition
(口訣:虛線、實線、空心◇、實心◆)

(1) 相依 Dependent ( ---> )
只有在「執行到某函式」時才會用到其他類別,
例如上例 createTriangle() 才會用到 Triangle 類別

(2) 關聯 Association ( ── )
用來表示兩個類別間有關聯,但是並沒有從屬、包含的關係;兩者獨立存在。
在程式裡的表現會用「指標」。這個關係並沒有很強,因為指標可以指向空值。

思考: [飛機]──[乘客] 與 [飛機]◇─[乘客]
後者不合理!! 乘客並不是飛機的一部份,所以使用關聯等級較恰當

(補充)
[類別 A] ── [類別 B]
A,B 相互知道彼此 (即由A可查出B,反之亦是。如:訂單──客戶)

class A { B *ptr } /* 在 A 中有個指向 B 的指標 ,反之 B 也是 */
class B { A *ptr } /* 當然指標可以是 NULL 所以關係很弱 */

[類別 A] ──>[類別 B]
A 中有個指標指向 B,但 B 不知道 A 的存在。
  class A { B *ptr }
(3) 聚集 Aggregation ( ◇─ )
思考: [飛機]◇─[機翼] 與 [飛機]◆─[機翼]

前者表示,當飛機消失了,機翼可以單獨存在。不合理!!
後者表示,當飛機消失了,機翼也要一併消損。較合理!!

另個例子:[飛機]◇─[餐車]
飛機上空姐會推著餐車,即使今天該架飛機拆了,
餐車仍可移到別台飛機使用。所以在這邊可以用 Aggregation 就好。

(4) 組合 Composition ( ◆─ )
這個關係很強,當主體被銷毀後,附屬者也不會存在了。
比如說上例的飛機,當飛機消失了,機翼也不存在。
在程式裡的表現,就是用一個 解構子(Destructor)。

沒有留言:

張貼留言