• UML类图详解_泛化关系


    泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次。

    依旧是这个图

    下面我们来看一个例子

    Account.h

     1 #include <cstdlib>
     2 #include <vector>
     3 #include "Bid.h" 
     4 using namespace std;
     5  
     6 class Account 
     7 {
     8 public:
     9     void setBid(Bid*); 
    10     int calcAsset(); 
    11 private:
    12     vector<Bid*> bidObj;
    13 };

    Account.cpp

     1 #include "Account.h"
     2             
     3 void Account::setBid(Bid *theBid)
     4 { 
     5      bidObj.push_back(theBid);
     6 }
     7 
     8 int Account::calcAsset()
     9 {
    10      int size,theAsset=0;
    11      size=bidObj.size();
    12      for(int i=0;i<size;i++)
    13          theAsset=theAsset+bidObj[i]->calcAsset();
    14      return theAsset; 
    15 } 

    Bid.h

     1 #include "Fund.h" 
     2  
     3 class Bid 
     4 {
     5 public:
     6     void setFund(Fund*);
     7     virtual int calcAsset()=0; 
     8     virtual float getUnit()=0;
     9 protected:
    10     Fund *fundObj; 
    11 };

    Bid.cpp

    1 #include "Bid.h"
    2 
    3 void Bid::setFund(Fund *theFund)
    4 {
    5      fundObj=theFund;
    6 }

    Fund.h

    1 class Fund
    2 { 
    3 public:
    4     Fund(float);
    5     float getPrice();
    6 private:
    7     float price;
    8 };

    Fund.cpp

     1 #include "Fund.h"
     2 
     3 Fund::Fund(float thePrice)
     4 {
     5     price=thePrice;
     6 }
     7 
     8 float Fund::getPrice()
     9 {
    10     return price;
    11 }

    SingleBid.h

    1 class SingleBid : public Bid
    2 {
    3 public:
    4     SingleBid(float);    
    5     int calcAsset();
    6     float getUnit(); 
    7 private: 
    8        float unit;
    9 }; 

    SingleBid.cpp

     1 #include "SingleBid.h"
     2 
     3 SingleBid::SingleBid(float theUnit)
     4 {
     5     unit=theUnit; 
     6 } 
     7 
     8 int SingleBid::calcAsset()
     9 {
    10     return unit*fundObj->getPrice();
    11 }
    12 
    13 float SingleBid::getUnit()
    14 {
    15     return unit;
    16 } 

    RegularBid.h

     1 #include <cstdlib>
     2 #include <vector>
     3 #include "BidItem.h" 
     4 #include "Bid.h"
     5 using namespace std;
     6 
     7 class RegularBid : public Bid
     8 {
     9 public:
    10     RegularBid();  
    11     int calcAsset();
    12     float getUnit();   
    13     
    14 private:
    15     vector<BidItem*> itemObj;
    16 }; 

    RegularBid.cpp

     1 #include "RegularBid.h"
     2 
     3 RegularBid::RegularBid()
     4 {
     5     BidItem *myItem; 
     6     myItem=new BidItem(59.53); 
     7     itemObj.push_back(myItem);
     8     myItem=new BidItem(89.85); 
     9     itemObj.push_back(myItem);
    10     myItem=new BidItem(91.45); 
    11     itemObj.push_back(myItem);
    12 } 
    13 
    14 float RegularBid::getUnit()
    15 {
    16     int size;
    17     float theUnit=0;
    18     size=itemObj.size();
    19     for(int i=0;i<size;i++)
    20          theUnit=theUnit+itemObj[i]->getUnit();
    21     return theUnit;   
    22 } 
    23 
    24 int RegularBid::calcAsset()
    25 {
    26     return getUnit()*fundObj->getPrice();
    27 }

    BidItem.h

    1 class BidItem 
    2 {
    3 public:
    4     BidItem(float); 
    5     float getUnit();
    6 private:
    7     float unit;
    8 };

    BidItem.cpp

     1 #include "BidItem.h"
     2 
     3 BidItem::BidItem(float theUnit)
     4 { 
     5      unit=theUnit;
     6 }
     7 
     8 float BidItem::getUnit()
     9 {
    10     return unit;
    11 }

    main.cpp

     1 // main.cpp
     2 //
     3 
     4 #include <cstdlib>
     5 #include <iostream>
     6 #include "SingleBid.h"
     7 #include "RegularBid.h"
     8 #include "Account.h" 
     9 #include "Fund.h" 
    10 using namespace std; 
    11  
    12 int main(int argc, char *argv[])
    13 { 
    14     Fund *myFund; 
    15     SingleBid *mySingleBid; 
    16     RegularBid *myRegularBid; 
    17     Account myAccount; 
    18     
    19     myFund=new Fund(19.84); 
    20     mySingleBid=new SingleBid(935.76);
    21     mySingleBid->setFund(myFund); 
    22     myAccount.setBid(mySingleBid); 
    23     cout << "大华大华基金单位及净值: "
    24          << "(" << mySingleBid->getUnit() << ")"
    25          << "(" << myFund->getPrice() << ")" << endl; 
    26          
    27     myFund=new Fund(37.83); 
    28     mySingleBid=new SingleBid(721.45);
    29     mySingleBid->setFund(myFund); 
    30     myAccount.setBid(mySingleBid);
    31     cout << "日盛上选基金单位及净值: "
    32          << "(" << mySingleBid->getUnit() << ")"
    33          << "(" << myFund->getPrice() << ")" << endl;
    34     
    35     myFund=new Fund(49.61); 
    36     myRegularBid=new RegularBid();
    37     myRegularBid->setFund(myFund); 
    38     myAccount.setBid(myRegularBid);
    39     cout << "富邦长虹基金单位及净值: "
    40          << "(" << myRegularBid->getUnit() << ")"
    41          << "(" << myFund->getPrice() << ")" << endl << endl;
    42     
    43     cout << "总资产为: "
    44          << myAccount.calcAsset() << endl << endl;
    45            
    46     system("PAUSE");
    47     return EXIT_SUCCESS;
    48 }

    下面我们来画一下UML图,并且用UML自动生成C++代码来做一个比较

    生成代码对比 

    Account.h

    达到预期

    Bid.h

    达到预期
    Fund.h

    达到预期

    SingleBid.h

    达到预期

    RegularBid.h 

    达到预期

    BidItem.h 

    达到预期

  • 相关阅读:
    flash使用lua
    如何写出兼容大部分浏览器的CSS 代码
    typeof 详解
    人月神话阅读笔记(三)
    人月神话阅读笔记(二)
    仓库物资管理
    动手动脑(四)
    人月神话阅读笔记(一)
    动手动脑(六 文件操作)及课后作业
    java异常处理
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7750506.html
Copyright © 2020-2023  润新知