寫給C++程式設計師的UML實務手冊//讀書心得

  1. 寫給C++程式設計師的UML實務手冊//讀書心得
    1. 本文目錄
    2. 類別圖
      1. 結合關係
        1. 一對一結合關係
        2. 一對多結合關係
        3. 多對一結合關係
      2. 組合關係
      3. 依賴關係
      4. 一般化關係
        1. protected權限的一般化關係
        2. 有虛擬函數的一般化關係
    3. 循序圖
      1. 循序圖與類別圖的耦合
        1. 結合關係
        2. 結合關係
        3. 結合關係
        4. 組合關係
        5. 依賴關係
        6. 一般化關係
      2. 循序圖和.cpp的實作
        1. private操作
        2. protected操作
        3. new操作
        4. delete操作
      3. 通訊圖
    4. 案例圖
    5. 狀態圖

寫給C++程式設計師的UML實務手冊//讀書心得

原文連結: https://darkblack01.blogspot.com/2013/01/cuml.html
移植時的最後更新日期: 2015-12-23T14:16:57.731+08:00


此篇文章是我讀《UML for C++ programmer》的讀書心得,透過書裡的範例,重新整理而成的一篇文章。


本文目錄

  • 類別圖
    系統內部的靜態結構
  • 循序圖
    實作,物件外部的互動行為
  • 案例圖
    系統的外部行為
  • 狀態圖
    物件內部變化





類別圖

結合關係

只要在類別內宣告,不管是直接宣告或指標(java骨子裡都是指標,沒有直接宣告這回事,所以在C當作是同一回事。)

一對一結合關係

class Bid
{
Fund fundObj;
};
將Fund類別的物件,當作是Bid類別的Member Variable使用。
類別圖
物件圖

一對多結合關係

class Account
{
vector<Bid
> bidObj;
};
將Bid類別的物件,當作是Account類別的Member Variable使用。
陣列也一樣
類別圖

物件圖

多對一結合關係

class Account
{
vector <Bid*> bidObj;
};
將Bid類別的物件,當作是Account類別的Member Variable使用。 陣列也一樣
class Bid 
{
Fund fundObj;
};
將Bid類別的物件,當作是Account類別的Member Variable使用。
類別圖

物件圖


組合關係

其實,還有一個聚合關係,不管是組合關係還是聚合關係,差別在於這兩個類別之間,有著「整體-部份」的關係
(在Design Pattern裡,就是組件的那個Pattern?)
聚合關係 - 不會create「部份」類別
組合關係 - 會create「部份」類別
class RegularBid 
{
public:
void createBidItem( float, Fund
);
private:
vector<biditem> itemObj;
};
void RegularBid::createBitItem(float theUnit, Fund* theFund)
{
BidItem myItem = new BidItem(theUnit);
}
BidItem和RegularBid之間有著整體 – 部份的關係
將BidItem類別的物件,當作是RegularBid類別的Member Variable使用。
利用Member Function來掌握其生命週期。
類別圖

物件圖


依賴關係

此類別內不宣告該物件,而該物件為參數。
class Bid
{
int calcAsset(Fund
);
};
將Fund類別的物件,當作Bid類別中Member Funcion的Parameter使用
類別圖

物件圖


一般化關係

這就是繼承,其中還有protceted的權限和虛擬函數。
class SingleBid : puclic Bid
{
};
SingleBid繼承Bid。
類別圖

物件圖

protected權限的一般化關係

class Bid
{
protected:
Fund *fundObj;
int amount;
};
Bid裡的funObj和amount設定成protected的權限,提供繼承類別(SingleBid)的存取權限,並且不屬於公開。。
class SingleBid : puclic Bid 
{
};
SingleBid繼承了Bid。
類別圖

物件圖

有虛擬函數的一般化關係

class Bid
{
public:
virtual int calcAsset() = 0;
virtual float getUnit() = 0;
};
Bid裡的calcAsset()和getUnit()設定為(純)虛擬,提供繼承類別(SingleBid)重新定義該Member function的實作。
class SingleBid : puclic Bid
{
public:
int calcAsset();
float getUnit();
};
SingleBid繼承了Bid,重新定義caclAsset()和getUnit()兩個Member function,因為虛擬所以可以透過Bid呼叫SingleBid的Memberfunction實作內容。
類別圖

物件圖



循序圖

循序圖與類別圖的耦合

結合關係

class Bid 
{
Fund fundObj;
};
float Bid::calcUnit()
{
thePrice = funObj->getPirce();
}

float Bid::calcFee()
{
theFundFee = fundObj->getFee();
}


結合關係

class Account 
{
vector<Bid
> bidObj;
};
int Account::calcAmount()
{
for( int i = 0; i < size; i)
theAmount += bidObj[i]->getAmount();
}

結合關係

class Account 
{
vector<Bid*> bidObj;
};
int Account::calcAsset()
{
for( int i = 0; i < size; i++)
theAsset += bidObj[i]->getAsset();
}

class Bid
{
Fund fundObj;
};
int Bid::calcAsset()
{
return unit * funObj->getPrice();
}

組合關係

class RegularBid
{
public:
void createBidItem( float, Fund
);
private:
vector itemObj;
};
void RegularBid::createBitItem(float theUnit, Fund* theFund)
{
BidItem myItem = new BidItem(theUnit);
myItem->setFund(theFund);
itemObj.push_back(myItem);
}

依賴關係

class Bid
{
int calcAsset(Fund
);
};
int Bid::calcAsset(Fund* theFund)
{
return unit * theFund->getPrice();
}

一般化關係

class SingleBid : puclic Bid 
{
};

循序圖和.cpp的實作

private操作

class RegularBid 
{
public:
int calcAsset(Fund*);
private:
float getUnit();
};
int Bid::calcAsset(Fund* theFund) 
{
return getUnit() * theFund->getPrice();
}

protected操作

class Bid 
{
public:
virtual int calcAsset(Fund*) = 0;
private:
float getUnit();
};
class RegularBid : public Bid
{
int calcAsset(Fund*);
};
int RegularBid::calcAsset(Fund* theFund) 
{
return getUnit() * theFund->getPrice();
}

new操作

class Account 
{
public:
Account();
};
int main()
{
Account* myAccount = new Account();
}

delete操作

class Account 
{
public:
~Account();
};
int main() 
{
delete myAccount;
}

通訊圖

可透過轉檔的方式,從循序圖轉成通訊圖
通訊圖 = 序號 + 循序圖


案例圖

參考《架站前一定要上的10堂課》裡的sitepath diagram

狀態圖

參考電機電子的FSM