寫給C++程式設計師的UML實務手冊//讀書心得
¶寫給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; 
};|  | 
| 類別圖 | 
|  | 
| 物件圖 | 
一對多結合關係
class Account
 {
     vector<Bid> bidObj;
};陣列也一樣
|  | 
| 類別圖 | 
|  | 
| 物件圖 | 
多對一結合關係
class Account
 {
    vector <Bid*> bidObj;
};class Bid 
{
     Fund fundObj; 
};|  | 
| 類別圖 | 
|  | 
| 物件圖 | 
組合關係
其實,還有一個聚合關係,不管是組合關係還是聚合關係,差別在於這兩個類別之間,有著「整體-部份」的關係(在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類別的Member Variable使用。
利用Member Function來掌握其生命週期。
|  | 
| 類別圖 | 
|  | 
| 物件圖 | 
依賴關係
此類別內不宣告該物件,而該物件為參數。class Bid
 {
     int calcAsset(Fund);
 };|  | 
| 類別圖 | 
|  | 
| 物件圖 | 
一般化關係
這就是繼承,其中還有protceted的權限和虛擬函數。class SingleBid : puclic Bid
 {
 };|  | 
| 類別圖 | 
|  | 
| 物件圖 | 
protected權限的一般化關係
class Bid
 {
 protected:
     Fund *fundObj;
     int amount;
  };class SingleBid : puclic Bid 
{
 };|  | 
| 類別圖 | 
|  | 
| 物件圖 | 
有虛擬函數的一般化關係
class Bid
 {
 public:
     virtual int calcAsset() = 0;
     virtual float getUnit() = 0; 
};class SingleBid : puclic Bid
 {
 public:
     int calcAsset();
     float getUnit();
 };|  | 
| 類別圖 | 
|  | 
| 物件圖 | 
循序圖
循序圖與類別圖的耦合
結合關係
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; itheAmount += 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
                發表於 
                
            
            
                
                    tags:
                    
  
  { C_and_Cpp }
   
                
            
        








